Свойство CSS grid-row-gap
Узнайте, как CSS grid-row-gap задаёт отступ между строками сетки: синтаксис, значения, примеры и советы по использованию псевдонима row-gap.
Свойство CSS grid-row-gap задаёт размер промежутка (отступа) между строками грид-контейнера. Оно вставляет пространство между строками — но никогда перед первой строкой или после последней, — поэтому не создаёт неожиданных внешних отступов.
Это свойство влияет только на элементы, у которых display равен grid или inline-grid. Оно не действует на Flexbox или многоколоночные макеты; для них используйте стандартное свойство column-gap или универсальное сокращение gap.
grid-row-gap теперь является псевдонимом стандартного свойства row-gap, которое работает в CSS Grid, Flexbox и многоколоночных макетах. Браузеры обрабатывают их одинаково в контексте сетки. В новом коде предпочтительно использовать row-gap (или сокращение grid-gap, задающее оба направления сразу). grid-row-gap остаётся допустимым и поддерживается для обратной совместимости.
Краткий справочник
| Начальное значение | normal (обрабатывается как 0 в сетке) |
| Применяется к | Грид-контейнерам |
| Наследуется | Нет |
| Анимируется | Да |
| Спецификация | CSS Grid Layout Module Level 1 |
| DOM-синтаксис | element.style.gridRowGap = "30px" |
Когда использовать
Используйте grid-row-gap, когда нужно обеспечить предсказуемые вертикальные промежутки между строками сетки без применения полей (margin) на отдельных элементах. Поля между элементами сетки неудобны — они коллапсируют непоследовательно, добавляют пространство по краям и их сложнее изменять глобально. Отступ строк, напротив, располагается только между строками и сохраняет внешние края сетки вровень, что делает управление отступами простым и понятным.
Сочетайте это свойство с grid-column-gap для горизонтальных отступов или заменяйте оба свойства сокращением grid-gap, когда нужно задать отступы строк и столбцов одновременно.
Синтаксис
/* keyword */
grid-row-gap: normal;
/* absolute length */
grid-row-gap: 20px;
grid-row-gap: 1.5em;
/* percentage of the container's block size */
grid-row-gap: 10%;
/* global values */
grid-row-gap: inherit;
grid-row-gap: initial;
grid-row-gap: unset;Значения
| Значение | Описание |
|---|---|
normal | Интервал по умолчанию, устанавливаемый браузером. В грид-контейнере разрешается в 0. |
<length> | Неотрицательное CSS-значение длины (px, em, rem, vw и др.). |
<percentage> | Неотрицательный процент, вычисляемый относительно размера блочной оси (высоты) грид-контейнера. |
inherit | Принимает вычисленное значение родительского элемента. |
initial | Сбрасывает свойство до начального значения (normal). |
unset | Действует как inherit, если свойство наследуется, и как initial в противном случае. |
Примеры
Без отступа строк (по умолчанию)
При grid-row-gap: 0 строки располагаются вплотную друг к другу без вертикального промежутка. Только grid-column-gap разделяет элементы по горизонтали.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
grid-column-gap: 20px;
grid-row-gap: 0;
background-color: #666;
padding: 10px;
}
.grid-container > div {
background-color: #eee;
text-align: center;
padding: 20px 0;
font-size: 30px;
}
</style>
</head>
<body>
<h2>Grid-row-gap 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>7</div>
<div class="box8">8</div>
</div>
</body>
</html>
Фиксированный отступ в пикселях
Установка grid-row-gap: 40px добавляет промежуток в 40 пикселей между каждой парой строк. Отступ между столбцами остаётся отдельным и управляется независимо через grid-column-gap.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
grid-column-gap: 20px;
grid-row-gap: 40px;
background-color: #666;
padding: 10px;
}
.grid-container > div {
background-color: #eee;
text-align: center;
padding: 20px 0;
font-size: 30px;
}
</style>
</head>
<body>
<h2>Grid-row-gap 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>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
</body>
</html>Отступ в процентах
Значение в процентах вычисляется относительно размера блочной оси грид-контейнера (его высоты). Это означает, что отступ пропорционально увеличивается при росте высоты контейнера, что может быть полезно для гибких макетов, чувствительных к соотношению сторон. Для большинства контентных макетов фиксированное значение px или rem более предсказуемо.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto;
grid-row-gap: 15%;
grid-column-gap: 3%;
background-color: grey;
padding: 40px;
}
.grid-container > div {
background-color: white;
text-align: center;
padding: 25px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="grid-container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
</body>
</html>Переход на современный row-gap
Спецификация CSS Grid впоследствии была приведена в соответствие с соглашениями о промежутках в многоколоночных макетах и Flexbox: grid-row-gap был переименован в row-gap. Оба свойства взаимозаменяемы в контексте сетки, однако row-gap также работает в Flexbox и многоколоночных контейнерах. Миграция — это переименование в одну строку:
/* Legacy — still valid, but prefer row-gap in new code */
grid-row-gap: 20px;
/* Modern equivalent */
row-gap: 20px;
/* Shorthand: sets row-gap and column-gap at once */
gap: 20px 10px; /* row-gap: 20px; column-gap: 10px */
gap: 20px; /* both row-gap and column-gap: 20px */Все основные браузеры поддерживают row-gap для сетки с начала 2020 года, поэтому практических причин использовать имя grid-row-gap в новых проектах нет.
Распространённые ошибки
- Процентные отступы и внутренняя высота. Если у грид-контейнера нет явно заданной
height, браузер не может вычислить процентный отступ строк до тех пор, пока не узнает высоту контейнера, которая в свою очередь зависит от содержимого. Эта циклическая зависимость может привести к тому, что отступ разрешится в0. Используйтеpxилиrem, если только контейнер не имеет фиксированной высоты. - Отрицательные значения не допускаются. В отличие от полей,
grid-row-gapпринимает только нулевые или положительные значения. Попытка задать отрицательный отступ является недопустимой, и объявление игнорируется. - Отступ не добавляет внешнее пространство.
grid-row-gapдобавляет пространство только между строками. Если нужен отступ вокруг всей сетки, используйте свойствоpaddingконтейнера. - На растянутые элементы это не влияет. Элемент, охватывающий несколько строк с помощью
grid-row: span 2, по-прежнему учитывает отступы между этими строками как часть своего выделенного пространства.
Связанные свойства
grid-column-gap— задаёт промежуток между столбцами сетки.grid-gap— сокращение, задающее одновременноgrid-row-gapиgrid-column-gap.column-gap— современное, независимое от типа макета свойство для отступов между столбцами.grid-template-columns— определяет дорожки столбцов, между которыми находится отступ.grid-template-rows— определяет дорожки строк, разделённые этим отступом.grid-auto-rows— управляет размером неявно созданных строк.