Как создать сетку в CSS: grid-template-columns и grid-template-rows

grid-template-columns и grid-template-rows задают количество и размер колонок и строк сетки - списком значений через пробел, где каждое число создаёт одну колонку или строку. Чтобы не повторять одинаковые значения вручную, есть функция repeat(), а gap задаёт отступы между ячейками.

Попробуй прямо сейчас: добавь ещё пару элементов <div> в разметку - сетка сама достроит недостающую строку под них, хотя в grid-template-rows задано только 2 строки.

grid-template-columns и grid-template-rows: задаём колонки и строки вручную

В прошлом уроке про CSS Grid уже говорилось, что display: grid делает элемент grid-контейнером, а его прямые потомки становятся ячейками сетки. grid-template-columns и grid-template-rows задают саму структуру: список значений через пробел, где каждое число - это одна колонка (или строка), а количество чисел - это количество колонок (или строк). Значения можно смешивать - например, "200px 1fr 1fr" создаст одну колонку фиксированной ширины и две гибкие.

grid-template-columns: 200px 1fr 1fr; - три колонки: первая фиксированная 200px, оставшееся место поровну делят вторая и третья.

grid-template-columns: 3;, пытаясь просто указать "3 колонки" числом - grid-template-columns не считает колонки, а перечисляет их размеры; одно число создаст всего ОДНУ колонку такой ширины.

Функция repeat(): не повторяем одинаковые значения

Когда колонки или строки повторяются, вместо ручного перечисления удобнее repeat(количество, значение): repeat(3, 1fr) - это ровно то же самое, что "1fr 1fr 1fr", только короче и легче менять при правках. repeat() умеет повторять не только одно значение, а целый УЗОР из нескольких сразу: repeat(2, 100px 1fr) повторяет пару "100px и 1fr" дважды и даёт четыре колонки подряд - 100px, 1fr, 100px, 1fr.

grid-template-columns: repeat(4, 1fr); - четыре равные колонки, короче, чем писать "1fr 1fr 1fr 1fr".

grid-template-columns: repeat(4); без второго аргумента - у repeat() всегда два аргумента: сколько раз повторить и ЧТО именно повторить.

gap: расстояние между колонками и строками

gap - это сокращённая запись сразу для двух свойств: row-gap (отступ между строками) и column-gap (отступ между колонками). Одно значение (gap: 10px) задаёт оба отступа одинаковыми, а два значения через пробел (gap: 10px 30px) задают их по отдельности - первое число всегда для строк, второе - для колонок. Это, в отличие от margin у отдельных ячеек, чистое расстояние МЕЖДУ ячейками, которое не добавляется по внешнему краю самой сетки.

gap: 16px; - одинаковый отступ 16px и между строками, и между колонками.

gap: 30px 10px;, ожидая больший отступ между колонками - первое число всегда относится к строкам (row-gap), а не к колонкам; здесь как раз наоборот - между строками 30px, а между колонками 10px.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Пытаются задать число колонок одним числом, а не списком размеров grid-template-columns: 3; создаёт одну колонку шириной 3px, а не три колонки Использовать repeat(3, значение) или перечислить размеры через пробел явно
Забывают второй аргумент у repeat() Правило не действует - repeat() требует и количество, и повторяемое значение Всегда указывать оба аргумента: repeat(количество, значение)
Путают порядок значений в gap: 10px 30px Отступы между строками и колонками получаются перепутанными местами Помнить порядок: первое значение - row-gap (строки), второе - column-gap (колонки)
Пугаются, когда элементов больше, чем строк в grid-template-rows Кажется, что лишние элементы должны пропасть или сломать вёрстку Сетка сама достраивает недостающие строки автоматической высоты - это ожидаемое поведение

Шпаргалка

Что нужноКак сделать
3 колонки фиксированной шириныgrid-template-columns: 100px 100px 100px;
То же самое корочеgrid-template-columns: repeat(3, 100px);
Повторяющийся узор из двух значенийgrid-template-columns: repeat(2, 100px 1fr);
Одинаковый отступ между строками и колонкамиgap: 16px;
Разные отступы (строки, колонки)gap: 10px 30px;
Элементов больше, чем строк в шаблонелишние строки создаются автоматически

Коротко: отвечаем на вопросы

Что будет, если элементов больше, чем ячеек, заданных в grid-template-rows?

Сетка автоматически создаст дополнительные строки под лишние элементы - по умолчанию их высота подстраивается под содержимое. Элементы не пропадают и не сжимают уже заданные строки - grid-template-rows описывает только явно заданные строки, а всё, что не поместилось, попадает в новые неявные строки.

Категория
css
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×