Flexbox: ряды и выравнивание

Главный инструмент выравнивания: строим ряды, центрируем и распределяем пространство.

Flexbox раскладывает детей вдоль одной оси и даёт точное управление их выравниванием и распределением свободного места.

Включаем flex и задаём направление

Класс flex на контейнере выстраивает детей в ряд. flex-col меняет направление на столбец:

<div class="flex">...в ряд...</div>
<div class="flex flex-col">...в столбец...</div>

justify — вдоль главной оси

justify-* распределяет детей вдоль главной оси (по горизонтали при обычном flex):

КлассЭффект
justify-startприжать к началу
justify-centerпо центру
justify-betweenпо краям, зазор поровну между ними
justify-endприжать к концу

justify-between — рабочая лошадка шапки сайта: логотип слева, меню справа.

<header class="flex justify-between">
  <div>Логотип</div>
  <nav>Меню</nav>
</header>

Логотип уйдёт к левому краю, меню — к правому, а пространство между ними распределится автоматически.

items — поперёк оси

items-* выравнивает детей по поперечной оси (по вертикали при горизонтальном ряду). Самый частый — items-center, центрирующий по вертикали:

<div class="flex items-center">
  <img class="w-8 h-8 rounded-full" src="a.jpg" alt="">
  <span>Имя пользователя</span>
</div>

Аватар и имя выровняются по центру по высоте — не «съедут» друг относительно друга.

Идеальное центрирование

Связка flex items-center justify-center ставит содержимое ровно в центр блока — и по горизонтали, и по вертикали:

<div class="flex items-center justify-center h-32">
  По центру
</div>

Текст окажется точно в середине блока высотой 128px.

gap — зазоры между детьми

gap-* задаёт расстояние между flex-детьми — чище, чем margin на каждом:

<div class="flex gap-4">
  <button>Один</button>
  <button>Два</button>
</div>

Между кнопками появится зазор 16px.

flex-1 — растянуть на свободное место

flex-1 заставляет ребёнка занять всё доступное пространство. Удобно, когда нужно, чтобы один блок «растягивался», а соседи занимали лишь свою ширину:

<div class="flex gap-2">
  <input class="flex-1 border rounded px-2">
  <button>Найти</button>
</div>

Поле ввода растянется на всю свободную ширину, а кнопка останется компактной.

Итог

  • flex строит ряд, flex-col — столбец.
  • justify-* — вдоль главной оси, items-* — поперёк; items-center justify-center центрирует идеально.
  • gap-* — зазоры между детьми, flex-1 — растянуть ребёнка на свободное место.
Проверьте себя
1. Какой класс расставит логотип и меню по краям шапки с зазором между ними?
Ajustify-center
Bjustify-between
Citems-center
Dflex-col
2. Что центрирует содержимое блока сразу по обеим осям?
Aflex justify-start
Bflex items-center justify-center
Cblock text-center
Dflex-col gap-4
3. Что делает flex-1 у дочернего элемента?
AСкрывает его
BЗаставляет занять всё доступное свободное пространство
CДелает его шириной ровно 1px
DЦентрирует его текст
Поддержать проект