Свойства контейнера (родительского элемента)
display: grid | inline-grid
Определяет элемент как grid-контейнер..container { display: grid; }
grid-template-columns
Задает размеры и количество колонок..container { grid-template-columns: 100px 1fr 2fr; }
grid-template-rows
Задает размеры и количество строк..container { grid-template-rows: 50px auto 100px; }
grid-template-areas
Создает именованные области сетки..container { grid-template-areas: "header header" "sidebar content" "footer footer"; }
grid-template
Сокращение дляgrid-template-rows
,grid-template-columns
,grid-template-areas
..container { grid-template: "header header" 80px "sidebar content" 1fr / 200px 1fr; }
gap
(илиgrid-gap
)
Задает промежутки между элементами..container { gap: 10px 20px; /* row-gap column-gap */ }
justify-items
Выравнивает элементы по горизонтали внутри ячеек..container { justify-items: start | end | center | stretch; }
align-items
Выравнивает элементы по вертикали внутри ячеек..container { align-items: start | end | center | stretch; }
place-items
Сокращение дляalign-items
иjustify-items
..container { place-items: center stretch; }
justify-content
Выравнивает сетку по горизонтали, если она меньше контейнера..container { justify-content: start | end | center | space-around | space-between; }
align-content
Выравнивает сетку по вертикали..container { align-content: start | end | center | space-between; }
grid-auto-columns
Задает размер для неявно созданных колонок..container { grid-auto-columns: 100px; }
grid-auto-rows
Задает размер для неявно созданных строк..container { grid-auto-rows: 50px; }
grid-auto-flow
Управляет авторазмещением элементов..container { grid-auto-flow: row | column | dense; }
Свойства элементов (дочерних элементов)
grid-column-start
/grid-column-end
Определяет начальную и конечную линии для колонки..item { grid-column-start: 1; grid-column-end: 3; }
grid-row-start
/grid-row-end
Определяет начальную и конечную линии для строки..item { grid-row-start: 2; grid-row-end: 4; }
grid-column
/grid-row
Сокращение дляgrid-column-start
иgrid-column-end
(аналогично дляgrid-row
)..item { grid-column: 1 / 3; /* или span 2 */ grid-row: 2 / 4; }
grid-area
Присваивает элемент к именованной области или задает позицию..item { grid-area: header; /* Имя из grid-template-areas */ /* Или: grid-area: row-start / column-start / row-end / column-end; */ }
justify-self
Выравнивает элемент по горизонтали внутри ячейки..item { justify-self: start | end | center | stretch; }
align-self
Выравнивает элемент по вертикали внутри ячейки..item { align-self: start | end | center | stretch; }
place-self
Сокращение дляalign-self
иjustify-self
..item { place-self: center end; }
Пример полной сетки:
.container { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 100px auto; gap: 10px; grid-template-areas: "header header header" "sidebar content content"; } .item-header { grid-area: header; } .item-sidebar { grid-column: 1 / 2; }
Это основные свойства CSS Grid. Для более сложных сценариев можно использовать функции вроде minmax()
, repeat()
, fit-content()
.
Слеш /
в значении свойства grid-column
(или grid-row
)
Используется для разделения начальной и конечной линий сетки, которые определяют, сколько колонок (или строк) будет занимать элемент.
Как это работает:
До слеша — номер начальной линии (или ключевое слово, например,
span
).После слеша — номер конечной линии (или ключевое слово).
Примеры:
Явное указание линий:
.item { grid-column: 1 / 3; /* Элемент начинается у 1-й линии и заканчивается у 3-й (занимает 2 колонки) */ }
Использование
span
:.item { grid-column: 2 / span 2; /* Начинается у 2-й линии и занимает 2 колонки */ }
Сокращенная запись:
.item { grid-column: 2; /* Эквивалентно grid-column: 2 / 3 (занимает одну колонку) */ }
Аналогия с Excel
Представьте, что сетка — это таблица Excel:
grid-column: 1 / 3
— элемент растягивается от ячейки A1 до C1 (но не включая C1).grid-column: span 2
— элемент занимает 2 ячейки от текущей позиции.
Важные нюансы:
Нумерация линий начинается с
1
, а не с0
.Отрицательные значения отсчитываются с конца:
.item { grid-column: 1 / -1; /* От первой линии до последней (весь ряд) */ }
Именованные линии (если вы их задали через
grid-template-areas
):.item { grid-column: sidebar-start / content-end; }
Пример с сеткой:
.container { display: grid; grid-template-columns: repeat(3, 100px); /* 3 колонки по 100px */ gap: 10px; } .item-1 { grid-column: 1 / 3; /* Занимает первые 2 колонки */ } .item-2 { grid-column: 2 / span 2; /* Начинается со 2-й колонки, занимает 2 колонки */ }