CSS

Flexbox — основы

display: flex, flex-direction, flex-wrap, gap и основы одномерной раскладки.

Средний (Intermediate)
Нужно знать:Позиционирование

Кратко

Flexbox — одномерная (1D) раскладка: элементы выстраиваются в строку или колонку. display: flex создаёт flex-контейнер. flex-direction задаёт ось (row/column). flex-wrap разрешает перенос. gap задаёт расстояние между элементами. Flexbox — замена float для раскладки.


Подробно

Flexbox — раскладка в ОДНОМ измерении (строка ИЛИ колонка, не обе сразу).

display: flex — создаёт flex-контейнер:

  • Все прямые дети становятся flex- items
  • Элементы выстраиваются вдоль главной оси (main axis)

flex-direction:

  • row (по умолчанию) — слева направо
  • row-reverse — справа налево
  • column — сверху вниз
  • column-reverse — снизу вверх

flex-wrap:

  • nowrap (по умолчанию) — всё в одну строку
  • wrap — перенос на новую строку
  • wrap-reverse — перенос вверх

gap:

  • Задаёт расстояние между элементами
  • gap: 1rem; — одинаковый отступ
  • gap: 1rem 2rem; — вертикаль/горизонталь
  • Заменяет margin для расстояния между flex-items

Flex-контейнер vs Flex-item:

  • Контейнер: display: flex, flex-direction, flex-wrap
  • Items: flex-grow, flex-shrink, flex-basis, flex, align-self

Ментальная модель

Flexbox — как конвейер на заводе. flex-direction — направление конвейера (горизонтально/вертикально). flex-wrap — можно ли класть вещи на второй ряд. gap — расстояние между коробками на конвейере.


Примеры

**Самый простой:**

css
.container {
  display: flex;
  gap: 1rem;
}

.item {
  flex: 1; /* Равномерно делят пространство */
}

Минимальный flex: контейнер + gap + flex: 1.

**Простой:**

css
/* Горизонтальное меню */
nav {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: center;
}

/* Карточки */
.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}

.card {
  flex: 1 1 300px; /* grow shrink basis */
}

/* Колонки */
.layout {
  display: flex;
  gap: 2rem;
}

.sidebar { flex: 0 0 250px; }
.main    { flex: 1; }

/* Центрирование */
.center {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Практические flex-паттерны: меню, карточки, layout, центрирование.

**Реальный пример:**

css
/* Полноценный layout */
.page {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 2rem;
}

.content {
  display: flex;
  flex: 1;
  gap: 2rem;
  padding: 2rem;
}

.sidebar {
  flex: 0 0 250px;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.main {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

.footer {
  display: flex;
  justify-content: center;
  padding: 1rem;
  border-top: 1px solid #e5e7eb;
}

Полный flex-layout: header, sidebar, main, footer.


Частые ошибки

**Неправильно:** Использовать flexbox для двумерной раскладки

**Почему:** Flexbox — ОДНОМЕРНЫЙ (1D): строка ИЛИ колонка. Для двух осей — CSS Grid.

**Правильно:** 1D (строка/колонка) → Flexbox. 2D (строки + колонки) → Grid.

**Неправильно:** Не использовать gap

**Почему:** Margin для расстояния между flex-items создаёт проблемы с отступами у крайних элементов.

**Правильно:** gap — безопасная альтернатива margin для flex/grid.

**Неправильно:** Забывать flex-wrap

**Почему:** Без wrap элементы сжимаются до min-content, что ломает макет.

**Правильно:** Для адаптивных сеток: flex-wrap: wrap + flex-basis.


Важно запомнить

  • Flexbox — ОДНОМЕРНАЯ раскладка (1D)
  • flex-direction: row | column — направление оси
  • gap — расстояние между элементами (лучше margin)
  • flex-wrap: wrap — перенос на новые строки
  • display: flex на контейнере, align-items/justify-content — центрирование

Связь

Назад: Вы знаете позиционирование (C12) — flexbox даёт современную раскладку без float.

Вперёд: В следующем уроке (C14) вы изучите выравнивание во flex: justify-content, align-items, align-self.


Читайте дальше

Материалы курса CSS — PROlab Academy.