
CSS Grid Layout: полное руководство с примерами
ДБ
Дмитрий Борисенко
CSS Grid Layout — это мощная двумерная система вёрстки, которая совершила революцию в том, как мы создаём макеты для веба. В отличие от Flexbox, который в основном одномерный, Grid позволяет работать одновременно и со строками, и с колонками.
Базовый grid-контейнер
Чтобы создать grid-контейнер, достаточно применить к элементу display: grid:
Так мы получаем сетку из трёх равных колонок и двух строк с заданной высотой.
Grid Template Areas
Одна из самых наглядных возможностей CSS Grid — именованные области (template areas):
Построить сетку мышью и сразу получить код — быстрее, чем подбирать значения вслепую.
CSS Grid генератор
Визуальный генератор CSS Grid: постройте адаптивную сетку без кода и скопируйте результат в CSS или Tailwind.
Попробовать
Адаптивная сетка с auto-fit и minmax
Создавайте адаптивные сетки без медиазапросов:
Это создаёт адаптивную галерею, в которой элементы автоматически переносятся на новые строки по мере необходимости.
auto-fit или auto-fill — что выбрать
Разница проявляется ровно в одном случае: когда элементов меньше, чем помещается колонок. Во всех остальных ситуациях они ведут себя одинаково, поэтому подмену легко не заметить — до того дня, когда в галерее останется две карточки.
auto-fillсохраняет пустые колонки. Две карточки в сетке на четыре колонки останутся узкими и прижмутся влево — оставшиеся две колонки просто пустуют.auto-fitсхлопывает пустые колонки до нуля. Те же две карточки растянутся и займут всю ширину.
Практическое правило: для галерей и карточек берите auto-fit — растянуться
обычно лучше, чем оставить дыру. auto-fill пригодится, когда ширина элемента
принципиальна и растягивать его нельзя.
И ещё одна ловушка: minmax(250px, 1fr) вылезет за узкий экран, если контейнер
уже 250px. Страховка — min():
Продвинутое размещение элементов
Управляйте расположением элементов с точностью до дорожки:
Здесь нужно сразу поймать одну вещь, на которой спотыкаются все: числа в
grid-column — это номера линий, а не колонок. Линии — это границы между
дорожками, и в сетке из трёх колонок их четыре.
Поэтому grid-column: 1 / 3 занимает две колонки (от линии 1 до линии 3), а
не три.
Неявная и явная сетка
CSS Grid автоматически создаёт дорожки, когда это необходимо:
Практический пример: макет дашборда
Вот полноценный макет дашборда на CSS Grid:
Почему .card.wide ломает эту раскладку
В коде выше есть мина, которая срабатывает не на мобильном, а на планшете — где-то между 769px и 1050px. Разберём, потому что ошибка типовая.
Колонки nav и sidebar съедают 450px фиксированной ширины. На экране 800px
центральной колонке остаётся около 300px, и в auto-fit, minmax(200px, 1fr)
помещается одна колонка. А карточка .wide требует grid-column: span 2 —
двух колонок, которых нет. Grid покорно создаёт неявную вторую колонку, и
дашборд уезжает за край экрана.
Медиазапрос на 768px не спасает: поломка живёт выше его порога.
Правильное лечение — не медиазапрос по ширине окна, а контейнерный запрос: растягивать карточку надо тогда, когда места хватает у самого контейнера, а не у экрана.
Общее правило: span N всегда рискует создать неявную колонку. Если не
уверены, что колонок хватит, значением по умолчанию делайте span 1, а
растягивание включайте отдельно.
Выравнивание в сетке
Управляйте выравниванием как всей сетки, так и отдельных элементов:
Subgrid
Subgrid работает во всех основных браузерах с 2023 года — это Baseline, и относиться к нему как к экзотике больше не нужно.
Он решает конкретную боль: у вложенных карточек не выравниваются внутренности. Заголовки съезжают, потому что каждая карточка сама себе сетка и ничего не знает о соседях. Subgrid заставляет дочернюю сетку жить по дорожкам родителя:
Теперь заголовки всех карточек стоят на одной линии, тексты — на одной, кнопки прибиты к низу. Раньше ради этого приходилось задавать фиксированные высоты.
Важная деталь: subgrid наследует дорожки родителя, но gap можно
переопределить — дочерняя сетка не обязана повторять отступы родительской.
Лучшие практики
- Используйте Grid для двумерных макетов: когда нужно управлять и строками, и колонками
- Комбинируйте с Flexbox: используйте Grid для общего макета, а Flexbox — для внутренней структуры компонентов
- Подход mobile-first: начинайте с простых макетов и усложняйте их для больших экранов
- Семантичный HTML: используйте правильные HTML-элементы независимо от размещения в сетке
- Запасные варианты: при необходимости предусматривайте fallback для старых браузеров
CSS Grid преобразил возможности вёрстки для веба, сделав сложные дизайны достижимыми с помощью чистого и поддерживаемого кода. Освойте его — и в вашем арсенале веб-разработчика появится по-настоящему мощный инструмент.



