В CSS Grid предусмотрена возможность изменять позицию каждого элемента на линии, обращаясь к нему через CSS свойства. Чтобы обратится к первому элементу в сетке, обратимся к нему через псевдокласс nth-child(1) .

CSS Grid. Практические примеры #3

Управление элементами в контейнере

В CSS Grid предусмотрена возможность изменять позицию каждого элемента на линии, обращаясь к нему через CSS свойства. Чтобы обратится к первому элементу в сетке, обратимся к нему через псевдокласс nth-child(1).


<div class="container">
    <div class="item">item-1</div>
    <div class="item">item-2</div>
    <div class="item">item-3</div>
    <div class="item">item-4</div>
</div>

.container {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(3, 100px);
    grid-gap: 10px;
}


CSS Grid. Практические примеры #3.

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

.item:nth-child(1) {
    grid-column-start: 2;
}


CSS Grid. Практические примеры #3.

Если мы хотим, чтобы первый элемент занял весь ряд, то добавим еще одно свойство grid-column-end. Важно понимать, что значения 1 и 5, не номера ячеек. Это номера линий (Grid Line). У данной сетки 2 горизонтальные линии и 5 вертикальных.

.item:nth-child(1) {
    grid-column-start: 1;
    grid-column-end: 5;
}
//сокращенный вариант: номера стартовой и конечной позиций
    grid-column: 1 / 5;


CSS Grid. Практические примеры #3.

Далее определим позицию третьего элемента не только по колонкам, но и по рядам.

.item:nth-child(3) {
    grid-column: 2 / 4;
    grid-row: 2; }

Третий элемент стал занимать две фракции по горизонтали со второй по четвертую позиции и закрепился во втором ряду.


CSS Grid. Практические примеры #3.

Фокусы с grid-row

Представьте себе первый элемент - это баннер на всю ширину браузера и вы хотите баннер (item-1) поменять местами с соседними элементами (item-2, item-3, item-4). Сделать это невероятно легко, указав первому элементу второй ряд, а второму и третьему элементам, наоборот первый ряд.

.item:nth-child(1) {
    grid-column: 1 / -1;
    grid-row: 2;
}

.item:nth-child(2) {
    grid-column: 1;
    grid-row: 1;
}

.item:nth-child(3) {
    grid-column: 2 / 4;
    grid-row: 1;
}

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


CSS Grid. Практические примеры #3.

Выравнивание элементов по горизонтали

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


justify-items: start; - элементы прижимаются к левому краю
justify-items: center; - элементы выравниваются по центру
justify-items: end; - элементы прижимаются к правому краю
justify-items: stretch; - элементы растягиваются на всю ширину экрана

Все элементы в контейнере по умолчанию растягиваются на всю ширину экрана (stretch), но если мы хотим изменить такой порядок вещей, то в нашем распоряжении есть три значения у свойства justify-items.

Элементы выровнены по центру

.container {
    display: grid;
    grid-template-columns: 1fr 2fr 1fr;
    grid-template-rows: minmax(120px, auto);
    grid-gap: 10px;
    justify-items: center;
}


CSS Grid. Практические примеры #3.

Элементы выровнены по левому краю

.container {
    ...
    justify-items: start;
}


CSS Grid. Практические примеры #3.

Элементы выровнены по правому краю

.container {
    ...
    justify-items: end;
}


CSS Grid. Практические примеры #3.

Выравнивание элементов по вертикали

Свойство align-items выравнивает элементы в контейнере по вертикали и обладает тем же набором значений, как и у предыдущего свойства.


align-items: start; - элементы прижимаются к верхнему краю
align-items: center; - элементы выравниваются по центру
align-items: end; - элементы прижимаются к нижнему краю
align-items: stretch; - элементы растягиваются


.container {
    ...
    align-items: center;
}


CSS Grid. Практические примеры #3.