Свойство CSS grid-column
Освойте сокращение CSS grid-column: размещайте элементы сетки по номеру линии, количеству пролётов, отрицательному индексу или именованным линиям.
Свойство CSS grid-column является сокращением, которое размещает элемент сетки вдоль горизонтальной (строчной) оси. Оно задаёт, где элемент начинается и где заканчивается, что вместе определяет его положение в столбце и количество охватываемых столбцов. Оно объединяет два развёрнутых свойства:
- grid-column-start — линия столбца, с которой начинается элемент.
- grid-column-end — линия столбца, на которой заканчивается элемент.
Сетка делится линиями сетки, и grid-column работает, ссылаясь именно на эти линии, а не на ячейки между ними. В сетке из четырёх столбцов есть пять вертикальных линий, пронумерованных от 1 до 5 слева направо (или от −5 до −1 при отсчёте справа).
Примечание:
grid-columnуправляет только размещением по столбцам. Чтобы разместить элемент по строкам, используйте grid-row. Чтобы задать положение элемента сразу по строке и столбцу, используйте grid-area.
| Начальное значение | auto / auto |
| Применяется к | Элементам сетки |
| Наследуется | Нет |
| Анимируемое | Да |
| Спецификация | CSS Grid Layout Level 1 |
| Синтаксис DOM | object.style.gridColumn = "1 / span 3" |
Синтаксис
/* Two explicit line numbers */
grid-column: <start-line> / <end-line>;
/* Start line + span count */
grid-column: <start-line> / span <number>;
/* Span by named line */
grid-column: span <name>;
/* Single value (sets start; end defaults to auto) */
grid-column: <start-line>;
/* Global keywords */
grid-column: initial | inherit | unset | revert;Форматы значений
Существует четыре распространённых способа записи grid-column:
| Формат | Пример | Что делает |
|---|---|---|
| Два номера линий | 2 / 4 | Начинается с линии 2, заканчивается на линии 4 (охватывает столбцы 2–3) |
| Начало + количество пролётов | 2 / span 2 | Начинается с линии 2, охватывает 2 столбца вперёд |
| Отрицательный номер линии | 1 / -1 | Охватывает от первой до самой последней линии (на всю ширину) |
| Именованные линии | content-start / content-end | Использует имена из grid-template-columns |
| Одно значение | 3 | Устанавливает grid-column-start: 3; конец — auto (один столбец) |
Если указано только одно значение (без /), устанавливается только grid-column-start; значение grid-column-end по умолчанию равно auto, и элемент занимает одну дорожку столбца.
Как нумеруются линии сетки
Линии сетки нумеруются с 1 от начального края (слева в LTR-раскладке). Можно также использовать отрицательные числа для отсчёта от конечного края: −1 всегда ссылается на последнюю линию вне зависимости от количества столбцов.
Column tracks: [ 1 ][ 2 ][ 3 ][ 4 ]
Line numbers: 1 2 3 4 5
Negative: -5 -4 -3 -2 -1Это означает, что grid-column: 1 / -1 всегда растягивает элемент на всю ширину явной сетки, независимо от количества столбцов.
Примеры
Размещение элемента с явными номерами линий
Блок 6 размещён между линиями столбцов 2 и 4, поэтому он охватывает столбцы 2 и 3.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
gap: 10px;
background-color: #ccc;
padding: 10px;
}
.grid-container > div {
background-color: #666;
text-align: center;
padding: 20px 0;
font-size: 20px;
}
.box6 {
grid-column: 2 / 4;
}
</style>
</head>
<body>
<h2>Grid-column property example</h2>
<div class="grid-container">
<div class="box1">1</div>
<div class="box2">2</div>
<div class="box3">3</div>
<div class="box4">4</div>
<div class="box5">5</div>
<div class="box6">6</div>
<div class="box7">7</div>
</div>
</body>
</html>
Размещение первого элемента с помощью 1 / 3
Блок 1 размещён с grid-column: 1 / 3, занимая первые две дорожки столбцов.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
gap: 10px;
background-color: #ccc;
padding: 10px;
}
.grid-container > div {
background-color: #888;
text-align: center;
padding: 20px 0;
font-size: 30px;
}
.box1 {
grid-column: 1 / 3;
}
</style>
</head>
<body>
<h2>Grid-column property example</h2>
<div class="grid-container">
<div class="box1">1</div>
<div class="box2">2</div>
<div class="box3">3</div>
<div class="box4">4</div>
<div class="box5">5</div>
<div class="box6">6</div>
<div class="box7">7</div>
</div>
</body>
</html>Использование span и элемент на всю ширину с 1 / -1
Ключевое слово span удобно, когда известно количество столбцов для охвата, но не номер конечной линии. Отрицательная конечная линия (-1) всегда достигает последней линии столбца, растягивая элемент на всю ширину явной сетки.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
gap: 10px;
background-color: #ccc;
padding: 10px;
}
.grid-container > div {
background-color: #4caf50;
color: #fff;
text-align: center;
padding: 20px 0;
font-size: 20px;
}
.featured {
grid-column: 1 / span 2; /* starts at line 1, covers 2 columns */
}
.full-width {
grid-column: 1 / -1; /* spans the whole explicit grid */
}
</style>
</head>
<body>
<h2>span and full-width example</h2>
<div class="grid-container">
<div class="featured">Featured (2 cols)</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div class="full-width">Full width (1 / -1)</div>
</div>
</body>
</html>Размещение элементов с именованными линиями
Линии сетки можно именовать в grid-template-columns с помощью синтаксиса квадратных скобок, а затем использовать эти имена в grid-column. Это делает разметку более читаемой и устойчивой к изменению количества столбцов.
<!DOCTYPE html>
<html>
<head>
<title>Named grid lines</title>
<style>
.grid-container {
display: grid;
/* Names the lines around the middle two columns */
grid-template-columns:
[full-start] 1fr
[content-start] 2fr 2fr
[content-end] 1fr
[full-end];
gap: 10px;
background-color: #eee;
padding: 10px;
}
.grid-container > div {
background-color: #5c6bc0;
color: #fff;
text-align: center;
padding: 20px 0;
font-size: 18px;
}
.sidebar {
grid-column: full-start / content-start; /* first column only */
}
.main {
grid-column: content-start / content-end; /* middle two columns */
}
.aside {
grid-column: content-end / full-end; /* last column only */
}
</style>
</head>
<body>
<h2>Named lines example</h2>
<div class="grid-container">
<div class="sidebar">Sidebar</div>
<div class="main">Main content</div>
<div class="aside">Aside</div>
</div>
</body>
</html>Значения
| Значение | Описание |
|---|---|
<line-number> | Целочисленный номер линии (положительный — от начала, отрицательный — от конца). |
<line-name> | Пользовательское имя, определённое в grid-template-columns. |
span <number> | Охватывает указанное количество дорожек столбца. |
span <name> | Охватывает до следующей линии с указанным именем. |
auto | Браузер размещает элемент автоматически (по умолчанию). |
initial | Сбрасывает до значения по умолчанию (auto / auto). |
inherit | Наследует вычисленное значение от родительского элемента. |
unset | Действует как inherit, если свойство наследуется, иначе — как initial. |
Распространённые ошибки
1 / -1охватывает только явную сетку. Если элементы размещены в неявной сетке (дополнительные строки/столбцы, создаваемые браузером автоматически), отрицательная конечная линия не распространяется на эти дорожки. Сначала определите полную сетку с помощьюgrid-template-columns.spanбез начальной линии. При записиgrid-column: span 3устанавливается толькоgrid-column-end: span 3; начало равноauto, и браузер выбирает его сам. Это допустимо, но размещение зависит от порядка автопотока.- Поиск именованной линии. Если вы ссылаетесь на имя, которого нет в шаблоне, браузер трактует его как
auto. Всегда проверяйте имя вgrid-template-columns. - Сокращение с одним значением.
grid-column: 3устанавливает начало на линию 3, а конец — вauto, а не на линию 4. Элемент занимает ровно одну дорожку столбца, если только автоматически размещённый конец не охватывает больше.
Связанные свойства
- grid-column-start и grid-column-end — два развёрнутых свойства, объединяемых в
grid-column. - grid-row — аналог для вертикальной оси; тот же синтаксис, применяется к строкам.
- grid-area — задаёт размещение по строкам и столбцам в одном объявлении.
- grid-template-columns — определяет дорожки столбцов и именованные линии, на которые ссылается
grid-column. - grid-template-rows — определяет дорожки строк и именованные линии для grid-row.
- grid-auto-columns — управляет размером неявно создаваемых дорожек столбцов.
- grid — универсальное сокращение для всей сетки.