Я использую Grid для представления некоторых данных. Я хотел бы иметь макет, в котором первая строка — заголовки, вторая строка — подзаголовки, а третья — основной контент. Этого довольно просто добиться, используя свойство grid-template-areas для grid-container. Моя проблема в том, что я бы хотел, чтобы первая строка генерировалась только один раз, тогда как вторая и третья строки должны быть динамическими.
Я застрял, пытаясь правильно понять первые две строки, поэтому в своем примере я буду ссылаться только на эти две.
Мой CSS grid container определен следующим образом:
.grid-container {
display:grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
grid-template-areas:
"header1 header2 header3"
"subheader1 . subheader2";
}
.header-item-1 {
grid-area: header1;
}
.header-item-2 {
grid-area: header2;
}
.header-item-3 {
grid-area: header3;
}
.sub-header-item-1 {
grid-area: subheader1;
}
.sub-header-item-2 {
grid-area: subheader2;
}
Мой html выглядит следующим образом:
<ul class = "grid-container">
<li class = "header-item-1">header1</li>
<li class = "header-item-2">header2</li>
<li class = "header-item-3">header3</li>
<!-- ko foreach: { data: subheaderItem, as: 'subheader' } -->
<li class = "sub-header-item-1" data-bind = "text: subheader.name"></li>
<li class = "sub-header-item-2" data-bind = "text: subheader.type></li>
<!-- /ko -->
</ul>
Это создает макет, в котором первая строка правильная, вторая строка имеет правильный макет, но все итерации подзаголовков размещаются в одних и тех же ячейках, например:
* * *
*** ***
Что мне нужно:
* * *
* *
* *
* *
....
Буду признателен за любые советы о том, как это сделать ;)






Вы можете удалить grid-template-areas (тот же области сетки будет перекрываться — см. другой example here) и использовать макет из 3 столбцов, используя grid-template-columns: repeat(3, 1fr), а затем установив grid-column: 1 вместо sub-header-item-1 и grid-column: 3 вместо sub-header-item-2.
См. демо ниже:
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
}
.sub-header-item-1 {
grid-column: 1;
}
.sub-header-item-2 {
grid-column: 3;
}<ul class = "grid-container">
<li class = "header-item-1">header1</li>
<li class = "header-item-2">header2</li>
<li class = "header-item-3">header3</li>
<li class = "sub-header-item-1">1</li>
<li class = "sub-header-item-2">3</li>
<li class = "sub-header-item-1">1</li>
<li class = "sub-header-item-2">3</li>
<li class = "sub-header-item-1">1</li>
<li class = "sub-header-item-2">3</li>
</ul>