Flexbox, столбец ведет себя иначе, чем строка

Похоже, что flex-direction: column вообще не работает. С другой стороны, flex-direction: row; - отлично работает. Вам нужно только заменить «столбец» на «строку», чтобы увидеть его в приведенном ниже коде:

.flex-container {
  display: flex;
  flex-direction: column;
  height: 400px;
  background-color: DodgerBlue;
}

.flex-container>div {
  flex-grow: 1;
  background-color: #f1f1f1;
  margin: 10px;
  line-height: 75px;
}
<h1>Flexible Boxes</h1>

<div class = "flex-container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
</div>

В режиме столбца display: flex ведет себя как обычный display: block, а его дочерние элементы выходят из него вместо того, чтобы сжиматься, чтобы соответствовать высоте или max-height: 400px;

Это почему? А почему работает только в "строчном" режиме?

высота строки, вызывающая проблему. Удалите высоту строки

Nandita Sharma 11.07.2018 13:43

добавить минимальную высоту: 0

Temani Afif 11.07.2018 13:44

Это действительно так. Поместите это в ответ, чтобы я мог принять это.

ElSajko 11.07.2018 13:44

лучше прочтите дубликат, чтобы понять;) не принимайте просто исправления без объяснения причин, иначе вы будете сталкиваться с одной и той же проблемой снова и снова

Temani Afif 11.07.2018 13:45

?? вы устанавливаете статическую высоту + высоту строки от 75 пикселей до 6 элементов + поля. Это уже намного больше, чем начальные 400 пикселей. он все равно будет переполняться. line-height и margins не сжимаются. Если речь идет о вертикальном центрировании также текста, тогда flexbox может быть инбрицирован, а трюк с высотой строки может быть отброшен * .... codepen.io/gc-nomade/pen/KBwqdV

G-Cyrillus 11.07.2018 13:54

@ G-Cyr, вы правы, но высота может уменьшиться, если мы правильно установим вещи (добавив min-height: 0) ... на самом деле проблема в том, что элемент не может уменьшиться за пределы размера содержимого, определенного line-height [конечно это не значит, что это хорошая идея, но это объясняет поведение]

Temani Afif 11.07.2018 14:11

@TemaniAfif действительно может уменьшить высоту, но с помощью функции flex-grow: 1; нет даже необходимости устанавливать высоту, независимо от количества элементов, которые он полностью заполнит родительский элемент гибкости .. пока контент сам по себе не станет слишком большим;) Я думаю, вы неправильно поняли точку моего комментария, где я не упомянул набор высота дочерних элементов, а их высота зависит от содержимого и высоты строки. Мне было интересно, почему line-height? вертикальное центрирование?

G-Cyrillus 11.07.2018 14:17
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
7
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Удалите высоту строки или добавьте overflow: auto в контейнер. В основном это жестко запрограммированная высота каждого дочернего элемента, создающего переполненный контейнер.

<!DOCTYPE html>
<html>

<head>
  <style>
    .flex-container {
      display: flex;
      flex-direction: column;
      height: 400px;
      background-color: DodgerBlue;
    }
    
    .flex-container>div {
      flex-grow: 1;
      background-color: #f1f1f1;
      margin: 10px;
    }
  </style>
</head>

<body>
  <h1>Flexible Boxes</h1>

  <div class = "flex-container">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
  </div>
</body>

</html>

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