Секрети адаптивних макетів: CSS Grid і Flexbox разом
15.03.2026Вступ: чому поєднувати Grid і Flexbox
CSS Grid і Flexbox — це два потужні інструменти для створення макетів. Кожен із них має свої сильні сторони: Grid відмінно підходить для двовимірних макетів (рядки й колонки), а Flexbox — для розміщення елементів уздовж однієї осі з тонким вирівнюванням. Поєднання обох дозволяє будувати складні й при цьому зрозумілі рішення, де Grid відповідає за загальну структуру, а Flexbox — за поведінку компонентів усередині клітинок.
Коли використовувати Grid, а коли Flexbox
- Grid: коли треба розмістити елементи в обох вимірах — контролювати ряди й колонки, створювати шаблони з областями (grid-template-areas), робити складні сетки з різною шириною/висотою колонок/рядків.
- Flexbox: коли ви працюєте з одноосною розкладкою — горизонтальне або вертикальне вирівнювання елементів, розподіл простору між сусідніми елементами, адаптивні списки або панелі дій.
- Разом: Grid для загальної сетки сторінки (header, sidebar, main, footer), Flexbox для компонентів у кожній секції (навігація, картки, кнопки тощо).
Типовий шаблон: Grid + Flexbox
Ось базова структура HTML і CSS, яка ілюструє поєднання:
<div class='page'>
<header>...</header>
<main>
<aside class='sidebar'>...</aside>
<section class='content'>
<div class='card-row'>...</div>
</section>
</main>
<footer>...</footer>
</div>
.page {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-rows: auto 1fr auto;
gap: 20px;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
}
header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
footer { grid-area: footer; }
/* Усередині контенту використовуємо Flexbox */
.card-row {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.card {
flex: 1 1 240px; /* ключова частина: мінімум 240px, потім рости */
}
Така комбінація дає вам контроль над глобальним розкладом через Grid та адаптивну поведінку компонентів через Flexbox.
Поради для адаптивності
- Використовуйте властивості
minmax(),auto-fitіauto-fillв Grid для автоматичного створення колонок під різні ширини екрану. - В Flexbox застосовуйте скорочену нотацію
flex: 1 1 200px, щоб елемент мав мінімальну ширину, але займав доступний простір. - Комбінуйте Grid-шаблони для великих екранів і перемикайтеся на колонну розкладку у media queries для мобільних пристроїв.
- Використовуйте
gapяк для Grid, так і для Flexbox — це сучасний і чистий спосіб задати відступи без додаткових маргінів.
Типові шаблони комбінування
- Каркас сторінки: Grid для header/main/footer + sidebar.
- Секція з товарами: Grid для розмітки контейнера, Flexbox для самої картки товару (картинка, заголовок, кнопки).
- Навігація: Flexbox для горизонтального меню всередині Grid-області навігації.
Корисні трюки
- Вирівнювання контенту: використовувати
align-itemsіjustify-contentу Flexbox; у Grid додатиalign-self/justify-selfдля контролю позиціонування окремих клітинок. - Порядок елементів: Flexbox дозволяє змінювати порядок візуально через
order, не змінюючи HTML. У Grid також єorder, але краще використовувати grid-areas для читабельності шаблону. - Fallback: для старих браузерів можна задавати просту flex-структуру, а складний Grid робити як progressive enhancement.
Підсумок
Поєднання CSS Grid і Flexbox — це не конкуренція, а співпраця. Grid формує каркас сторінки, допомагає контролювати двовимірну структуру, а Flexbox забезпечує гнучкість всередині компонентів. Почніть з планування макету: визначте, які частини потребують двовимірного контролю, а які — одноосьової адаптивності. Тоді вибирайте інструмент під завдання, не боючись їх комбінувати. Це прискорить роботу, зробить код зрозумілим і поліпшить адаптивність інтерфейсу.