Flexbox
Внутри flex-контейнера будут автоматически создаватся flex-потомки. Если явно им не задавать фикс. высоту, а у родителя будет свободное пространство по вертикали, то flex-потомки будут растягиваться по вертикали.
- flex — шириной 100% (как блочный элемент)
- inline-flex — ширина по котенту (как inline-block)
flex-direction

flex-wrap
По ум* не переносятся (nowrap). Если элементы не помещаются, то они всё-равно будут в одну строку, у них будет уменьшаться ширина, даже если её размер был задан. Для column не имеет смысла.

flex-flow
Краткая запись flex-direction | flex-wrap;
justify-content
РАСПРЕДЕНИЕ флекс-элементов вдоль ФЛЕКС-оси Актуально, при наличии свободного пространства вдоль ФЛЕКС-оси

align-items
ВЫРАВНИВАНИЕ флекс-элементов по ПОПЕРЕЧНОЙ ЛИНИИ (противоположной flex-оси). Актуально, при наличии свободного пространства вдоль поперечной оси, либо когда высота флекс-элементов разная

align-content
ВЫРАВНИВАНИЕ РЯДОВ флекс-потомков вдоль поперечной оси. Актуально, при наличии нескольких рядов flex-потомков (должно стоять свойство flex-wrap: wrap ) и наличии свободного пространства по попечерной оси флекс контейнера. Не имеет смысла при flex-wrap: nowrap;

Flex-потомок
Ширина, высота, внутренние отступы и рамки для флекс-контейнеров и флекс-элементов работают как обычно: общий размер элементов складывается из этих компонентов. Это поведение так же можно менять с помощью свойства box-sizing.
Есть и несколько важных отличий:
- Флекс-элементы, в отличие от блочных элементов, не растягиваются на всю ширину контейнера по умолчанию;
- На флекс-элементы не действует свойство float.
margin и флекс-элементы
- внешние отступы не схлопываются, ни по горизонтали, ни по вертикали;
- внешние отступы не выпадают, ни из флекс-контейнера, ни из флекс-элементов;
- значение margin: auto получило премию журнала Форбс в номинации «Самое влиятельное значение CSS-свойства внутри флекс-контейнера». При значении auto свойство justify-content, align-items и align-self ломается.
- При row, если задать флекс-потомку margin-left: auto, то он прижмется к правому краю контейнера.
- При column, если задать флекс-потомку margin-top: auto, то он прижмется ко дну контейнера.
Все свойства, которые рассмотрены далее придумали для того, чтобы не задавать фиксированные размеры флекс-элементам, а чтобы они адаптировались автоматически.
align-self
Свойство для flex-потомка. ВЫРАВНИВАНИЕ отдельного флекс-элемента. Переопределяет align-items

order
Свойство для flex-потомка. ПОРЯДКОВЫЙ НОМЕР флекс-элементов Чем меньше значение order, тем "первее" элемент. Можно использовать для "перестронии" сетки страницы.

flex-basic
Базисный размер элемента вдоль ФЛЕКС-ОСИ. При row базис переопределяет ширину, при column — высоту, поэтому может быть как высотой, так и шириной соответственно.

auto — ширина по контенту, 100px — макс. ширина будет 100px, если не переопределен flex-grow
flex-grow
РАСТЯЖЕНИЕ флекс-потомка на свободное пространство внутри флекс-контейнера.

flex-shrink
УЖИМАНИЕ флекс-потомка при уменьшении ширины флекс-контейнера. РАБОТАЕТ ТОЛЬКО с flex-wrap: nowrap .
Свойство flex-shrink принимает неотрицательные числовые значения, его значение по умолчанию 1.

Краткая запись
В некоторых браузерах неполные или особенные значения свойства flex интерпретируются с ошибками. Поэтому лучше задавать все три компоненты в значении этого свойства.
justify-content
CSS свойство justify-content определяет, как браузер распределяет пространство между и вокруг элементов контента вдоль главной оси flex контейнера, или вдоль строчной оси grid контейнера.
Интерактивный пример ниже демонстрирует некоторые значения, используя Grid размещение.
Интерактивный пример
Выравнивание выполняется после того, как применяются длины и автоматические поля, что означает, что если во Flexbox разметке есть хотя бы один flex-элемент, с flex-grow отличным от 0 , эффект не будет применён, потому что не останется свободного места.
Синтаксис
Значения
Элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси.
Элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси.
Элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси, в зависимости от её направления (flex-direction). Для элементов, которые не являются дочерними элементами flex контейнера, это значение обрабатывается как start .
Элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси, в зависимости от её направления (flex-direction). Для элементов, которые не являются дочерними элементами flex контейнера, это значение обрабатывается как end .
Элементы располагаются друг за другом в центре контейнера по главной оси.
Элементы располагаются друг за другом и прижимаются к левому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как start .
Элементы располагаются друг за другом и прижимаются к правому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как start .
Элементы располагаются на своих обычных позициях, так как будто свойство justify-content не задано. Этот параметр ведёт себя как stretch в grid и flex контейнерах.
baseline first baseline last baseline
Specifies participation in first- or last-baseline alignment: aligns the alignment baseline of the box’s first or last baseline set with the corresponding baseline in the shared first or last baseline set of all the boxes in its baseline-sharing group. The fallback alignment for first baseline is start , the one for last baseline is end .
Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Первый элемент прижат к началу контейнера по главной оси, а последний — к концу.
Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Пустые пространства перед первым элементом и после последнего элемента равны половине расстояния между парами соседних элементов.
Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны расстояниям от начала контейнера до первого элемента и от последнего элемента до конца контейнера.
If the combined size of the items is less than the size of the alignment container, any auto -sized items have their size increased equally (not proportionally), while still respecting the constraints imposed by max-height / max-width (or equivalent functionality), so that the combined size exactly fills the alignment container along the main axis.
Примечание: stretch не поддерживается гибкими контейнерами (flexbox).
If the size of the item overflows the alignment container, the item is instead aligned as if the alignment mode were start .
Regardless of the relative sizes of the item and alignment container, the given alignment value is honored.
How to Right-Align a Flex Item
Have you ever wondered how you can right align a flex item? If so, this snippet is for you.
Before the introduction of Flexbox, aligning elements seemed like the most difficult problem in web design. Now, alignment has become quite simple, since Flexbox allows us to align items and groups of items properly.
In this snippet, we’re interested in the case, when we need to align a flex item to the right. For that, you can use the CSS justify-content property with the “space-between” value on the flex container. Let’s see how this can be done, and then, we’ll also discuss some examples with other properties.
Метод позиционирования элементов Flexbox
Спецификация Flexbox (Flexible Box Layout Module) – это метод позиционирования элементов в горизонтальном или вертикальном направлениях.
Flexbox объединяет в себе набор свойств для родительского flex-контейнера и для дочерних flex-элементов.
Чтобы элемент стал flex-контейнером, ему надо присвоить display: flex; или display: inline-flex; (блочный или строчный соответственно).
Внутри flex-контейнера создаются две оси: главная и перпендикулярная ей поперечная. Сначала flex-элементы выстраиваются по главной оси, а потом уже по поперечной.
Свойства flex-контейнера
- row – слева направо (по умолчанию);
- row-reverse – справа налево;
- column – сверху вниз;
- column-reverse – снизу вверх.
- nowrap – flex-элементы выстраиваются в одну строку, если не помещаются в контейнер, то выходят за его границы (по умолчанию);
- wrap – flex-элементы выстраиваются в несколько строк, если не помещаются в одну;
- wrap-reverse – похоже на wrap, но перенос происходит снизу вверх.
- flex-start – flex-элементы прижимаются к началу главной оси (по умолчанию);
- flex-end – flex-элементы прижимаются к концу главной оси;
- center – flex-элементы выравниваются по центру главной оси;
- space-between – flex-элементы распределяются вдоль главной оси, при этом первый элемент прижат к началу оси, а последний — к концу;
- space-around – flex-элементы распределяются вдоль главной оси, при этом свободное пространство делится поровну между элементами. Но стоит отметить, что промежутки суммируются и расстояние между элементами в два раза больше, чем расстояние между краями контейнера и крайними элементами.
- flex-start – flex-элементы прижимаются к началу поперечной оси (по умолчанию);
- flex-end – flex-элементы прижимаются к концу поперечной оси;
- center – flex-элементы выравниваются по центру поперечной оси;
- baseline – flex-элементы выравниваются по своей базовой линии. Базовая линия – это воображаемая линия, проходящая по нижнему краю символов без учёта свисаний, таких как у букв «д», «р», «ц», «щ»;
- stretch – flex-элементы растягиваются, занимая все доступное место по поперечной оси. Но если для элементов задана высота, то stretch будет проигнорирован.
- flex-start – строки flex-элементов прижимаются к началу поперечной оси (по умолчанию);
- flex-end – строки flex-элементов прижимаются к концу поперечной оси;
- center – fстроки flex-элементов выравниваются по центру поперечной оси;
- space-between – строки flex-элементов распределяются вдоль поперечной оси, при этом первая строка прижата к началу оси, а последняя — к концу;
- space-around – строки flex-элементов распределяются вдоль поперечной оси, при этом свободное пространство делится поровну между строками. Но стоит отметить, что промежутки суммируются и расстояние между строками в два раза больше, чем расстояние между краями контейнера и крайними строками.
- stretch – строки flex-элементов растягиваются, занимая все доступное место по поперечной оси. Но если для элементов задана высота, то stretch будет проигнорирован.
Это свойство не работает для однострочного flex-контейнера.
row-gap Определяет промежутки между строками flex-элементов, т.е. вертикальные промежутки. Задается в px, %, em и остальных единицах измерения.
Например: row-gap: 24px; column-gap Определяет промежутки между столбцами flex-элементов, т.е. горизонтальные промежутки. Задается в px, %, em и остальных единицах измерения.
Например: column-gap: 16px; gap Определяет промежутки между flex-элементами по вертикали и горизонтали. Задается в px, %, em и остальных единицах измерения. Это короткая запись, объединяющая свойства row-gap и column-gap, поэтому может иметь одно или два значения.
Например: gap: 24px 16px;
Cвойства row-gap, column-gap, gap появились в 2021 году. Поддержка браузерами.
Свойства flex-элементов
В спецификации CSS Flexible Box Layout Module Level 1 приведена наглядная диаграмма для трех flex-элементов со значениями flex-grow 1, 1, 2 соответственно:
- flex-start – flex-элемент прижимается к началу поперечной оси (по умолчанию);
- flex-end – flex-элемент прижимается к концу поперечной оси;
- center – flex-элемент выравнивается по центру поперечной оси;
- baseline – flex-элемент выравнивается по базовой линии;
- stretch – flex-элементы растягивается, занимая все доступное место по поперечной оси. Но если задана высота, то stretch будет проигнорирован.
Особенности применения Flexbox на практике
1. Выравнивание по правому краю
Чтобы прижать заголовок сайта влево, а номер телефона вправо, то заголовку надо задать flex: 1.