В чем разница между align-items и align-content в Grid Layout?

Я прочитал Полное руководство по сетке, но все еще не понимаю с различиями между двумя наборами свойств контейнера, а именно «justify/align-items» и «justify/align-content».

Мое замешательство связано с утверждением автора о том, что набор "-content" существует потому, что

Иногда общий размер вашей сетки может быть меньше размера ее контейнера сетки.

Я думаю, что это применимо к обоим, а не только к набору "-content".

Может кто-нибудь помочь объяснить это? Желательно использовать графические иллюстрации в качестве примеров.


person Jinghui Niu    schedule 22.11.2016    source источник


Ответы (1)


Начнем с уточнения терминологии:

Сетка Контейнер

Контейнер сетки - это общий контейнер для сетки и элементов сетки. Он устанавливает контекст форматирования сетки (в отличие от другого контекста форматирования, такого как гибкий или блочный).

Сетка

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

Элементы сетки

Элементы сетки - это блоки в контейнере сетки, которые представляют текущий контент (т. Е. Контент, который не позиционируется абсолютно).

Вот иллюстрация из W3C:

введите описание изображения здесь

Свойства justify-content и align-content выравнивают сетку.

Свойства justify-self, justify-items, align-self и align-items выравнивают элементы сетки.


Что касается проблемы, описанной в вашем вопросе:

Мое замешательство связано с утверждением автора о том, что набор "-content" существует, потому что: "Иногда общий размер вашей сетки может быть меньше, чем размер ее контейнера сетки"

На рисунке видно, что сетка меньше контейнера сетки.

В результате остается пространство, и контейнер может распределить это пространство по вертикальному центру (align-content: center) и выравниванию по правому краю (justify-content: end) сетки.

Дополнительное пространство также может позволить разделить сетку такими значениями, как space-around, space-between и space-evenly.

Однако, если размер сетки равен размеру контейнера, свободного места не будет, и align-content / justify-content не окажут никакого влияния.


Вот еще из спецификации:

10.3. Выравнивание по осям строк: свойства justify-self и justify-items

Элементы сетки можно выровнять во встроенном измерении с помощью свойства justify-self элемента сетки или свойства justify-items контейнера сетки.

10.4. Выравнивание оси столбца: свойства align-self и align-items

Элементы сетки также можно выровнять по измерению блока (перпендикулярно встроенному измерению) с помощью свойства align-self элемента сетки или свойства align-items контейнера сетки.

10.5. Выравнивание сетки: свойства justify-content и align-content

Если внешние края сетки не соответствуют краям содержимого контейнера сетки (например, если нет столбцов гибкого размера), дорожки сетки выравниваются внутри поля содержимого в соответствии со свойствами justify-content и align-content. на сетке контейнера.

(курсив добавлен)

person Michael Benjamin    schedule 11.12.2016
comment
Привет. Дошли до этого ответа. Могу я задать вопрос по этому поводу? Итак, когда вы используете элементы justify / align-items и self, меняете ли вы содержимое внутри элемента сетки? Например, как данные будут отображаться внутри элемента сетки? Я все еще в замешательстве @@ - person Tree Nguyen; 25.05.2017
comment
@TreeNguyen, с justify-items / align-items (на контейнере) и justify-self / align-self (на элементах (переопределяя настройку в контейнере)), вы выравниваете элемент сетки внутри контейнера сетки. Чтобы выровнять содержимое внутри элемента сетки, вы можете сделать каждый элемент гибким контейнером и применить к содержимому свойства гибкости. - person Michael Benjamin; 25.05.2017
comment
С помощью align-content и justify-content вы выравниваете строки и столбцы сетки в дополнительном пространстве контейнера, если таковое имеется. Вот демонстрация, с которой вы можете поиграть: jsfiddle.net/k5ebsac2 - person Michael Benjamin; 25.05.2017