grid-gap и области (areas)

grid-gap (современное имя — gap) задаёт отступы между ячейками Grid, а grid-template-areas позволяет создать именованную карту областей сетки для декларативного размещения элементов.

Зачем нужно

gap убирает необходимость добавлять margin к каждому grid-элементу — отступы задаются один раз на контейнере и не добавляются к внешним краям. grid-template-areas в сочетании с grid-area превращает CSS-сетку в визуальную схему страницы: хедер, сайдбар, контент, футер — сразу видно из кода.

Где используется

  • Отступы между карточками в сетке (gap)
  • Страничная раскладка с именованными областями
  • Адаптивное переключение макета через медиазапросы

gap (grid-gap)

grid-gap — устаревшее имя; используйте gap (работает и в Flexbox).

.grid {
  display: grid;
  gap: 16px;           /* одинаковые отступы по строкам и колонкам */
  gap: 16px 24px;      /* row-gap column-gap */
  row-gap: 16px;       /* только между строками */
  column-gap: 24px;    /* только между колонками */
}
/* Пример: карточная сетка */
.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
<div class="cards">
  <div class="card">1</div>
  <div class="card">2</div>
  <div class="card">3</div>
</div>

grid-template-areas

.page {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: auto 1fr auto;
  gap: 16px;
  grid-template-areas:
    "header  header"
    "sidebar content"
    "footer  footer";
}

Точка (.) обозначает пустую ячейку:

.page {
  grid-template-areas:
    "header header"
    ". content"      /* левая ячейка пуста */
    "footer footer";
}

Размещение элементов

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer  { grid-area: footer; }
<div class="page">
  <header class="header">Шапка</header>
  <aside class="sidebar">Меню</aside>
  <main class="content">Контент</main>
  <footer class="footer">Подвал</footer>
</div>

Адаптивный макет

.page {
  display: grid;
  gap: 16px;
  grid-template-areas:
    "header"
    "content"
    "sidebar"
    "footer";
}

@media (min-width: 768px) {
  .page {
    grid-template-columns: 240px 1fr;
    grid-template-areas:
      "header  header"
      "sidebar content"
      "footer  footer";
  }
}

Частые ошибки

  1. grid-gap вместо gapgrid-gap работает, но является устаревшим алиасом; предпочтительно использовать gap
  2. Прямоугольность областей — каждая именованная область в grid-template-areas должна быть прямоугольной; Г-образные фигуры недопустимы
  3. Имена с пробелами"main content" в grid-template-areas означает две колонки, а не одну с пробелом в имени

Связанные темы

Ресурсы