Ответ 1
Автоматический минимальный размер элементов 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на главной оси, при указании в свойстве min-size главной оси гибких элементов указывается автоматический минимальный размер. В противном случае вычисляется до0.
Другими словами:
-
min-width: autoиmin-height: autoзначения по умолчанию применяются только тогда, когдаvisibleoverflow. - Если значение
overflowнеvisible, значение свойства min-size равно0. - Следовательно,
overflow: hiddenможет заменитьmin-width: 0иmin-height: 0.
а также...
- Алгоритм минимального размера применяется только на главной оси.
- Например, гибкий элемент в контейнере в направлении строки не получает
min-height: autoпо умолчанию. - Для более подробного объяснения смотрите этот пост:
Вы применили min-width: 0, а элемент все еще не сжимается?
Вложенные контейнеры Flex
Если вы имеете дело с элементами flex на нескольких уровнях структуры HTML, может потребоваться переопределить стандартную min-width: auto/min-height: auto для элементов на более высоких уровнях.
В основном, гибкий элемент более высокого уровня с min-width: auto может предотвратить сжатие элементов, вложенных ниже с min-width: 0.
Примеры:
- Элемент Flex не сжимается меньше, чем его содержимое
- Приспособление ребенка к родителю
- Свойство white-space css создает проблемы с flex
Браузер Рендеринг Заметок
-
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>