Здесь у вас есть Stackblitz demo .
Вы можете поместить div
внутри плитки, чтобы она работала в качестве элемента контейнера (чтобы избежать путаницы со стилем mat-grid-tile
). Внутри этого контейнера вы можете использовать flex-box
для создания вашего макета, как вы хотите. Контейнер div
каждой плитки может иметь что-то вроде:
.container {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 100%;
height: 100%;
}
Тогда внутри контейнера div
вы можете иметь 3 section
элемента: header (принимая 20 % + доступного вертикального пространства), нижний колонтитул (занимающий 20% + доступного вертикального пространства) и body (взятие того пространства, которое не было занято верхним и нижним колонтитулами):
.container > .header {
flex-basis: 20%;
order: 1; /* Assure this is the first element, at the top */
}
.container > .footer {
flex-basis: 20%;
order: 3; /* Assure this is the third element, at the bottom */
}
.container > .body {
flex: 1;
order: 2; /* Assure this is the second element, in the middle */
}
Вы можете делать здесь практически все, что захотите. Например, вы сказали, что хотите иметь в заголовке имя слева и символ справа. Итак, давайте превратим заголовок также в другой гибкий контейнер с двумя элементами section
: header-start
и header-end
(на всякий случай, если вам нужны разные стили CSS):
.header {
display: flex;
justify-content: space-between;
flex-basis: 20%;
order: 1;
}
Общий html будет выглядеть так:
<mat-grid-list cols="2" rowHeight="2:1">
<mat-grid-tile *ngFor="let i of [1,2,3,4]">
<div class="container">
<section class="header">
<section class="header-start>
Charity name
</section>
<section class="header-end">
<mat-icon>home</mat-icon>
</section>
</section>
<section class="footer">
footer
</section>
<section class="body">
body
</section>
</div>
</mat-grid-tile>
</mat-grid-list>