Автоматический минимальный размер элементов Flex
Вы сталкиваетесь с настройкой по умолчанию flexbox.
Сгибаемый элемент не может быть меньше размера его содержимого вдоль главной оси.
Значения по умолчанию ...
min-width: auto
min-height: auto
... для гибких элементов в направлении строк и столбцов соответственно.
Вы можете переопределить эти значения по умолчанию, установив flex-элементы в:
min-width: 0
min-height: 0
overflow: hidden
(или любое другое значение, кроме visible
)
Спецификация Flexbox
4,5. Автоматический минимальный размер элементов Flex
Чтобы обеспечить более разумный минимальный размер по умолчанию для гибких элементов, эта спецификация вводит новое auto
значение в качестве начального значения min-width
и min-height
свойств, определенных в CSS 2.1.
Что касается auto
стоимости ...
Для гибкого элемента, который overflow
находится visible
на главной оси, если он указан в свойстве минимального размера главной оси гибкого элемента, задается автоматический минимальный размер . В противном случае он рассчитывает на 0
.
Другими словами:
min-width: auto
И по min-height: auto
умолчанию применяется только тогда , когда overflow
есть visible
.
- Если
overflow
значение не равно visible
, значение свойства min-size равно 0
.
- Следовательно,
overflow: hidden
может быть заменой min-width: 0
и min-height: 0
.
и...
- Алгоритм минимального размера применяется только на главной оси.
- Например, гибкий элемент в контейнере направления строк не получает
min-height: auto
по умолчанию.
- Для более подробного объяснения смотрите этот пост:
Вы применили min-width: 0, а элемент все еще не сжимается?
Вложенные гибкие контейнеры
Если вы имеете дело с элементами flex на нескольких уровнях структуры HTML, может потребоваться переопределить элементы по умолчанию min-width: auto
/ min-height: auto
on на более высоких уровнях.
По сути, высокоуровневый изгибаемый элемент с min-width: auto
может предотвратить сжатие предметов, вложенных ниже min-width: 0
.
Примеры:
Браузер Рендеринг Заметок
Chrome против Firefox / Edge
По крайней мере, с 2017 года, похоже, что Chrome либо (1) возвращается к min-width: 0
/ min-height: 0
значениям по умолчанию, либо (2) автоматически применяет 0
значения по умолчанию в определенных ситуациях на основе загадочного алгоритма. (Это может быть то, что они называют вмешательством .) В результате многие люди видят, что их макет (особенно нужные полосы прокрутки) работает, как и ожидалось, в Chrome, но не в Firefox / Edge. Эта проблема более подробно рассматривается здесь: гибкое сжатие между Firefox и Chrome
IE11
Как было отмечено в спецификации, то auto
значение для min-width
и min-height
свойств «новое». Это означает, что некоторые браузеры могут по-прежнему отображать 0
значение по умолчанию, потому что они реализовали гибкий макет до того, как значение было обновлено, и потому что 0
это начальное значение для min-width
и min-height
в CSS 2.1 . Одним из таких браузеров является IE11. Другие браузеры обновились до более нового auto
значения, как определено в спецификации flexbox .
Пересмотренный Демо
.container {
display: flex;
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px;
min-width: 0; /* NEW */
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
jsFiddle