Свойства width
и height
задают
ширину и высоту флекс элемента независимо
от направления осей. То есть, если ось горизонтальна,
то width
будет задавать ширину, но
если ось вертикальна, то width
по-прежнему
будет задавать ширину. Иногда такое поведение
не удобно.
Во флекс модели существует специальное свойство
flex-basis
, которое задает размер
элемента вдоль главной оси. Это значит, что
если главная ось горизонтальна - это свойство
будет задавать ширину элементов, а если вертикальна
- то высоту. Данное свойство нужно задавать
самим flex элементам, а не их родителю. Давайте
посмотрим на примерах.
Пусть сейчас главная ось горизонтальна, а
flex-basis
имеет значение 50px
.
В этом случае ширина элементов будет 50px
:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: flex;
flex-direction: row; /* ось горизонтальна */
width: 300px;
height: 300px;
border: 1px solid red;
}
.child {
flex-basis: 50px; /* размер элемента */
border: 1px solid green;
}
:
Давайте теперь перевернем ось, не меняя значение
свойства flex-basis
. В этом случае
уже высота элементов будет 50px
:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: flex;
flex-direction: column; /* ось вертикальна */
width: 300px;
height: 300px;
border: 1px solid red;
}
.child {
flex-basis: 50px;
border: 1px solid green;
}
:
Сделайте 5
флекс-блоков. Задайте им
ширину вдоль главной оси в 100px
.
Посмотрите на поведение блоков вдоль разных осей.
Если ось горизонтальна и блоку задано свойство
flex-basis
и одновременно свойство
width
, то flex-basis
будет
иметь приоритет. Проверьте это.
Если ось вертикальна и блоку задано свойство
flex-basis
и одновременно свойство
height
, то flex-basis
будет
иметь приоритет. Проверьте это.