grid-area: сокращённое свойство

grid-area — свойство grid-элемента, которое либо задаёт ему имя для использования в grid-template-areas, либо является shorthand для grid-row-start, grid-column-start, grid-row-end, grid-column-end.

Зачем нужно

grid-area — самый удобный способ размещения элементов в именованных областях Grid. Вместо записи четырёх координат (grid-row: 1 / 3; grid-column: 1 / 2) достаточно одного слова-имени. Это делает разметку страницы декларативной и читаемой.

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

  • Именованное размещение в grid-template-areas (хедер, сайдбар, контент, футер)
  • Компактная замена grid-row + grid-column
  • Адаптивная смена положения элементов через медиазапросы

Два режима использования

1. Именованная область (совместно с grid-template-areas)

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

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

2. Shorthand для координат линий

/* grid-area: row-start / col-start / row-end / col-end */
.item {
  grid-area: 1 / 1 / 3 / 3;
  /* эквивалент: */
  /* grid-row: 1 / 3;    */
  /* grid-column: 1 / 3; */
}
/* Использование span */
.item {
  grid-area: 2 / 1 / span 2 / span 3;
  /* Начинается с row 2, col 1; занимает 2 строки и 3 колонки */
}

Адаптивное переключение макета

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

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

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer  { grid-area: footer; }

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

  1. Имя в grid-area без соответствующего grid-template-areas — элемент не будет размещён в области; имена должны точно совпадать
  2. Пробелы в именах областей — имена не могут содержать пробелы: main content — неверно, main-content — верно
  3. Путаница с порядком значений shorthand — порядок: row-start / col-start / row-end / col-end, а не col / row

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

Ресурсы