Статьи

Как упорядочить и выровнять элементы в сетке

Свойства порядка и выравнивания в модуле CSS Grid Layout

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

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

Если вы хотите следовать демонстрациям в этой статье, я рекомендую вам использовать последнюю версию Firefox (версия 52 на момент написания этой статьи) или Chrome (версия 57 на данный момент) . Оба были выпущены с поддержкой Grid Layout по умолчанию.

Как работает свойство заказа в сетке

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

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

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

Давайте посмотрим на пример.

Это наша разметка:

 <div class="container"> <div class="item a">A</div> <div class="item b">B</div> <div class="item c">C</div> <div class="item d">D</div> <div class="item e">E</div> <div class="item f">F</div> <div class="item g">G</div> <div class="item h">H</div> <div class="item i">I</div> <div class="item j">J</div> </div> 

Вот CSS для размещения элементов сетки:

 .c { grid-row-start: 1; grid-row-end: 2; } .e { grid-row-start: 1; grid-row-end: 3; } .b, .j { order: 2; } .a, .i { order: 3; } 

CSS Grid Layout Order Property Demo

Если вы помните шаги из учебника по алгоритму автоматического размещения , вы знаете, что алгоритм разместит элементы с явно заданной позицией строки перед размещением элементов без определенной позиции. Таким образом, даже если элемент D без определенной строки или позиции столбца находится перед элементом E в фактическом документе, он все равно будет помещен после элемента E (который имеет определенную позицию строки: grid-row-start: 1 и grid-row-end: 3 ).

Среди предметов, у которых нет определенной позиции, предметы с наименьшим значением order будут размещены первыми. Вот почему элементы D, F, G и H размещаются перед элементами A и B. B и J имеют одинаковое значение order , поэтому они располагаются в том же порядке, в котором они появляются в документе. Обратите внимание, что и B, и J по-прежнему размещаются до размещения A и I, поскольку они имеют более низкое значение order .

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

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

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

Использование justify-self при выравнивании содержимого вдоль оси строки в макете сетки

Вы можете управлять выравниванием различных элементов сетки вдоль оси строки, используя justify-self и justify-items .

Свойство justify-self выравнивает содержимое одного элемента сетки, в то время как justify-items выравнивает все элементы сетки.

Свойство justify-self может иметь четыре возможных значения:

  • end выравнивает содержимое справа от области сетки
  • start выравнивает содержимое слева от области сетки
  • center выравнивает содержимое по центру области сетки
  • stretch заполняет всю ширину области сетки

Значением по умолчанию для justify-self является stretch .

Свойство justify-items также выравнивает элементы по оси строки и принимает те же четыре значения, что и свойство justify-self . Значение по умолчанию также stretch .

Вот демонстрация, чтобы проиллюстрировать, как работает justify-self :

Выравнивание содержимого по оси столбцов в сетке

Использование align-self для выравнивания содержимого макета сетки по оси столбца

Вы также можете выровнять содержимое вдоль оси столбца, используя align-self для отдельных элементов сетки и align-items для всех элементов сетки.

Как и два предыдущих свойства, align-items align-self и align-items могут иметь четыре возможных значения: start , end , center и stretch .

start и end значения выравнивают содержимое по верху и низу области сетки соответственно. Значение center выравнивает содержимое по центру области сетки и justify ширине всю область сетки.

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

Ниже align-self для выравнивания содержимого по оси столбца в действии.

Выравнивание всей сетки

Использование пространственного и равномерного пространства для выравнивания всей сетки в модуле CSS Grid Layout

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

Как и в предыдущих свойствах, выравнивание по оси строк может быть достигнуто с помощью свойства justify-content а выравнивание по оси столбцов — с помощью свойства align-content .

Оба эти свойства применяются к сетке контейнера, и, помимо обычных значений start , end , center и stretch , они также принимают значения « space-around , « space-between и « space-evenly качестве допустимых значений.

  • space-around размещает равное количество пространства между каждой дорожкой сетки и половину этого пространства между внешними краями сетки и ее контейнером
  • space-between помещает равное количество пространства между каждой дорожкой сетки и не оставляет пространства между внешними краями сетки и ее контейнером
  • space-evenly размещает равное количество пространства между каждой дорожкой сетки, а также внешними краями сетки и ее контейнера.

Значением по умолчанию для justify-content и align-content является start .

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

 .container { justify-content: space-around; align-content: space-evenly; } 

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

Вывод

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

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