Как работает CSS Flexbox
22 июня, 2021

Как работает CSS Flexbox (+ gif картинки)

Автор: DEVadmin

CSS Flexbox — это технология для создания сложных гибких макетов за счёт правильного размещения элементов на странице. Мы (freecodecamp.org) решили объяснить свойства CSS Flexbox с использованием анимации.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.1

Свойство 1: Display: Flex

Есть страница:

Как работает CSS Flexbox Свойство 1: Display: Flex

На ней размещено 4 div разных размеров, которые находятся внутри серого div. У каждого div есть свойство display: block. Поэтому каждый блок занимает всю ширину строки. Чтобы начать работать с CSS Flexbox, нужно сделать контейнер flex-контейнером. Делается это так:

#container {
  display: flex;
}
Как работает CSS Flexbox Свойство 1: Display: Flex

Так у блоков появилось свойство flex-контекст, которое в дальнейшем позволит ими управлять гораздо проще, чем с использованием стандартного CSS.2

Свойство 2: Flex Direction

У flex-контейнера есть две оси: главная и перпендикулярная ей.

Как работает CSS Flexbox

По умолчанию все предметы располагаются вдоль главной оси — слева направо. Именно поэтому блоки в предыдущем примере выстроились в линию, когда мы применили display: flex. А вот flex-direction позволяет вращать главную ось.

#container {
  display: flex;
  flex-direction: column;
}
Как работает CSS Flexbox Свойство Flex Direction

Обратите внимание, что flex-direction: column не выравнивает блоки по оси, перпендикулярной главной. Главная ось сама меняет своё расположение, и теперь направлена сверху вниз.

Есть ещё парочка свойств для flex-directionrow-reverse и column-reverse.

Как работает CSS Flexbox Свойство Flex Direction

Свойство 3: Justify Content

Отвечает за выравнивание элементов по главной оси:

#container {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
}

Justify-content может принимать 5 значений:

  1. flex-start
  2. flex-end
  3. center
  4. space-between
  5. space-around
Как работает CSS Flexbox Свойство Justify Content

Space-between задаёт одинаковое расстояние между блоками, но не между контейнером и блоками. Space-around также задаёт одинаковое расстояние между блоками, но теперь расстояние между контейнером и блоками равно половине расстояния между блоками.4

Свойство 4: Align Items

Если justify-content работает с главной осью, то align-items работает с осью, перпендикулярной главной оси. Вернёмся к flex-direction: row и пройдёмся по командам align-items:

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline
Как работает CSS Flexbox Свойство Align Items

Стоит заметить, что для align-items: stretch высота блоков должна быть равна auto. Для align-items: baseline теги параграфа убирать не нужно, иначе получится так:

Как работает CSS Flexbox Свойство Align Items

Чтобы получше разобраться в том, как работают оси, объединим justify-content с align-items и посмотрим, как работает выравнивание по центру для двух свойств flex-direction:

Как работает CSS Flexbox Свойство Align Items

Свойство 5: Align Self

Позволяет выравнивать элементы по отдельности:

#container {
  align-items: flex-start;
}
.square#one {
  align-self: center;
}
// Only this square will be centered.

Для двух блоков применим align-self, а для остальных — align-items: center и flex-direction: row.

Как работает CSS Flexbox Свойство Align Self

Источник: «How Flexbox works — explained with big, colorful, animated gifs»