для моего расширенного требования «нескольких разделов», так как я надеюсь, что где-то есть решение CSS (или, по крайней мере, однажды)

ыске: решение только для CSS, позволяющее использовать равные по высоте разделы сетки для каждой строки, что также является адаптивным.

Надеемся, что эта диаграмма лучше объясняет требование, чем слова в этом посте:

«Сетка элементов» должна быть отзывчивой - в ней может отображаться различное количество карточек на строку в зависимости от ширины области просмотра. И в пределах данной строки эквивалентные секции должны иметь одинаковую высоту для каждого ряда.

В приведенном ниже HTML и CSS - карточки элементов разбиты на нужные нам строки (в двух примерных точках останова: настольный и мобильный), но высота раздела контента варьируется (хм):

.items {
  max-width: 1200px;
}

.item {
  width: 25%;
  box-sizing: border-box;
  display: inline-block;
  vertical-align: top;
  padding: 0 12px;
  margin: 24px -4px 24px 0;
}

@media (max-width: 600px) {
  .item {
    width: 50%;
  }
}

.item__heading {
  background-color: #d4d0f5;
  padding: 10px;
  text-align: center;
  border: 1px solid #bbbbbb;
}

.item__content {
  padding: 10px;
  border-left: 1px solid #bbbbbb;
  border-right: 1px solid #bbbbbb;
}

.item__price {
  background-color: #e0f6d9;
  padding: 10px;
  text-align: center;
  border: 1px solid #bbbbbb;
}
<div class="items">

  <div class="item">
    <div class="item__heading">
      Item 1
    </div>
    <div class="item__content">
      Some content that is not that long
    </div>
    <div class="item__price">
      £99.99
    </div>
  </div>


  <div class="item">
    <div class="item__heading">
      Item 2
    </div>
    <div class="item__content">
      Some content that is longer than other items on the same row and sets the height of this section
    </div>
    <div class="item__price">
      £69.99
    </div>
  </div>

  <div class="item">
    <div class="item__heading">
      Item 3
    </div>
    <div class="item__content">
      Some content that is not that long
    </div>
    <div class="item__price">
      £69.99
    </div>
  </div>

  <div class="item">
    <div class="item__heading">
      Item 4
    </div>
    <div class="item__content">
      Some content that is not that long
    </div>
    <div class="item__price">
      £109.99
    </div>
  </div>

  <div class="item">
    <div class="item__heading">
      Item 5
    </div>
    <div class="item__content">
      Some content that is a medium kind of length blah blah
    </div>
    <div class="item__price">
      £29.99
    </div>
  </div>

  <div class="item">
    <div class="item__heading">
      Item 6
    </div>
    <div class="item__content">
      Some content that is not that long
    </div>
    <div class="item__price">
      £99.99
    </div>
  </div>

    
</div>

Следующий код - это решение на основе JavaScript, которое достигает желаемого результата, но я стараюсь избегать этого:https://codepen.io/rusta/pen/KmbVKd

Ограничения

Количество элементов, отображаемых в списке сетки, может быть любым числом от 1 до 150.Размер отображаемого содержимого элемента будет действительно переменным (поэтому выбор «разумной» минимальной высоты не вариант)

Я надеялся, что новая система CSS Grid поможет мне достичь вышеизложенного, но, поиграв с ней некоторое время, мне нужно немного больше структуры, чем я надеялся, и адаптивный аспект казался довольно сложным. Но, возможно, где-то есть ответ на основе CSS Grid

Дальнейшее примечание: я говорю решение только для CSS, под которым я подразумеваю решение не JS. Если необходимо изменить блоки HTML (порядок / вложение / имена классов) для поддержки не-JS-решения, это совершенно нормально

В этом тривиальном примере - мы фокусируемся только на разделе «контент», чтобы иметь «совпадающие высоты», - поскольку мы можем предположить, что разделы заголовка и цены, естественно, будут иметь одинаковую высоту. Было бы неплохо включить «эквивалентность» в любом соответствующем разделе сетки (заголовок / контент / цена / другое), но это может быть на другой день ...

Ответы на вопрос(1)

Ваш ответ на вопрос