Обычный порядок расположения элементов определяется потоком документа и их типом (блочный или строчный). В модели Flexbox направление расположения элементов определяется направляющими осями контейнера, вдоль которых выстраиваются элементы.
Flex-контейнер (дальше просто контейнер) это родитель группы элементов, которым необходимо изменить порядок расположения. Именно свойства контейнера контролируют направление осей, многострочность и позиционирование элементов в строке.
display: flex | inline-flex
Создаёт flex-контейнер, блочный или строчно-блочный, в
зависимости от заданного значения, и устанавливает
flex-контекст для всех детей (не потомков) контейнера,
превращая их во flex-элементы.
Управляет позиционированием элементов на главной оси, от
main-start
до main-end.
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly
У этого свойства есть и другие значения, но они не поддерживаются
многими браузерами или работают нестабильно между разными
браузерами.
Самые часто используемые значения, в том числе значение по
умолчанию, приведены в примере. Они включают в себя сдвиг контента
вправо (flex-end), центрирование (center) и равномерное
распределение пространства между элементами (space-between).
Управляет расположением элементов вдоль поперечной оси. Это аналог justify-content для главной оси.
align-items: stretch | flex-start | flex-end | center |
baseline
У этого свойства есть и другие значения, но они не поддерживаются
многими браузерами или работают нестабильно между разными
браузерами.
Наверное самое частое применение - это вертикальное центрирование
элементов в строке, особенно если элементы разной высоты. Добавим к
нашей разметке шапку с логотипом и вложим меню в шапку так, чтобы
логотип и меню были соседями.
Flexbox это система расположения элементов в одном определённом направлении - горизонтально или вертикально. Свойство flex-direction устанавливает направление главной оси, определяя направление элементов в контейнере.
По умолчанию для flex-direction установлено значение row , поэтому элементы верхнего меню начинают выстраиваться слева направо. Для нижнего меню задано значение row-reverse, главная ось развернулась на 180 градусов и элементы выстраиваются справа налево.
По умолчанию элементы располагаются в том порядке, в котором они
указаны в HTML-файле. Используя свойство order можно
визуально изменить порядок расположения элементов вдоль главной оси.
При этом, в HTML-коде ничего не поменяется.
Это свойство применяется не часто, из-за того, что нарушает связь
между визуальным порядком элементов и тем, как их видит браузер и
ассистивные технологии.
По умолчанию создаётся однострочный контейнер и элементы размещаются на одной строке, сжимаясь по необходимости. Свойство flex-wrap позвоялет превратить однострочный контейнер в многострочный. Элементы будут добавляться в строку до тех пор, пока в ней будет место, после чего будет автоматически создана еще одна строка.
flex-wrap: nowrap | wrap | wrap-reverse
Далее используем flex-свойство контейнера gap, которое определяет
зазор между столбцами и строками сетки. Пусть в нашем предполагаемом
макете это 20px.
Свойство gap комбинирует в себе значение свойств row-gap и
column-gap , которые позволяют отдельно указать размеры
зазоров между строками и столбцами сетки. Используйте gap когда
зазоры одинаковые, в противном случае подойдут row-gap и
column-gap.
Управляет выравниванием всех строк многострочного контейнера вдоль поперечной оси, если есть свободное место. Аналогично тому, как justify-content выравнивает элементы в каждой строке. Это свойство не действует, когда есть только одна строка элементов или в контейнере нет свободного места по вертикали (явно не задана высота больше чем контент).
align-content: flex-start | flex-end | center | space-between |
space-around | space-evenly | stretch
Значения space-between, space-around и space-evenly работают аналогично свойству justify-content, только для строк, и используются редко.
Определяет начальный размер элемента перед распределением свободного пространства. Значением может быть любая валидная величина: пиксели, проценты, rem и т. д. Для flex-элементов это замена свойства width , но с некоторыми особенностями. В примерах этого занятия для всех flex-элементов задавался именно flex-basis , а не width .
flex-basis: auto | значение
Определяет способность элемента, по необходимости, занимать больше места (расти), чем его начальный размер. Значение задаётся как пропорция (доля) свободного места в контейнере.
flex-grow: доля
По умолчанию у всех элементов установлено значение 0, то есть
элементы не пытаются занять дополнительное свободное место, даже
если такое есть. Отрицательные значения задавать нельзя.
Например, если у всех элементов установлено одинаковое значение этого свойства, то они займут равное количество места в контейнере. А вот если всем задать значение 1, а одному элементу 2, то он попытается занять в два раза больше места, чем любой другой элемент.
Определяет способность элемента по необходимости занимать меньше
места (сжиматься), чем его начальный размер. Значение задаётся как
пропорция (доля).
flex-shrink: доля
По умолчанию у всех элементов установлено значение 1, то есть
элементы будут сжиматься при необходимости. Отрицательные значения
задавать нельзя. Используется довольно редко.
Позволяет элементу изменить своё положение на поперечной оси,
переопределив для себя значение свойства align-items от
контейнера. Аналога для главной оси не существует, элемент может
сместить себя только на поперечной оси.
align-self: auto | flex-start | flex-end | center | baseline |
stretch
Вернёмся к примеру карточки с изображением и контентом. Для решения проблемы вертикального растягивания картинки мы использовали свойство align-items у контейнера. Свойство align-self позволяет решить эту проблему более точечно, переопределив значение align-items только для изображения.
Lorem, ipsum dolor.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.
Lorem, ipsum dolor.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.
Lorem, ipsum dolor.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.
Lorem, ipsum dolor.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.
Lorem, ipsum dolor.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Mollitia, quas.
Свойство position указывает тип метода позиционирования, используемого для элемента.
Существует пять различных значений позиции:
Затем элементы раздаются с помощью свойств "top", "bottom", "left" и "right". Однако эти свойства не будут работать, если только свойство position не задано первым. Они также работают по-разному в зависимости от значения положения.
absolute