Урок 29. Примеры: Flexbox vs Grid: сравнение

📁 Раздел: CSS Grid ⏱️ Время изучения: ~55 мин 🎯 Сложность: Средняя

⚡ Кратко

Под каждым кодом — живой результат. Смотри, как одна и та же задача решается Flexbox и Grid, и какой способ уместнее.

Рабочие примеры

В каждом примере сверху живой результат, ниже — код. Примеры идут от одномерных задач (Flexbox) к двумерным (Grid) и заканчиваются их совместным использованием.

1. Flexbox: навбар в один ряд (1D)

Классическая одномерная задача: логотип слева, пункты меню справа. Одна ось — Flexbox идеален.

Logo
ГлавнаяО насКонтакты
.navbar {
  display: flex;
  justify-content: space-between; /* раздвигаем по краям */
  align-items: center;
  gap: 1rem;
}

2. Flexbox: центрирование по одной оси

Расталкивание и центрирование вдоль линии — это про Flexbox. Меняй justify-content и смотри, как сдвигаются блоки.

justify-content: center

1
2
3

justify-content: space-between

1
2
3
.row {
  display: flex;
  justify-content: center;        /* или space-between */
  gap: .5rem;
}

3. Grid: галерея карточек (2D)

Несколько карточек ровными строками и колонками — двумерная задача. Grid выстраивает идеальную сетку.

1
2
3
4
5
6
.gallery {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3 колонки */
  gap: .75rem;                            /* строки появятся сами */
}

4. Одна задача — два способа

Ряд из трёх блоков можно собрать и на Flexbox, и на Grid. Для одной линии уместнее Flexbox; Grid здесь избыточен.

Flexbox (рекомендуется для одной линии)

A
B
C

Grid (тот же результат, но избыточно)

A
B
C
/* Одна линия → Flexbox */
.row { display: flex; gap: .5rem; }
.row > * { flex: 1; }

/* То же самое на Grid — работает, но это 2D-инструмент
   для 1D-задачи */
.row { display: grid; grid-template-columns: repeat(3, 1fr); gap: .5rem; }

5. Grid + Flexbox вместе

Самый частый реальный сценарий: Grid задаёт каркас страницы (сайдбар + контент), а Flexbox раскладывает содержимое внутри шапки.

LogoМеню
Контент страницы
/* Grid — каркас страницы (2D) */
.page {
  display: grid;
  grid-template-columns: 7rem 1fr;
  gap: .75rem;
}
.page > header { grid-column: 1 / -1; }

/* Flexbox — содержимое шапки (1D) */
.page > header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
Эксперимент: открой любой пример в DevTools (F12). Для Grid-блоков нажми бейдж grid рядом с элементом — браузер покажет overlay с линиями, треками и gap. Для Flexbox есть аналогичный бейдж flex.

Навигация