Коротка відповідь
middleCSS Grid — це система розмітки, що дозволяє створювати двовимірні сітки з рядками і стовпцями. Вона працює за допомогою властивостей `display:grid`, `grid-template-columns` і `grid-template-rows`. Приклад: `display:grid; grid-template-columns: repeat(3, 1fr);` визначає три рівні стовпці.
Повне пояснення
Що це і навіщо CSS Grid — сучасний інструмент для побудови складних макетів без використання флоатів чи позиціонування. Він дозволяє розміщувати елементи у двох вимірах, що спрощує адаптивний дизайн.
Ключові принципи, терміни, інваріанти
grid container– елемент зdisplay:grid.grid items– прямі діти контейнера.grid-template-columns / rows– визначають розміри стовпців і рядків.grid-area– назва області, яку можна використовувати вgrid-template-areas.gap– простір між клітинками.
Як це працює (життєвий цикл, алгоритм)
- Браузер створює grid‑контейнер і розраховує розміри колонок/рядків.
- Кожен grid‑item отримує позицію за допомогою
grid-column-start,grid-row-endтощо. - Після розрахунку відбувається рендеринг, де браузер заповнює клітинки.
Практика і реалізація (React/TypeScript приклади)
const Grid = () => (
<div style={{display:'grid', gridTemplateColumns:'1fr 2fr', gap:'10px'}}>
<div>Item A</div>
<div>Item B</div>
</div>
);
Тестування (Jest, Testing Library)
- Перевірити, що елементи мають правильні
grid-column/grid-rowзначення черезgetComputedStyle. - Використовувати
@testing-library/reactдля рендерингу і перевірки позицій.
Оптимізація продуктивності
- Уникайте надмірної глибини вкладених grid‑контейнерів.
- Використовуйте
minmax()іauto-fill/auto-fitдля адаптивності без додаткових медіа‑запитів.
Accessibility
- Grid не впливає на семантику; використовуйте
<section>,<article>тощо. - Переконайтесь, що порядок DOM відповідає логічному порядку читання.
Безпека та валідація
- CSS Grid не створює XSS‑ризиків, але слід уникати ін’єкцій через
styleатрибути.
Типові помилки й edge cases
- Неправильне використання
grid-template-areasпризводить до «порожніх» клітинок. - Відсутність
gapу старих браузерах (IE11) потребує полів.
Cheatsheet + можливі follow-up питання
grid-auto-flow: dense→ заповнює порожні клітинки.fr– фракційна одиниця, що розподіляє доступний простір.- Follow‑up: Як працюють
minmax()іauto-fillу контексті адаптивного дизайну?