Рассмотрим основную ось и поперечную ось гибкого контейнера:
Источник: W3C
Для выравнивания гибких элементов вдоль главной оси есть одно свойство:
Для выравнивания изгибаемых элементов вдоль поперечной оси есть три свойства:
На изображении выше основная ось горизонтальная, а поперечная ось вертикальная. Это направления по умолчанию для гибкого контейнера.
Тем не менее, эти направления могут быть легко взаимозаменяемы с flex-direction
собственностью.
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(Ось креста всегда перпендикулярна главной оси.)
Моя точка зрения при описании работы осей заключается в том, что в обоих направлениях нет ничего особенного. Главная ось, поперечная ось, они одинаковы по важности и flex-direction
позволяют легко переключаться назад и вперед.
Так почему же поперечная ось получает два дополнительных свойства выравнивания?
Почему align-content
и align-items
объединены в одно свойство для главной оси?
Почему главная ось не получает justify-self
свойства?
Сценарии, где эти свойства будут полезны:
размещение гибкого элемента в углу гибкого контейнера
#box3 { align-self: flex-end; justify-self: flex-end; }
сделать группу из flex-элементов align-right (
justify-content: flex-end
), но первый элемент выровнять по левому краю (justify-self: flex-start
)Рассмотрим заголовок раздела с группой элементов навигации и логотипом. С
justify-self
логотипом можно было выровнять влево, в то время как навигационные элементы остаются далеко вправо, и все это плавно регулируется («сгибается») к разным размерам экрана.в ряду из трех гибких элементов прикрепите средний элемент к центру контейнера (
justify-content: center
) и выровняйте соседние элементы по краям контейнера (justify-self: flex-start
иjustify-self: flex-end
).Обратите внимание, что значения
space-around
и свойствоspace-between
onjustify-content
не будут держать средний элемент по центру контейнера, если смежные элементы имеют разную ширину.
На момент написания этой статьи не упоминалось justify-self
ни justify-items
о спецификации Flexbox .
Однако в модуле выравнивания блоков CSS , который является незаконченным предложением W3C по созданию общего набора свойств выравнивания для использования во всех блочных моделях, есть следующее:
Источник: W3C
Вы заметите это justify-self
и justify-items
рассматриваются ... но не для flexbox .
В заключение я повторю главный вопрос:
Почему отсутствуют свойства "justify-items" и "justify-self"?
justify-content: flex-start
, поэтому в начале пункты переполнены, как | abcd |. Что бы вы ожидали от него, если вы поместите justify-self: [anything]
туда элемент «b»?)
justify-self
работали с флексом? Я бы сказал, не так иначе, как auto
поля уже работают на гибких элементах. Во втором примере justify-self: flex-end
пункт d переместит его в дальний край. Это само по себе было бы отличной особенностью, которую auto
уже могут делать поля. Я разместил ответ с демонстрацией.
justify-content
и justify-self
указан, так, чтобы случаи с конфликтами (как сценарии, о которых я спрашивал) четко и разумно определены. Как я уже отмечал в своем ответе, {justify|align}-self
речь идет{justify|align}-self
о выравнивании элементов в большем поле, размер которого не зависит от значения - и на главной оси такого блока нет, чтобы можно было выровнять гибкий элемент.
justify-self
и как будете justify-content
взаимодействовать в тех случаях, когда они конфликтуют (например, сценарии, которые я изложил). Автомобильные поля просто не взаимодействуют justify-content
вообще - они крадут все упаковочное пространство, прежде чем justify-content
получить возможность его использовать. Таким образом, авто наценки не очень хороший аналог того, как это будет работать.
justify-self
работать на гибкий элемент? Предположим, у вас есть элементы a, b, c, d с дополнительным пространством для распределения вокруг них, а контейнер flex имеет ихjustify-content: space-between
, поэтому они заканчиваются как | abcd |. Что бы это значило добавить, например,justify-self: center
или «justify-self: flex-end» просто к пункту «b» там? Где вы ожидаете, что это пойдет? (Я вижу некоторые демонстрации в одном из ответов здесь, но я не вижу четкого способа, как это будет работать в целом.)