Введение в CSS Grid
Что такое CSS Grid
Как следует из названия, CSS Grid — это способ создания макета на основе сетки: набора строк и столбцов (не похожего на таблицу).
Для создания сетки с помощью CSS Grid вы указываете количество строк и столбцов, а также ширину и высоту каждого из них.
Если бы эта фотография липких заметок была CSS Grid, она имела бы три колонки в ширину и три строки в высоту.
Фракционные единицы (fr
)
Для определения размера строк и столбцов можно использовать самые разные единицы измерения, но наиболее универсальной и полезной является фракционная единица, fr
.
Фракционная единица равна одному столбцу или строке из общего числа столбцов или строк. В приведённой выше сетке 3x3 1fr
равен одной трети или 33,3%. В сетке из четырёх столбцов она будет равна одной четвёртой, или 25%. И так далее.
Создание CSS Grid
Представим, что у нас есть элемент .grid-3x3
, внутри которого вложено девять элементов.
<div class="grid-3x3">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
Мы хотим, чтобы этот HTML выглядел как расположение стикеров 3x3 на картинке в начале статьи.
Для начала мы определим свойство display
для класса .grid-3x3
со значением grid
.
.grid-3x3 {
display: grid;
}
Затем можно определить количество столбцов grid-template-columns
и строк grid-template-rows
шаблона сетки в макете.
Для каждого столбца и строки необходимо указать ширину или высоту. Поскольку нужно, чтобы все они были одинакового размера, будем использовать для значения одну фракционную единицу, 1fr
.
.grid-3x3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
}
Теперь у нас есть сетка 3x3 из одинаковых по размеру элементов. Вот демонстрация.
Функция repeat()
Определять каждый столбец и строку вручную довольно утомительно, особенно для больших макетов.
Функция CSS repeat()
(да, у CSS есть функции, это настоящий язык программирования) может использоваться для определения повторяющегося количества строк или столбцов и указания одинаковой ширины или высоты для каждого из них.
В качестве аргументов передайте количество повторов значения и значение для повтора.
.grid-3x3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
}
Вот обновлённая демонстрация.
Добавление gap
Вероятно, далеко не всегда нужно располагать элементы сетки вплотную друг к другу.
Можно задать объем пространства между каждым элементом сетки с помощью свойства gap
.
.grid-3x3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 1rem;
}
Если хотите задать пространство между столбцами и строками отдельно (или задать только одно или другое), можно использовать более конкретные свойства column-gap
и row-gap
.
.grid-3x3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
column-gap: 1rem;
row-gap: 2rem;
}
Вот демонстрация макета Grid с gap
.
Варьирующиеся размеры
В нашем макете Grid все элементы имеют одинаковый размер.
Но что, если нужно, чтобы средняя колонка была в два раза больше левой и правой?
Для этого можно вернуться к ручному определению размера каждого столбца и задать для среднего столбца значение 2fr
, две фракционные единицы, вместо одной.
.grid-3x3 {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: repeat(3, 1fr);
gap: 1rem;
}
Вот демонстрация столбцов произвольного размера.
Создание универсальной системы
Завтра мы рассмотрим, как использовать CSS Grid для создания универсальной Grid системы для ваших проектов.