Размер флекс элемента вдоль главной оси

Свойства width и height задают ширину и высоту флекс элемента независимо от направления осей. To есть, если ось горизонтальна, то width будет задавать ширину, но если ось вертикальна, то width по-прежнему будет задавать ширину. Иногда такое поведение не удобно.

Во флекс модели существует специальное свойство flex-basis, которое задает размер элемента вдоль главной оси. Это значит, что если главная ось горизонтальна - это свойство будет задавать ширину элементов, а если вертикальна - то высоту. Данное свойство нужно задавать самим flex элементам, а не их родителю. Давайте посмотрим на примерах.

Пусть сейчас главная ось горизонтальна, а flex-basis имеет значение 50px. В этом случае ширина элементов будет 50px:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
</div>
css.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:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
</div>
css.parent {
  display: flex;
  flex-direction: column; /* ось вертикальна */
  width: 300px;
  height: 300px;
  border: 1px solid red;
}
.child {
  flex-basis: 50px;
  border: 1px solid green;
}

Результат:

Задание 1

Сделайте 5 флекс-блоков. Задайте им ширину вдоль главной оси в 100px. Посмотрите на поведение блоков вдоль разных осей.

Задание 2

Если ось горизонтальна и блоку задано свойство flex-basis и одновременно свойство width, то flex-basis будет иметь приоритет. Проверьте это.

Задание 3

Если ось вертикальна и блоку задано свойство flex-basis и одновременно свойство height, то flex-basis будет иметь приоритет. Проверьте это.