Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать раскладку страницы на grid

Короткий ответ

Назовите области в grid-template-areas и разложите по ним элементы через grid-area:

<style>
  .page { display: grid; gap: 6px; grid-template-columns: 90px 1fr 90px; grid-template-rows: auto 1fr auto; min-height: 220px;
    grid-template-areas: "head head head" "nav main ads" "foot foot foot"; }
  .page > * { padding: 8px; background: lavender; }
  header { grid-area: head; } nav { grid-area: nav; } main { grid-area: main; background: whitesmoke; }
  aside { grid-area: ads; } footer { grid-area: foot; }
</style>
 
<div class="page">
  <header>Header</header><nav>Menu</nav><main>Content</main><aside>Ads</aside><footer>Footer</footer>
</div>

Каждая строка в кавычках — ряд сетки, каждое слово — ячейка. Повтор имени растягивает область на несколько ячеек.

На телефоне

Главное удобство областей — раскладку меняют, не трогая HTML. Для узкого экрана достаточно переписать карту в одну колонку:

@media (max-width: 600px) {
  .page {
    grid-template-columns: 1fr;
    grid-template-areas: "head" "nav" "main" "ads" "foot";
  }
}

Частая ошибка

Карта должна быть прямоугольной: в каждой строке одинаковое число ячеек, а область — сплошной прямоугольник. Если написать, например, "head head" "nav main ads", браузер посчитает всё правило ошибочным и молча его проигнорирует. Пустую ячейку обозначают точкой.

Функции из этого ответа

  • grid-template-areas — Рисует раскладку сетки картой именованных областей.
  • grid-area — Помещает элемент сетки в именованную область или между заданными линиями.
  • grid-template-columns — Количество и ширина колонок сетки.
  • grid-template-rows — Количество и высота рядов сетки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.