Основная задача Flexbox — это сделать работу слоев гибким, а работу понятной.

Display: Flex


У нас есть 4-ре элемента div в сером контейнере div
По умолчанию браузер выстраивает все элементы на странице в столбец сверху вниз

image

Теперь чтобы начать работать с flex-элементом на нужно сделать общий div flex-контейнером и делается это так:

image

В результате получаем следующее:

image

Как видим все квадраты становятся в ряд.

Flex Direction


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

image

По умолчанию все элементы всегда располагаются вдоль главной оси, с лева на право, поэтому они и выровнялись в линию когда применили свойство Display: Flex;

В то же время мы можем вращать главную ось применив свойство: Flex Direction

image

image

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

Еще есть пару полезных свойств для flex-direction: row-reverse и column-reverse.

image

Justify Content


Justify-content отвечает за выравнивание элементов по главной оси.

image

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

1. flex-start;
2. flex-end;
3. center;
4. space-between;
5. space-around.

1 значение:

image

2 значение:

image

3 значение:

image

4 значение:

image

5 значение:

image

Space-between задает одинаковое расстояние между квадратами, а space-around одинаковое расстояние между квадратами и контейнером.

Align Items


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

image

Вернемся обратно к flex-direction: row и пройдемся по командам align-items оно также может принимать 5-ть значений:

1. flex-start;
2. flex-end;
3. center;
4. stretch;
5. baseline.

1 значение:

image

2 значение:

image

3 значение:

image

4 значение:

image

5 значение:

image

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

image

т.е. внутри не будет контента.

Также свойства justify-content с align-items можно объединять и выравнивать по двум осям:

image

image