DevSkillRoad

Flexbox. Часть 1

🤸 display: flex, flex-direction, justify-content, align-items

Flexbox (Flexible Box Layout) — мощный инструмент для создания гибких и адаптивных раскладок. Он позволяет легко выравнивать элементы, распределять пространство и управлять порядком.

1. display: flex — включаем флекс

Свойство display: flex превращает родительский элемент в флекс-контейнер, а его прямые дочерние элементы — в флекс-элементы.

По умолчанию все флекс-элементы выстраиваются в строку (row) и сжимаются под ширину своего содержимого. При flex-direction: column элементы сжимаются под высоту содержимого, но растягиваются по ширине.

.flex-container {
    display: flex;
}
1
2
3

Три элемента — в одной строке, сжаты под ширину содержимого

2. flex-direction — направление оси

Определяет, в каком направлении выстраиваются флекс-элементы.

Возможные значения:

flex-direction: row

.container {
    display: flex;
    flex-direction: row;
}
1
2
3

flex-direction: row-reverse

.container {
    display: flex;
    flex-direction: row-reverse;
}
1
2
3

flex-direction: column

.container {
    display: flex;
    flex-direction: column;
}
1
2
3

flex-direction: column-reverse

.container {
    display: flex;
    flex-direction: column-reverse;
}
1
2
3
📌 Важное отличие: При flex-direction: row элементы сжимаются под ширину содержимого. При flex-direction: column элементы растягиваются по ширине (на всю доступную ширину контейнера), но сжимаются по высоте под содержимое. В примере column и column-reverse у родителя задана ширина 200px, чтобы показать растяжение.

3. justify-content — выравнивание по главной оси

Управляет распределением свободного пространства вдоль главной оси (направления флекса).

Возможные значения:

justify-content: flex-start

.container {
    display: flex;
    justify-content: flex-start;
}
1
2
3

justify-content: flex-end

.container {
    display: flex;
    justify-content: flex-end;
}
1
2
3

justify-content: center

.container {
    display: flex;
    justify-content: center;
}
1
2
3

justify-content: space-between

.container {
    display: flex;
    justify-content: space-between;
}
1
2
3

justify-content: space-around

.container {
    display: flex;
    justify-content: space-around;
}
1
2
3

justify-content: space-evenly

.container {
    display: flex;
    justify-content: space-evenly;
}
1
2
3

4. align-items — выравнивание по поперечной оси

Управляет выравниванием флекс-элементов вдоль поперечной оси (перпендикулярной главной).

Возможные значения:

align-items: stretch (по умолчанию)

.container {
    display: flex;
    align-items: stretch;
}
1
2
3

align-items: flex-start

.container {
    display: flex;
    align-items: flex-start;
}
1
2
3

align-items: flex-end

.container {
    display: flex;
    align-items: flex-end;
}
Текст 1
Текст 2
Текст 3

align-items: center

.container {
    display: flex;
    align-items: center;
}
маленький
КРУПНЫЙ
Средний

✅ Все блоки выровнены по геометрическому центру. Они «висят» ровно посередине контейнера.

align-items: baseline

.container {
    display: flex;
    align-items: baseline;
}
маленький
КРУПНЫЙ
Средний

✅ Блоки выровнены по базовой линии текста (нижней линии букв). Обратите внимание, как «маленький» и «КРУПНЫЙ» выровнены по нижнему краю букв, несмотря на разную высоту блоков.

📌 Разница между center и baseline наглядно:
  • center — выравнивает блоки по их геометрическому центру (середине блока).
  • baseline — выравнивает блоки по базовой линии текста (воображаемой линии, по которой «стоят» буквы).
В примере выше: center — все три блока центрированы по вертикали. baseline — тексты "стоят" на одной линии, поэтому маленький блок приподнимается, а крупный опускается.
📌 Главная и поперечная ось: При flex-direction: row главная ось — горизонтальная (x), поперечная — вертикальная (y). При flex-direction: column — наоборот.
📓 Из тетради: «Flexbox — лучший друг верстальщика. Запомните: display: flex на родителе, justify-content для выравнивания по главной оси, align-items по поперечной. Этого достаточно для 80% задач».