CSS Flexbox шпаргалка українською
Все, що потрібно знати про Flexbox — на одній сторінці. Тримай під рукою як довідник, коли треба швидко згадати, як працює justify-content чи flex-grow.
Якщо вивчаєш Flexbox з нуля — почни з уроку Flexbox частина 1, де ми пояснюємо концепцію осей і базові вирівнювання, а потім переходь до Flexbox частина 2. Якщо тобі потрібна друга мірка — паралельні рядки і колонки, — подивись Grid шпаргалку.
Коли використовувати Flexbox?
| Сценарій | Чому Flexbox |
|---|---|
| Горизонтальна навігація | одновимірне розташування |
| Кнопки в ряд | вирівнювання + gap |
| Центрування одного елемента | три рядки коду |
| Sticky footer | без хаків і JavaScript |
| Карткова галерея в один рядок | flex-wrap і flex-grow |
Просте правило: один напрямок (рядок або колонка) — це Flexbox. Якщо потрібні і рядки, і колонки одночасно — це вже Grid.
Властивості контейнера
.container {
display: flex; /* або inline-flex */
}
| Властивість | Значення | Опис |
|---|---|---|
flex-direction | row | row-reverse | column | column-reverse | Напрямок головної осі |
flex-wrap | nowrap | wrap | wrap-reverse | Перенос елементів на новий рядок |
flex-flow | row wrap | Скорочення для direction + wrap |
gap | 10px | 1rem 2rem | Відстань між елементами |
justify-content | див. нижче | Вирівнювання по головній осі |
align-items | див. нижче | Вирівнювання по поперечній осі |
align-content | flex-start | center | space-between | Вирівнювання рядків (коли є wrap) |
justify-content — вирівнювання по головній осі
justify-content — всі значення
| Значення | Що робить |
|---|---|
flex-start | Притискає до початку (за замовчуванням) |
flex-end | Притискає до кінця |
center | Центрує |
space-between | Розподіляє рівномірно, без відступів по краях |
space-around | Розподіляє з рівними відступами навколо кожного |
space-evenly | Розподіляє з рівними відступами між усіма (включно з краями) |
align-items — вирівнювання по поперечній осі
align-items — всі значення
| Значення | Що робить |
|---|---|
stretch | Розтягує на всю висоту контейнера (за замовчуванням) |
flex-start | Притискає до верху (або лівого краю при column) |
flex-end | Притискає до низу |
center | Центрує по вертикалі |
baseline | Вирівнює по базовій лінії тексту |
Властивості елементів
| Властивість | За замовч. | Опис |
|---|---|---|
order | 0 | Порядок відображення (можна змінити без перестановки в HTML) |
flex-grow | 0 | Здатність розширюватись |
flex-shrink | 1 | Здатність стискатись |
flex-basis | auto | Початковий розмір до grow/shrink |
flex | 0 1 auto | Скорочення: grow shrink basis |
align-self | auto | Вирівнювання окремого елемента (перебиває align-items) |
flex-grow — як елементи розширюються
flex-grow — візуалізація
flex-grow: 1 означає «забери увесь вільний простір». Якщо у двох елементів flex-grow: 1, вони ділять простір порівну. Якщо в одного flex-grow: 2, а в другого flex-grow: 1 — перший забере вдвічі більше зайвого простору.
flex-shrink — як елементи стискаються
flex-shrink — візуалізація
За замовчуванням всі елементи можуть стискатися (flex-shrink: 1). Поставиш flex-shrink: 0 — елемент збереже свій розмір, навіть якщо контейнер занадто малий. Корисно для іконок і логотипів.
Типові значення flex
| Значення | Розшифрування | Коли використовувати |
|---|---|---|
flex: 1 | 1 1 0% | Елемент займає весь вільний простір |
flex: auto | 1 1 auto | Росте і стискається від розміру вмісту |
flex: none | 0 0 auto | Фіксований розмір, не змінюється (для іконок) |
flex: 0 1 300px | — | Базис 300px, стискається, не росте |
Готові рецепти
Центрування одного елемента
.center {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
Найвідоміший трюк CSS — три рядки замість 10 років болю з position: absolute.
Sticky footer
body {
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
main забере всю вільну висоту, footer завжди притиснеться до низу — навіть на сторінках з малим контентом.
Рівні колонки
.columns {
display: flex;
gap: 1rem;
}
.columns > * {
flex: 1;
}
Скільки б елементів не було — поділять простір порівну.
Адаптивна навігація з логотипом і пунктами
.nav {
display: flex;
align-items: center;
justify-content: space-between;
gap: 2rem;
}
.nav-links {
display: flex;
gap: 1.5rem;
}
Логотип ліворуч, пункти меню праворуч — класичний паттерн без жодного хака.
Картки, які переносяться (з мінімальною шириною)
.cards {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.card {
flex: 1 1 280px;
}
Кожна картка хоче бути 280px, але якщо є місце — росте. Якщо ні — переноситься на новий рядок.
Прижати один елемент до краю
.toolbar {
display: flex;
gap: 1rem;
}
.spacer {
margin-left: auto;
}
Класика: всі кнопки ліворуч, але одна (наприклад, «Logout») — праворуч. margin-left: auto поглинає весь вільний простір зліва.
Часті помилки
- Вертикальне центрування не працює? Перевір, що
align-items: centerстоїть на контейнері зdisplay: flex, а у контейнера є висота (min-height: 100vhдля повного екрана). - Елементи не переносяться на новий рядок? За замовчуванням
flex-wrap: nowrap— додайflex-wrap: wrap. - Картинка стиснулась? За замовчуванням
flex-shrink: 1. Поставflex-shrink: 0на елементи, які мають зберігати розмір. justify-content: centerне центрує по вертикалі? Боjustify-content— це головна вісь. Приflex-direction: rowголовна вісь — горизонтальна. Для вертикалі при row потрібенalign-items: center.gapне працює? Браузер занадто старий. Підтримка з 2021 року, але якщо потрібно для legacy — використовуйmargin.
- A Complete Guide to Flexbox — найпопулярніший довідник від CSS-Tricks
- Flexbox Froggy — інтерактивна гра з 24 рівнями (є українська)
- Flexbox Defense — tower defense, де вежі ставляться через Flexbox
- Кевін Пауелл — Flexbox Crash Course — найкращий відео-курс по Flexbox
- Дізнайся більше про Grid — другий головний інструмент верстки