CSS Grid Layout — это мощнейшая система компоновки, которая навсегда изменила подход к созданию веб-интерфейсов. В отличие от Flexbox, работающего в одном измерении, Grid позволяет строить сложные, отзывчивые двумерные сетки, где вы полностью контролируете и строки, и столбцы одновременно. Это не просто инструмент, а целая философия построения макетов, которая избавляет от хака с float и бесконечных оберток.
Что такое CSS Grid и почему он незаменим?
Представьте себе настоящую сетку-конструктор, где вы можете точно размещать элементы в ячейках, растягивать их на несколько областей, управлять выравниванием и промежутками. Grid превращает контейнер в холст с координатами. Основная магия происходит в родительском контейнере, которому вы задаете display: grid;. Дочерние элементы автоматически становятся элементами этой сетки.
Ключевое отличие от Flexbox: Flexbox — это система для компоновки в одном направлении (строка или колонка). Grid — это система для работы с двумя осями сразу, идеальная для сложных макетов всего сайта, карточек товаров, галерей и панелей инструментов.
Основные концепции и свойства Grid
Определение сетки: grid-template-columns и grid-template-rows
Эти свойства определяют структуру вашей сетки. Вы можете задавать размеры в пикселях, процентах, fr (доля свободного пространства) и даже с помощью функции repeat().
.container {
display: grid;
grid-template-columns: 200px 1fr 1fr; /* Первая колонка 200px, остальные две делят оставшееся место */
grid-template-rows: 100px auto 150px;
gap: 20px; /* Расстояние между элементами сетки */
}
Размещение элементов: grid-column и grid-row
Это сердце Grid. Вы можете разместить элемент в конкретных линиях сетки. Линии нумеруются с 1.
.header {
grid-column: 1 / 4; /* Элемент растягивается от первой до четвертой вертикальной линии (занимает все три колонки) */
grid-row: 1;
}
.sidebar {
grid-column: 1;
grid-row: 2 / 4; /* Занимает вторую и третью строку */
}
Практические примеры сеток
Пример 1: Классический макет сайта
Создадим простой макет: Шапка, Сайдбар, Основной контент, Футер.
.layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar content content"
"footer footer footer";
grid-template-columns: 250px 1fr 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
gap: 15px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
Использование grid-template-areas делает код визуальным и невероятно понятным. Вы буквально рисуете макет текстом!
Пример 2: Адаптивная галерея изображений (Pinterest-стиль)
Создадим сетку с автоматическим заполнением, где колонки подстраиваются под ширину контейнера.
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
align-items: start; /* Важно для элементов разной высоты */
}
/* Каждая карточка галереи будет занимать одну ячейку, а сетка сама создаст новые колонки при увеличении ширины экрана. */
Пример 3: Сложная панель управления (dashboard)
Используем комбинацию размещения по линиям и именованных областей для несимметричного макета.
.dashboard {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: repeat(4, 100px);
gap: 10px;
}
.widget-1 {
grid-column: 1;
grid-row: 1 / span 2; /* Занимает две строки, начиная с первой */
}
.widget-2 {
grid-column: 2 / 4; /* Занимает колонки 2 и 3 */
grid-row: 1;
}
Лучшие практики и советы
- Начинайте с мобильной версии. Используйте медиа-запросы для переопределения
grid-template-columnsна больших экранах. - Используйте единицу
frдля гибкого распределения свободного пространства. Это основная сила Grid. - Свойство
gap(ранее grid-gap) — ваш лучший друг. Оно задает отступы между элементами сетки и заменяет собой margin-хаки. - Для выравнивания содержимого внутри всей сетки используйте
justify-contentиalign-content. Для выравнивания отдельного элемента —justify-selfиalign-self.
FAQ: Часто задаваемые вопросы о CSS Grid
Поддерживается ли Grid во всех браузерах?
Да, CSS Grid Layout полностью поддерживается во всех современных браузерах (Chrome, Firefox, Safari, Edge) с 2017 года. Для очень старых браузеров можно использовать фолбэк-стили или подход progressive enhancement.
Что лучше использовать: Grid или Flexbox?
Не «или», а «и». Они отлично дополняют друг друга. Используйте Grid для общего макета страницы (двумерная компоновка), а Flexbox — для выравнивания и распределения элементов внутри отдельных блоков Grid (одномерная компоновка). Например, сетка для карточек товаров (Grid) и навигация внутри шапки (Flexbox).
Сложно ли выучить CSS Grid?
Базовые принципы осваиваются за несколько часов. Сложность заключается не в синтаксисе, а в изменении мышления. Как только вы начнете мыслить в терминах строк, колонок и областей, вы обнаружите, что создавать сложные адаптивные макеты стало в разы проще.
Можно ли создавать асимметричные сетки?
Конечно! Это одна из сильнейших сторон Grid. Вы можете задавать любые размеры колонкам и строкам, а элементы могут занимать произвольное количество ячеек, создавая уникальные, «рваные» макеты, которые раньше были невероятно сложны в реализации.