Ответ 1
В общем случае элементы flex по умолчанию не могут быть меньше размера их содержимого.
В частности, это начальные настройки элементов flex:
-
min-width: auto
(применяется вflex-direction: row
) -
min-height: auto
(применяется вflex-direction: column
)
Более конкретно, посмотрите на язык спецификации:
4.5. Подразумевается минимальный размер Flex Элементы
Чтобы обеспечить более разумный минимальный размер по умолчанию для гибких элементов, это спецификация вводит новое значение
auto
в качестве начального значения свойстваmin-width
иmin-height
, определенные в CSS 2.1.
auto
В элементе flex,
overflow
которого естьvisible
на главной оси, когда указанный в элементе min-size основного элемента гибкого элемента, указывает автоматический минимальный размер. Он иначе вычисляет0
.
Иными словами, алгоритм минимального размера применяется только к главной оси.
Ваши входные элементы в контейнерах с колонками не получают min-width: auto
– потому что главная ось вертикальна в этих случаях – поэтому они сжимаются и не будут переполнять контейнер. Вы можете увидеть, как это поведение воспроизводится на вашем втором входном элементе. Уменьшите размер экрана при просмотре .
То же самое происходит с третьим входом, который является дочерним элементом вложенного гибкого контейнера с flex-direction: column
... EXCEPT, этот контейнер в виде столбца также является гибким элементом большего контейнера с flex-direction: row
.
Это означает, что основная ось вложенного контейнера горизонтальна и применяется min-width: auto
. В результате этот гибкий элемент не будет уменьшаться ниже внутренней ширины входа. Для иллюстрации см. Предыдущую версию .
Поэтому вам нужно переопределить это значение по умолчанию с помощью min-width: 0
или overflow: hidden
(demo).
И по причинам, описанным выше, четвертый ввод, содержащийся во вложенном контейнере гибкости строки, также должен иметь переопределенный min-width: auto
(демо).
Связано: Почему не сгибает элемент с уменьшением размера содержимого?