Адаптивні сітки: поєднання CSS Grid і Flexbox
03.04.2026Вступ: чому поєднувати Grid і Flexbox
CSS Grid та Flexbox доповнюють одне одного: Grid добре підходить для двовимірних макетів (рядки і стовпці), тоді як Flexbox — для компонування елементів у одному вимірі та для вирівнювання всередині контейнера. Поєднання цих підходів дозволяє створювати адаптивні та семантично зрозумілі шаблони без складних хаців із позиціонуванням.
Коли використовувати Grid, а коли Flexbox
- Grid — для загальної сітки сторінки: хедер, сайдбар, основний контент, футер, карточки у двовимірній сітці.
- Flexbox — для внутрішніх компонентів: навігації, карток з кнопками, списків елементів в один ряд чи стовпець, вирівнювання по центру.
- Комбінуйте: використовуєте Grid для зовнішньої структури, а всередині клітинок — Flexbox для розташування елементів.
Покроковий приклад: адаптивна сторінка з картками
1. Базова сітка сторінки
Створимо трьохколонну сітку на великих екранах, двоколонну на планшетах і одноколонну на мобайлі:
.page { display: grid; grid-template-columns: 1fr 3fr 1fr; gap: 24px; }
@media (max-width: 900px) { .page { grid-template-columns: 1fr 2fr; } }
@media (max-width: 600px) { .page { grid-template-columns: 1fr; } }
2. Контентна область з Grid для карток
Внутрішнє поле з картками теж робимо на Grid: автоматичні стовпці допоможуть адаптуватися під ширину:
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; }
3. Вирівнювання елементів у картці за допомогою Flexbox
Всередині кожної картки зручніше використовувати Flexbox для вертикального вирівнювання та розміщення кнопок:
.card { display: flex; flex-direction: column; padding: 16px; border-radius: 8px; background: #fff; }
.card .meta { display: flex; justify-content: space-between; align-items: center; }
.card .actions { margin-top: auto; display: flex; gap: 8px; }
Корисні техніки і трюки
- gap працює для Grid і Flexbox — використовуйте його замість margin для відстаней між елементами.
- auto-fill / auto-fit з minmax дозволяє елементам «заповнювати» рядок без медіа-запитів.
- minmax(0, 1fr) інколи потрібен, щоб уникнути переповнення в колонках Grid.
- order у Flexbox корисний для зміни порядку вмісту на різних брейкпойнтах без зміни HTML.
- align-self і justify-self (Grid) дають більший контроль над вирівнюванням окремих елементів.
Приклади проблем і як їх вирішити
Проблема: картки різної висоти
Якщо картки мають різну висоту, використовуйте Flexbox у контейнері картки з margin-top: auto для кнопок — це дозволить «приклеїти» дії до низу картки і вирівняти їх візуально.
Проблема: горизонтальний скрол на маленьких екранах
Перевірте мінімальні ширини елементів (min-width) і використовуйте minmax у Grid. Також можна додати overflow-wrap: break-word для довгих текстів.
Практичні поради та кращі практики
- Плануйте макет семантично: секції й статті у HTML, а Grid/Flex виключно для візуального розміщення.
- Починайте з мобільного (mobile-first): задавайте стилі для мобайлу, а потім додавайте брейкпойнти.
- Тестуйте на різних розмірах: інструменти розробника емулюють екрани, але ніщо не замінить реальні пристрої.
- Спрощуйте: не намагайтесь зробити все через Grid — іноді простий Flexbox дає кращу віддачу.
- Доступність: перевіряйте порядок табуляції та семантичну структуру — візуальний порядок не повинен порушувати логіку документу.
Висновок
Комбінування CSS Grid і Flexbox дає гнучкість для сучасних адаптивних інтерфейсів. Використовуйте Grid для загальної структури і розміщення у двох вимірах, а Flexbox — для вирівнювання і компонування в межах блоків. Тестуйте, спрощуйте і дотримуйтесь семантики — і ваш макет буде стабільним, доступним і легко підтримуватиметься.