18.07.2026

Auto-flow — строки или колонки

Пока что мы создавали только дополнительные строки, чтобы уложить дополнительные грид-элементы. Но что, если мы хотим использоваться дополнительные колонки?

Для этого у нас есть свойство grid-auto-flow

Это свойство позволяет указывать, что нужно использовать для авто-размещения элементов, строки или колонки. Другими словами, вы можете указать как будет расти неявный грид — в виде строк или колонок. Изначальное значение тут — row , что объясняет то, почему на примере выше были добавлены дополнительные строки, вместо колонок. Но если вы предпочитаете использовать колонки, то вы можете использовать это:

Вот что случится, если мы применим это к первому примеру.


Example

1

2

3

4

5

6

Само собой, вы можете попробовать пойти дальше в этом примере и использовать grid-auto-columns свойство, чтобы изменить ширину автоматически сгенерированной колонки. Так что если вы хотите, чтобы все колонки выше, были одинаковой ширины, вам надо использовать grid-auto-columns: 1fr .

Имейте ввиду, что выставляя column для grid-auto-flow вы изменяете поток грид элементов. Вы уже могли заметить, что грид элементы в примере выше размещаются вдоль каждой колонки, вместо каждой строки.

Опциональное значение dense

У grid-auto-flow также есть опциональное значение dense , которое может помочь в создании компактного грида и предостеречь от больших пробелов между грид-элементами в случае непоследовательных размеров всех грид-элементов в контейнере. К примеру, у вас есть вот такой грид:

Применение dense превратит его в такое:

Применение этого значения приведет к тому, что элементы будут показываться не по порядку, так как последующие элементы могут вернуться назад в порядке и заполнить пробелы, которые появлялись ранее, но это не подходит для каждой ситуации.

Расстановка Grid-элементов

Если вы еще полностью не понимаете как грид-элементы расставляются в гриде, то вам нужно прекратить тратить кучу времени впустую на то, что может занять у вас всего несколько секунд.

К счастью, это не сложная для понимания концепция. Просто напросто, тут все сходится к грид-линиям.

Грид-линии — это горизонтальные и вертикальные линии в гриде. Каждая строка и колонка имеет грид-линию с каждой своей стороны. У каждой грид линии есть числовой индекс, к которому вы можете ссылаться во время расстановки грид элементов.

На примере выше, первый грид элемент начинается со строчной линии 1 и колоночной линии 1, а заканчивается на строчной линии 2 и колоночной линии 2. Второй грид элемент начинается на строчной линии 3 и колоночной линии 2, а заканчивается на строчной линии 4 и колоночной линии 4.

Всё описанное выше можно сделать с помощью следующего кода.

#item1 grid-row-start: 1; 
grid-column-start: 1;
grid-row-end: 2;
grid-column-end: 2;
>
#item2 grid-row-start: 3;
grid-column-start: 2;
grid-row-end: 4;
grid-column-end: 4;
>

Example

В это случае нам необязательно указывать конечные значения на первом элементе, потому что он охватывает только один трек. Тоже самое можно сказать и про второй грид элемент. По-дефолту, если вы не указываете конечную линию, то элемент охватит только один трек.

На самом деле, нам не нужно было указывать любое позиционирование для первого грид элемента, так как он находится на определенной позиции, то он был бы в любом случае. Но если бы мы не указали позиционирование для второго элемента, то он бы находился сразу за первым элементом занимая только 1 трек.

Именование грид линий

Вы также можете проименовать грид линии для облегчения обращения к ним. Это можно делать выставляя свойства grid-template-rows и grid-template-columns , например как тут:

#grid display: grid; 
/* Выставляем имена строк и треки */
grid-template-rows: [row1-start] 50px [row2-start] 1fr [row3-start] 80px [row3-end];
grid-template-columns: [col1-start] 120px [col2-start] 1fr [col3-start] 80px [col3-end];
grid-gap: 5px;
height: 90vh;
>
.
/* Теперь ссылаемся к именованным строкам*/
#item2 grid-row-start: row3-start;
grid-column-start: col2-start;
grid-row-end: row3-end;
grid-column-end: col3-end;
>

Проименованные линии могут быть как явными, так и неявными. Неявные проименованные линии создаются всякий раз, когда вы создаете именные грид-области используя grid-template-areas .

Имя берется из грид-области с прибавлением в конце -start и -end , в зависимости от того начало это или конец линии.

Таким образом для каждой проименованной грид области header , будет создано четыре неявных линии. Две названы header-start и column-start в проименованной грид области и две названы header-end соответственно.

Проименованные грид области

Грид области могут быть проименованы в свойстве grid-template-areas самого грид контейнера. Это то, что мы делали до этого, когда создавали шаблон сайта. Чтобы восстановить это в памяти, то это выглядит так:

#grid < 
display: grid;
/* Расставляем имена грид областям */
grid-template-areas:
"a a"
"b c";
.
>
. /* Теперь расставляем каждый грид элемент проименованной грид области */
#a grid-area: a;
>
#b grid-area: b;
>
#c <
grid-area: c;
>

Вы можете указать пустую ячейку, используя точку ( . ) или серию точек без пробелов. Для примера:

grid-template-areas: 
"a a"
". b";
Илиgrid-template-areas:
"header header"
". content";

Подробнее про grid-template-areas вы можете прочитать в статье Поразительный CSS Grid Area

Свойства размещения гридов

Есть три коротких свойства, которые можно использовать вместо длинных свойств для размещения гридов, упомянутых в примерах выше. Вот куда они все помещаются.

grid-area — это свойство является сокращением для для:

—grid-column — это свойство является сокращением для:

——grid-column-start — указывает какая колоночная линия грид элемента стартовая и на сколько треков тянется.

——grid-column-end — указывает то, на каких колоночных линиях заканчивается грид элемент и на сколько треков тянется.

—grid-row — это свойство является сокращением для:

——grid-row-start — указывает с какой строчной линии начинается грид элемент и на сколько треков он тянется.

——grid-row-end — указывает какая строчная линия будет последней для элемента и насколько треков она будет тянуться.

Вы также можете использовать grid-auto-flow свойство, которое упоминалось в главе перед этой. Оно указывает как автоматически размещенные grid элементы должны помещаться в гриде. Автоматически размещенные элементы это те, которые не явно размещены с использованием любого свойства выше.

Создаем вложенный грид

Грид элементы могут сами становиться гридами в CSS Grid. То есть вы сможете вкладывать грид-элемент в другой грид-элемент, тем самым создавая вложенный грид контейнер.

Чтобы создать такой вложенный грид, всё, что вам нужно сделать — это применить display: grid (или display: inline-grid ) к грид элементу и он сам станет гридом. Вы также можете использовать display: subgrid для создания подгрида. Посмотрите на примере, как это происходит.


Example

1

2

3

5

6

7

8


Наследование

Большинство грид свойств не наследуются, что означает то, что ваш вложенный грид не будет наследовать значения своего родительского грида. Это позволяет вам вносить изменения в родительский грид, без непреднамеренного влияния на вложенный грид.

Для примера, вы выставили grid-auto-flow: column на родительском гриде, но вы не выставили свойство на вложенный грид. В этом случае, вложенному гриду будет выставлено значение row, потому что это изначальное значение для этого свойства.


Example

1

2

3

5

6

7

8


Обратите внимание, что на родительском гриде числа идут вертикально вниз по колонкам, вместо того, чтобы располагаться горизонтально вдоль строки, но вложенный грид все таки идет в горизонтальном направлении вдоль строки.

Подгриды

CSS Grid модуль может задавать значение subgrid для свойства display . Тем не менее, не все браузеры его ещё поддерживают. Хотя, это значение должно оказаться довольно полезным.

Subgrid это вложенный грид, но с display: subgrid . Это делает его особенным типом грид-контейнера, который участвует в выставлении размера грида родительского грид контейнера. Другими словами, контент подгрида влияет на размер родительского грида, позволяя контенту расставляться по двум гридам. Ниже пример того, где это свойство могло бы быть полезным.

Вот список элементов:

А вот CSS, где список является гридом, а элементы списка являются подгридами.

ul display: grid; 
grid: auto-flow / auto 1fr;
>
li grid-column: span 2;
display: grid;
grid: subgrid;
border: solid;
>
label grid-column: 1;
>
input grid-column: 2;
>

Этот пример показжет label и input в ряд, а бордер будет выставлен вокруг каждого элемента списка. Выставление каждому элементу списка subgrid означает то, что не должно возникнуть каких либо проблем с выравниванием форм ввода, потому что каждый элемент списка будет участвовать в формировании размера родительского грида.

Формы с авто-размещением

Вы можете использовать явные гриды, как преимущество при создании форм или любого другого скопления элементов, которым требуется выравнивание в виде гридов. Для примера, вы можете использовать явные гриды для создания такой формы:

Когда вы будете добавлять элементы формы в разметку, явный грид будет добавлять строки, чтобы уместить их. Таким образом, чтобы создать форму сверху, нам нужна такая разметка:

 


Нет нужды в дополнительной разметке, чтобы правильно все расставить. И также тут нет нужды в добавлении дополнительных классов для элементов формы. Мы добавляем только один класс для элемента, но хотя даже и это опционально. Вот рабочий пример:


Example

Name


Вы автоматически можете добавлять новые элементы формы и они будут автоматически подстроены под другие, так как они будут размещены в явном гриде.

Это является возможным, так как мы сделали саму форму гридом (к .myForm применено display: grid ). И потом указали, что labels идут в одну колонку, а controls в другую.

Вот ещё один пример, на этот раз с ещё большим количеством элементов:


Example

Name



Which taxi do you require?




Extras








Когда подгриды получат широкое распространение среди браузеров, станет возможным выравнивать элементы формы, которые не прямые потомки . Например такие, как списки элементов формы.

CSS Grid выравнивание

В основном большинство свойств выравнивания работает также на грид элементах, как и на других элементах. Но также есть некоторые свойства выравнивания, которые применяются исключительно для гридов и флексов.

Свойство align-items указывает стандартное значение align-self для всех грид элементов, участвующих в грид контейнере в контексте форматирования оного.

На примере выше мы применяем align-items: center для грид контейнера, следовательно все грид элементы будут выровнены по центру блочной оси.

Но так как это дефолтно, любой из грид элементов может переписать его с помощью align-self свойства.

Align-self свойство

Это свойство выравнивает элемент внутри блока контейнера вдоль блочной/колоночной/поперечной осей.


Example

Тут красному элементу выставлено значение baseline , а синий элемент имеет значение stretch . Высота синего элемента равна auto , таким образом он растягивается на всю высоту области грида.

Тем не менее, мы не выставляли свойств для зеленого элемента. Он использует дефолтное значение, которое в нашем случае равняется center в align-items грид контейнера.

Свойство justify-items

Это свойство указывает стандартное значение для justify-self значения всех грид элементов в грид контейнере.

Свойство justify-self

Это свойство может использоваться для выравнивания индивидуальных грид элементов вдоль строчной/линейной/главной осей.


Example
justify-content свойство

Свойство justify-content выравнивает контент грид контейнера плоностью вдоль главной оси.

Его можно применять для выравнивания всего грида в грид контейнере, в том случае, если грид трек забирает меньше места, чем его грид контейнер. Это может случиться, если вы выставили размер трека в абсолютной величине, например в пикселях, в то время как грид контейнер берет больше места, чем все треки вместе.

Свойство align-content

Это свойство схоже с justify-content , кроме того, что это свойство выравнивает вдоль поперечной/блочной осей.

Свойство place-content

Это свойство является сокращением для justify-content и align-content.

Свойство place-items

Это свойство является сокращением для justify-items и align-items .

Свойство place-self

Это свойство является сокращением для justify-self и align-self


Example

Наложение Grid элементов

Используя шаблоны CSS на гридах, представляется возможным накладывать грид элементы друг на друга посредством пересечения грид областей, отрицательных внешних отступов и других техник позиционирования. Когда происходит наложение, элементы накладываются друг на друга в заданном порядке или в соответствии с z-index .

Простой порядок

Если вы намеренно не использовали z-index для какого-либо грид элемента, то любые накладывающиеся друг на друга элементы будут расположены, основываясь на простой расстановке элементов в документе. Да, именно так. Они будут располагаться в том порядке, в котором они располагаются в разметке.


Example
Измененный порядок в документе

Этот термин применим тогда, когда порядок каждого грид элемента изменяется после назначения своих значений элементам. По факту, это будет обычный исходный код, если вы специально ничего не меняли в порядке расположения элементов.

Тем не менее, вы можете использовать свойство order , для того, чтобы расставить элементы так как вам нужно.

Используя эту технику, грид элементы накладываются в возрастающем порядке от низшего. Вот пример


Example
Используем z-index свойство

Так же можно использовать свойство z-index чтобы раскладывать элементы. Это свойство позволяет вам контролировать порядок элементов вдоль z-оси. Вот пример.


Example
Комбинируем z-index и order

Если у грид элементов был сменен порядок как на z-index , так и на order , то в порядке наложения z-index играет решающую роль. Это позволяет вам менять порядок элементов без потери контроля над наложением. Вот пример.


Example

Прямо в гридах вы можете использовать абсолютное позиционирование, буквально также как и в блочной модели. Если вы выставите position: relative для грид элемента и далее будете использовать position: absolute для одного из его потомков, то любое позиционирование указанное вами для него будет работать в пределах этого грид элемента.

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

Example #grid display: grid;position: relative;grid-template-columns: 1fr 1fr;grid-template-rows: 1fr 1fr;height: 90vh;background-color: beige;>#grid > div padding: 20px;font-size: 4vw;color: white;text-align: center;>.red background: orangered;grid-column: auto;grid-row: auto;>.green background: yellowgreen;grid-column: auto;grid-row: auto;>.blue background: steelblue;grid-column: auto;grid-row: auto;>.gray border: 16px solid black;background: silver;grid-column: 2 / 3;grid-row: 1 / 2;>

Но тем не менее, есть несколько вещей, которые нужно помнить при позиционировании элементов в гриде.

Абсолютно спозиционированные элементы не являются частью грид шаблона и они забирают место. Следовательно, они не влияют на расположение других грид элементов. Вот несколько примеров для демонстрации.

В этом примере, явно указан только бокс под номером четыре, во второй колонке первой строки, а все остальные боксы имеют параметры auto. Четвертый бокс фактически выталкивает второй бокс из своего слота — боксы 2 и 3 имеют авторазмещение в следующих доступных грид областях. Следовательно, четвертый бокс повлиял на расстановку грид элементов таким образом.

Выставляя четвертому боксу position: absolute , он все равно будет находится на позиции второго бокса, но второй бокс также будет находится на своем месте нетронутым, также как и третий бокс.

Example #grid display: grid;position: relative;grid-template-columns: 1fr 1fr;grid-template-rows: 1fr 1fr;height: 90vh;background-color: beige;>#grid > div padding: 20px;font-size: 4vw;color: white;text-align: center;>.red background: orangered;grid-column: auto;grid-row: auto;>.green background: yellowgreen;grid-column: auto;grid-row: auto;>.blue background: steelblue;grid-column: auto;grid-row: auto;>.gray border: 16px solid black;background: silver;grid-column: 2 / 3;grid-row: 1 / 2;position: absolute;>

Спозиционированные элементы урезаются, чтобы умещаться под свой контент.

Также стоит помнить, что спозиционированные элементы сокращаются для того, чтобы умещать свое содержание. Это вы можете прекрасно наблюдать на примере выше. Это отличается то того, что делают обычные грид элементы. Последние в свою очередь растягиваются, чтобы умещаться в свою грид область, так что если вы укажете, чтобы грид элемент занимал две колонки и две строки, он так и будет делать.

На нормальных грид элементах, значение auto для свойства размещения гридов выставлено span 1 , но на абсолютно спозиционированных элементах оно полагается на внутренний отступ грид-контейнера, что может привести к странностям в верстке, если вы об этом не узнали.

Помните, что значение auto изначальное значение для свойств размещения гридов, так что это может произойти по-дефолту, если вы не указали другое значение.

Инспектор Грид

Firefox DevTools дает возможность проверить грид шаблон любого грида, который вы видите в бразуере. Это может быть очень полезно, если вы имеете дело со сложным гридом, в котором грид элементы растягиваются на множество треков или с гридом, который несильно заполнен. В таких случаях, может быть довольно сложным визуализировать сам грид, который содержит в себе элементы.

Интспектор гридов в DevTools позволит вам увидеть линии гридов и любые пробелы между ними. Например как тут:

Как использовать инстпектор гридов в Firefox.

Откройте инспектор. Смотря веб страницу в бразуере, кликните правой мышкой на гриде, который хотите проинспектировать и выберите Inspect Element из контекстного меню.

Убедившись, что элемент с display: grid выбран в панели с исходным кодом и вкладка rules выбрана в другой панели, кликните на иконку грида, между display: grid .

Для Google Chrome же советую скачать дополнение — CSS Grid Highlighter for Chrome

Читать:
Как вызвать apple pay на iphone 12

Похожие записи

Как выучить ruby

admin

Ошибка входа в аккаунт xiaomi как убрать

admin

Как скрыть dns

admin