W3docs

CSS-свойство grid-template

Узнайте, как использовать сокращённое свойство CSS grid-template для определения строк, столбцов и именованных областей в одном объявлении.

CSS-свойство grid-template определяет строки, столбцы и именованные области CSS Grid в одном объявлении. Оно является сокращением для трёх развёрнутых свойств:

На этой странице объясняется синтаксис, как косая черта разделяет строки и столбцы, как работает форма с именованными областями, когда использовать grid-template вместо более широкого сокращения grid, а также приведены рабочие примеры, которые можно редактировать в реальном времени.

Как работает сокращение

grid-template применяется только к контейнеру сетки — элементу с display: grid (или inline-grid). Свойство имеет две основные формы.

Форма строки / столбцы

Укажите сначала размеры строк, затем косую черту (/), затем размеры столбцов:

.container {
  display: grid;
  grid-template: 100px 200px / 1fr 1fr 1fr; /* two rows / three columns */
}

Символ / обязателен при указании и строк, и столбцов — он сообщает браузеру, где начинается список столбцов. В качестве размеров можно использовать любые единицы трека:

ЕдиницаЗначение
px, %, emФиксированные или относительные размеры
frДоля оставшегося свободного пространства
autoРазмер по содержимому, затем распределяет оставшееся пространство
min-contentМинимальный размер, при котором не возникает переполнения
max-contentМаксимальный размер без переноса строки
minmax(min, max)Диапазон — например, minmax(100px, 1fr)
repeat(n, size)Повторить трек n раз — например, repeat(3, 1fr)

Единица fr уникальна для раскладки сетки. 1fr 2fr означает «одна часть и две части свободного пространства» — то есть второй трек в два раза шире первого.

Форма с именованными областями

Каждая строка в кавычках представляет одну строку сетки. Слова внутри строки задают имена ячеек в этой строке. Ячейки с одинаковым именем в разных строках объединяются в одну прямоугольную область. Точка (.) оставляет ячейку безымянной:

.container {
  display: grid;
  grid-template:
    "header header" 60px
    "nav    main"   1fr
    / 120px 1fr;
}

Размер строки (например, 60px, 1fr) указывается после строки в кавычках, перед следующей строкой. Необязательные размеры столбцов идут после финального /.

Затем элементы размещаются в именованных областях с помощью grid-area:

header { grid-area: header; }
nav    { grid-area: nav; }
main   { grid-area: main; }

Это наиболее читаемый способ описания классической разметки страницы в CSS.

Информация

grid-template не устанавливает отступ между треками. Используйте gap (или развёрнутое column-gap) для задания промежутков между треками. Отступы не связаны с размерами треков.

grid-template и grid

Более широкое сокращение grid также сбрасывает свойства неявной сетки — grid-auto-rows, grid-auto-columns и grid-auto-flow — до их начальных значений. grid-template не затрагивает эти свойства.

Когда что использовать:

  • Используйте grid-template, если хотите только определить явные треки и области, не влияя на поведение автоматического размещения.
  • Используйте grid, если хотите сбросить все свойства сетки одним объявлением.

Справочник по свойству

ХарактеристикаЗначение
Начальное значениеnone
Применяется кКонтейнерам сетки
НаследуетсяНет
АнимируемоДа — размеры треков анимируются
СпецификацияCSS Grid Layout Module Level 1

Синтаксис

grid-template: none
             | <grid-template-rows> / <grid-template-columns>
             | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?
             | initial | inherit | unset;

Значения

ЗначениеОписание
noneСбрасывает все три развёрнутых свойства (grid-template-rows, grid-template-columns, grid-template-areas) до начальных значений. Элементы размещаются алгоритмом автоматического размещения.
<rows> / <columns>Задаёт явные треки строк и столбцов. Допустима любая единица размера: px, %, fr, auto, minmax(), repeat() и т. д.
"area-names" <size>Задаёт именованные области строка за строкой. Каждая строка в кавычках — одна строка сетки; необязательный размер после неё — высота этой строки.
initialСбрасывает свойство до none.
inheritНаследует вычисленное значение от родительского элемента.
unsetВедёт себя как inherit, если свойство наследуется, иначе — как initial.

Примеры

Определение строк и столбцов

Эта сетка имеет одну явную строку высотой 170px и три столбца с размером auto. Элементы, выходящие за пределы первой строки, размещаются в неявно созданных строках.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grid-container {
        display: grid;
        grid-template: 170px / auto auto auto;
        grid-gap: 10px;
        background-color: #ccc;
        padding: 10px;
      }
      .grid-container > div {
        background-color: #eee;
        text-align: center;
        padding: 30px 0;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <h2>Grid-template property example</h2>
    <div class="grid-container">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
    </div>
  </body>
</html>

Результат:

Трёхколоночная CSS-сетка, созданная с помощью свойства grid-template

Использование именованных областей

Здесь первый элемент получает имя item1 через grid-area. Две строки в кавычках размещают item1 в блоке 2×2 в верхнем левом углу. Точки (.) обозначают пустые ячейки, в которые попадают остальные элементы.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .box {
        grid-area: item1;
      }
      .grid-container {
        display: grid;
        grid-template: 'item1 item1 . .' 'item1 item1 . .';
        grid-gap: 10px;
        background-color: #ccc;
        padding: 10px;
      }
      .grid-container > div {
        background-color: #eee;
        text-align: center;
        padding: 30px 0;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <h2>Grid-template property example</h2>
    <div class="grid-container">
      <div class="box">1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
    </div>
  </body>
</html>

Разметка страницы с именованными областями

Классическая трёхсекционная разметка — шапка, боковая панель и контент — определённая в одном объявлении grid-template:

<!DOCTYPE html>
<html>
  <head>
    <title>Named area layout</title>
    <style>
      .page {
        display: grid;
        grid-template:
          "header  header"  60px
          "sidebar content" 1fr
          "footer  footer"  40px
          / 160px 1fr;
        gap: 8px;
        height: 300px;
      }
      .page > * {
        background: #dde;
        padding: 8px;
        font-family: sans-serif;
      }
      .hdr  { grid-area: header; }
      .side { grid-area: sidebar; }
      .main { grid-area: content; }
      .ftr  { grid-area: footer; }
    </style>
  </head>
  <body>
    <div class="page">
      <div class="hdr">Header</div>
      <div class="side">Sidebar</div>
      <div class="main">Content</div>
      <div class="ftr">Footer</div>
    </div>
  </body>
</html>

Разметка полностью определена в одном свойстве: три строки (60 пкс / гибкая / 40 пкс) и два столбца (боковая панель 160 пкс / гибкий контент). Span-атрибуты grid-column или grid-row не нужны — имена всё делают сами.

Распространённые ошибки

Области должны образовывать прямоугольник. Нельзя создать L-образную или T-образную именованную область. Если попытаться, объявление будет недействительным и браузер его проигнорирует.

Количество ячеек в строках должно совпадать. Число ячеек в каждой строке в кавычках должно быть одинаковым. "a b" в паре с "a b c" — недопустимо.

grid-template сбрасывает три развёрнутых свойства. Установка grid-template: 1fr / 1fr неявно задаёт grid-template-areas: none — все ранее установленные именованные области удаляются.

Неявные треки не затрагиваются. grid-template управляет только явной сеткой. Лишние элементы, выходящие за пределы заданных строк и столбцов, размещаются в неявных треках, размер которых определяется свойствами grid-auto-rows и grid-auto-columns.

Поддержка браузерами

grid-template является частью CSS Grid Layout Module Level 1 и поддерживается всеми современными браузерами (Chrome 57+, Edge 16+, Firefox 52+, Safari 10.1+, Opera 44+). Свойство не оказывает эффекта на элементы, которые не являются контейнерами сетки — всегда используйте его вместе с display: grid.

Практика

Практика
Что делает CSS-свойство grid-template?
Что делает CSS-свойство grid-template?
Was this page helpful?