Структура и разметка сайта

Grid-лейаут

31min

Свойство CSS Grid позволяет сделать сетку, состоящую из строк и колонок. Grid дает возможность делать сложные лейауты и легко управлять положением элементов внутри сетки.

Grid дает возможность задавать следующие параметры:

  • Количество колонок и строк в родительском элементе, для которого задано это свойство.
  • Направление расположения ячеек по колонкам и по строкам.
  • Выравнивание и распределение во всех ячейках грида.
  • Расстояния между колонками и строками.
  • Размеры колонок и строк в единицах измерения fr (фракции).
  • Минимальные и максимальные значения в размерах колонок и строк.
  • Выравнивание и распределение в конкретной ячейки грида.
  • Позиционирование конкретной ячейки грида, а также ее размеры.

В чем разница между Flex и Grid

Flex позволяет автоматически расставить дочерние элементы в родительском блоке в одном направлении — по горизонтали или по вертикали.

Document image


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

Document image


Когда лучше использовать Flex

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

Document image


Когда лучше использовать Grid

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

Document image


Вложенность в Grid

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

Document image


Как установить блоку свойство Grid

На вкладке Дизайн правой панели в разделе Авто-лейаут выберите Отображение Grid, кликнув на соответствующую иконку.

Document image


Далее задайте нужное количество колонок и строк в гриде.

Document image


Настройки Grid

Заполнение (Auto flow)

Задает направление размещения ячеек в гриде —  по строкам или по колонкам:

Document image

  • По строкам (Row) — ячейки размещаются горизонтально по строкам слева-направо (буквой Z):
Document image

  • По колонкам (Column) — ячейки размещаются вертикально по колонкам сверху-вниз (буквой И):
Document image


Распределение (Justify) и Выравнивание (Align)

Задают выравнивание содержимого ячеек по горизонтали и вертикали.

Document image


Параметры Распределения (Justify):

Document image

  • По левому краю
  • По центру
  • По правому краю
  • Растянуть
  • По базовой линии

Параметры Выравнивания (Align):

Document image

  • По верхнему краю
  • По центру
  • По нижнему краю
  • Растянуть
  • По базовой линии

Дополнительные параметры выравнивания (More alignment options)

Задают выравнивание колонок и строк в сетке.

Document image

  • По левому краю / По верхней границе
  • По центру
  • По правому краю / По правой границе
  • Растянуть
  • Распределить равномерно от начала до конца (space-between)
  • Распределить равномерно, с пространством вокруг всех дочерних элементов (space-around)
  • Распределить равномерно, с пространством вокруг всех дочерних элементов и краев контейнера (space evenly)

Расстояние между ячейками (Gap)

Задает расстояние между строками и между колонками грида.

Document image


Расстояние можно установить в следующих единицах измерения: px, em, rem, %, vw, vh.

Dense

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

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

Document image


Для включения опции Dense кликните на соответствующую иконку:

Document image


Настройка размеров ячеек в гриде

Чтобы открыть режим редактирования размеров ячеек, нажмите кнопку Редактировать сетку (Edit grid).

Document image


В открывшейся панели Настройки сетки (Grid Settins) вы можете задать размеры колонок и строк. 

Document image


Для установки размеров можно использовать не только обычные единицы измерения (px, %, em и т.д.), но и специальные единицы измерения для гридов — fraction (fr)

Fractions (Фракции)

Fraction (fr) — относительная единица измерения, которая показывает, какую часть (долю) сетки занимает ячейка по ширине или по высоте. Когда вы задаете размер в fr, то система вычисляет долю элемента в сетке в зависимости от количества и размеров других элементов в строке или в столбце.

Например, если у вас есть 4 колонки и для каждой из них задана ширина 1 fr, то они занимают по одной равной доле грида.  

Document image




Document image




Если для одной колонки задать ширину 2 fr, то она будет в два раза шире всех остальных.

Document image


Значения во фракциях могут быть не только целыми числами, но и десятичными дробями. Например, можно задать значение 0.25 fr. 

Document image


При вводе значения можно увеличивать или уменьшать его с шагом 0.25 с помощью стрелок вверх и вниз на клавиатуре.

Чем фракции отличаются от процентов?

Если задать ширину колонок в процентах, то при удалении или добавлении колонок придется менять значения ширины для каждой из них. Например, если было 4 колонки по 25%, а потом одну удалили, то ширина колонок не изменится и останется пустое пространство. 

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

Document image


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

Минимальный и максимальный размер и Авто-заполнение

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

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

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

Document image


Затем в открывшейся панели перейдите во вкладку Мин./Макс. и задайте нужные значения.

Document image


Параметры:

  • Мин. (Min) — минимальный размер, который будет занимать ячейка.
  • Макс. (Max) — максимальный размер, который будет занимать ячейка. 
  • Авто-заполнение (Auto-fit) — опция, которая позволяет вместить в строку или в столбец наибольшее количество ячеек с размерами в диапазоне Мин.-Макс.

Для корректной работы Авто-заполнения нужно установить в настройках сетки только 1 колонку.

Как это работает на практике:

Например, зададим для колонки: минимальный размер 200px, максимальный размер 1 fr и авто-заполнение.

1. Система размещает в строке столько ячеек с шириной 200px, сколько получается. 

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

Таким образом, на широком экране в строке будет помещаться 4 ячейки по 200px. При уменьшении экрана, когда 4 ячейки перестанут помещаться в строке, сетка перестроится на 3 колонки, а потом и на 2 колонки. На самых маленьких экранах ячейки выстроятся в одну колонку. При любой ширине экрана ячейки будут равномерно растягиваться на всю ширину строки.

Document image


Настройки ячейки сетки (Grid Cell)

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

Чтобы настроить параметры ячейки сетки, выберите нужную ячейку внутри грида. На правой панели появятся настройки Ячейка сетки (Grid Cell).

Document image


Span

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

Document image


Параметры:

  • Колонки (Column span)  — сколько колонок должна занимать ячейка
  • Строки (Row span) — сколько строк должна занимать ячейка

Например, для ячейки 1 зададим параметры: Колонки — 2 и Строки — 2. А для ячейки 6: Колонки — 1 и Строки — 2.

Document image




Document image




Вот так будет выглядеть сетка в этом случае:

Document image


Распределение (Justify) и Выравнивание (Align) ячейки

Для каждой ячейки можно отдельно настроить распределение и выравнивание:

  • По левому краю
  • По центру
  • По правому краю
  • Растянуть
  • По базовой линии
Document image


Например, если ячейке 5 задать ширину 50% и распределение по центру, то она будет расположена посередине ячейки.

Document image


Настройка ячейки Вручную (Manual)

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

Document image


Как изменить расположение ячейки в сетке

Если нужно поменять место ячейки в сетке, вы можете переставить ее в дереве html — передвинув ее в слоях или на холсте. Например, можно переставить ячейку 2 после ячейки 3 — их расположение в слоях изменится. 

Document image


Этот способ не очень хороший, т.к. меняется структура документа.

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

Чтобы перейти в режим настройки Вручную, переключите соответствующую вкладку в настройках ячейки.

Document image


В этом режиме есть следующие параметры:

  • Column Start/End — начало и конец расположения ячейки по колонкам
  • Row Start/End — начало и конец расположения ячейки по строкам
Document image


Чтобы разобраться, как работают эти параметры, рассмотрим понятие грид-линий.

Грид-линии

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

Document image


Грид-линий всегда на одну больше, чем колонок или строк. В данном примере есть три колонки, сформированные четырьмя вертикальными грид-линиями, и две строки, сформированные тремя горизонтальными грид-линиями.

При настройке положения ячейки Вручную нужно указать:

  • от какой и до какой грид-линии ячейка располагается по колонкам — Column Start/End
  • от какой и до какой грид-линии ячейка располагается по строкам — Row Start/End

Пример 1. Для ячейки 2 зададим параметры: Column Start/End — 1 и 2, Row Start/End — 1 и 2.

Document image


Ячейка 2 переместится на место ячейки 1. Однако в слоях она всё так же будет идти после ячейки 1.

Document image


Пример 2. Расположим ячейку 9 после ячейки 2 на ширину двух колонок. Для этого ей нужно задать следующие параметры: Column Start/End — 2 и 4, Row Start/End — 1 и 2.

Document image


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

Пример 3. Зададим ячейкам 2 и 9 одинаковые параметры: Column Start/End — 1 и 2, Row Start/End — 1 и 2. Чтобы они не перекрывали друг друга, установим им обеим ширину 50%, а ячейке 9 — распределение по правому краю. Тогда обе эти ячейки будут располагаться в первой ячейке грида.

Document image


Преимущества ручного позиционирования в гриде по сравнению с абсолютным позиционированием элементов (position absolute):

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