С MDN :
Свойство flex
может быть указано с использованием одного, двух или трех значений.
[...]
Синтаксис с тремя значениями:
- первое значение должно быть без единицы
<number>
, и оно интерпретируется как <flex-grow>
. - второе значение должно быть без единиц измерения
<number>
и интерпретируется как <flex-shrink>
. - третье значение должно быть действительным значением для
width
и интерпретируется как <flex-basis>
.
Исходя из этого, мы можем сказать, чтоflex: 0 0 673px;
является сокращением, но на самом деле он не говорит нам, что означает каждое значение.Вот краткий эквивалент:
flex-grow: 0;
flex-shrink: 0;
flex-basis: 673px;
Итак, давайте посмотрим на каждое из этих свойств по очереди.Давайте начнем с flex-basis
, потому что в его названии есть «основа» и звучит как хорошее место для начала.
Свойство flex-basis
CSS устанавливает начальный основной размер элемента Flex.Он устанавливает размер поля содержимого, если иное не установлено с помощью box-sizing
.
Расчет гибкого макета - это процесс, состоящий из нескольких этапов.Игнорируя часть о box-sizing
, это свойство указывает механизму макета запускаться, устанавливая для каждого элемента этот размер в направлении flex.У него есть некоторые другие специальные значения ( подробно описано в MDN ), но в этом суть.
Свойство flex-grow
CSS определяет, сколько свободного пространства в гибком контейнере должно быть назначено этому элементу (коэффициент роста гибкого канала).
Если гибкий контейнербольше, чем объединенный базовый размер каждого элемента внутри него, механизм компоновки будет растягивать и / или растягивать элементы для заполнения контейнера.Это свойство определяет своего рода коэффициент масштабирования;элемент с flex-grow
, установленным на 2
, будет растягиваться вдвое больше, чем один с 1
. Значение 0
указывает механизму макета никогда не растягивать этот элемент.
flex-shrink
Свойство CSS устанавливает коэффициент сжатия при сгибании.Если размер изгибаемых элементов больше, чем у гибкого контейнера, то элементы уменьшаются в соответствии с flex-shrink
.
Итак, мы знаем, как заполнить больший контейнер.Но что, если контейнер слишком маленький?Применяется тот же принцип, только на этот раз с использованием свойства flex-shrink
.Обратите внимание, что использование 0
для этого может привести к тому, что гибкие элементы переполнят свой контейнер.