Как установить одинаковую высоту первой строки при использовании Flex Wrap с помощью min-height?

Вопрос или проблема

В настоящее время я использую Flex wrap, чтобы создать пространство при переходе на следующую строку. Однако, если высота первого элемента увеличивается, высота первой строки flex wrap не увеличивается.

<div class="parent">
  <div class="unique-wrapper">
    <div class="unique_element">Первый</div>
  </div>
  <div class="child-wrapper">
    <div class="child">Второй</div>
    <div class="child">Третий</div>
    <div class="child">Четвертый</div>
    <div class="child">Пятый</div>
  </div>
</div>
div {
  font-family: arial, sans-serif; 
  margin: 5px;
  color: white;
  border: 1px dotted black;
}

.parent { 
  display: flex;
  width: 300px;
}

.unique_element {
  background-color: Crimson;
  padding: 10px 10px 10px 10px;
}

.unique-wrapper, .child-wrapper {
  border: none;
  margin: 0;
}

.unique-wrapper {
  flex: 3;
}

.child-wrapper {
  flex: 7;
  display: flex;
  flex-wrap: wrap;
}

.child {
  width: auto;
  background-color: Cornflowerblue;
  padding: 10px 10px 10px 10px;
}

мой результат

При увеличении высоты
По мере увеличения высоты первого элемента, высота второго и третьего также должна увеличиться, но в текущем коде только первый элемент стал длиннее. Я искал и нашел способ добавить скрытый элемент, но не могу присвоить класс конкретному элементу, используя data.map. Что мне делать?

результат, который я хочу
Мне хотелось бы знать, какие действия нужны, чтобы сделать это похоже на изображение выше.

Ответ или решение

Чтобы обеспечить одинаковую высоту для первого ряда flex (в данном случае, области с элементом "First") и последующих рядов, созданных с использованием Flexbox и flex-wrap, можно следовать нескольким шагам. Обратите внимание, что высота всех дочерних элементов должна адаптироваться к наибольшей высоте в ряду. Вот какие действия можно предпринять для решения данной проблемы:

1. Используйте align-items:

В parent-контейнере можно задать свойство align-items со значением stretch. Это заставит элементы внутри контейнера растягиваться по высоте, согласно высоте самого высокого элемента. Измените CSS для parent следующим образом:

.parent { 
  display: flex;
  width: 300px;
  align-items: stretch; /* Добавьте это свойство */
}

2. Убедитесь, что элементы имеют одинаковую высоту:

Чтобы элементы в child-wrapper были одного размера, вы можете использовать свойство min-height для того, чтобы установить минимальную высоту элементов. Задайте такое значение min-height в зависимости от ваших требований. Например:

.child {
  width: auto;
  background-color: Cornflowerblue;
  padding: 10px;
  min-height: 40px; /* Установите необходимую минимальную высоту */
}

3. Использование flex-basis или flex-grow:

Если элементы могут увеличиваться по размеру, можно также использовать свойство flex-grow. Это позволит элементам занимать доступное пространство пропорционально:

.child {
  width: auto;
  flex-grow: 1; /* Позволяет элементам расти */
  background-color: Cornflowerblue;
  padding: 10px;
  min-height: 40px; /* Минимальная высота для поддержания равного размера */
}

4. Пример полного кода:

Объединив все вышеуказанные изменения, ваш CSS может выглядеть следующим образом:

div {
  font-family: arial, sans-serif; 
  margin: 5px;
  color: white;
  border: 1px dotted black;
}

.parent { 
  display: flex;
  width: 300px;
  align-items: stretch; /* Это свойство гарантирует равную высоту */
}

.unique_element {
  background-color: Crimson;
  padding: 10px;
}

.unique-wrapper, .child-wrapper {
  border: none;
  margin: 0;
}

.unique-wrapper {
  flex: 3;
}

.child-wrapper {
  flex: 7;
  display: flex;
  flex-wrap: wrap;
}

.child {
  width: auto;
  flex-grow: 1; /* Элементы будут расти равномерно */
  background-color: Cornflowerblue;
  padding: 10px;
  min-height: 40px; /* Минимальная высота для элементов */
}

Заключение:

Следуя этим рекомендациям, вы можете добиться того, чтобы высота всех строк была одинаковой, включая первую строку и последующие элементы, в зависимости от высоты первого элемента. Используя свойства Flexbox, такие как align-items, а также min-height и flex-grow, можно создать адаптивный и согласованный интерфейс. Если у вас остались вопросы или возникли сложности с реализацией, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...