Динамические строки с использованием CSS Grid

Я использую 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>

Это создает макет, в котором первая строка правильная, вторая строка имеет правильный макет, но все итерации подзаголовков размещаются в одних и тех же ячейках, например:

 *        *       *
***              ***

Что мне нужно:

 *        *       *
 *                *
 *                *
 *                *
....

Буду признателен за любые советы о том, как это сделать ;)

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
1 624
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете удалить 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>

Другие вопросы по теме