Флекс-блоки

позволяют элементам размещаться динамически.

По умолчанию блочные элементы HTML распределяются на всю ширину страницы, втроенные элементы HTML располагаются внутри блочных элементов, рядом друг с другом. <p><span>первый встроенный элемент</span><span>второй встроенный элемент</span> блочный элемент</p>

первый встроенный элементвторой встроенный элемент блочный элемент

Элемент HTML обозначенный как флекс-контейнер позволяет управлять размещением встроенных элементов, называемых флекс-элементами. Флекс-контейнер занимает всю доступную ширину. Изначально флекс-элементы расположены горизонтально слева направо. Высота флекс-элементов выравнивается по высоте флекс-контейнера, независимо от занимаемого размера содержимого этих элементов, ширина по содержимому флекс-элементов. Линию вдоль которой выстраиваются флекс-элементы называют главной осью (изначально это горизонтальная линия), а перпендикулярно ей расположенную линию - поперечной (изначально это вертикальная линия). Если поменять оси местами, элементы начинут выстраиваться горизонтально.

display:flex
обозначает элемент как flex контейнер, при этом его дочерние элементы начинают выстраиваться друг за другом горизонтально, независимо от того, блочные они или строчные.
#flexTest{display:flex; border:2px black dashed;}
флекс элемет Aфлекс элемет Bфлекс элемет Cфлекс-контейнер
display:inline-flex
флекс-контейнер с поведением строчно-блочного контейнера, который расширяется по содержимому.

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

flex:
регулирует поведение флекс-элемента.
01 auto -элемент занимает столько места сколько ему требуется, сжимается при необходимости.
11 auto -элемент будет увеличиваться, займет остальное место, которое не требуется другим элементам.

flex - формат сокращенной записи трех свойств определяющих размер и поведение флекс-элемента.
flex: flex-basis flex-grow flex-shrink
Если не указать их значения, то значения по умолчанию будут:
flex-basis: 0%; flex-grow: 1; flex-shrink: 1;
flex:0% 11;

flex-basis

Определяет базовый размер флекс-элемента. Принимает любое значение приминимое к width. Изначально равно auto и браузер ищет значение свойства width для данного элемента, если оно не задано, ширина определяется по ширине контента. Если свойство flex-basis задано, то width будет проигнорировано.

flex-grow

Указывает флекс-элементу расширяться или не расширяться при доступности свободного места в флекс-контейнере. flex-grow:0 - флекс-элемент не расширяется больше значения flex-basis. flex-grow с значением больше 0 будет занимать доступное свободное место в флекс-блоке. flex-grow:2 займет в два раза больше места чем flex-grow:1

flex-shrink

Размер флекс элементов распределенный горизонтально может превысить размер флекс-контейнера. Данное значение указывает на возможность сжатия флекс-элемента. flex-shrink:0 - элемент не сжимается. flex-shrink с значением больше 0 будет зжиматься пока переполнение не будет устранено, элемент с значением 2 сожмется сильнее, чем флекс-элемент с флекс-значением 1. Если устанавливить поле между флекс-элементами, flex-shrink:1 обеспечит уменьшение флекс-элементов на величину этого поля. Если у обоих элементов будет установлено свойство flex-shrink:1, то каждый элемент сожмется на 50% от величины установленного поля (margin-left:2em; 2em/2=1em) Каждый флекс-элемент уменьшится на 1em;

Направление флекс-элементов

flex-direction:
определяет как должны выстраиваться флекс-элементы.
flex-direction:column
флекс элементы начинают выстраиваться вертикально.
flex-basis flex-grow flex-shrink начинают влиять на высоту, а не на ширину.
flex-direction:column-reverse
флекс элементы начинают выстраиваться вертикально в обратном порядке.
flex-direction:row
флекс элементы начинают выстраиваться горизонтально.
flex-direction:row-reverse
флекс элементы начинают выстраиваться горизонтально в обратном порядке.
justify-content:
управляет размещением флекс-элементов вдоль главной оси.
justify-content:space-between
флекс-элемент 1флекс-элемент 2флекс-элемент 3
justify-content:space-around
флекс-элемент 1флекс-элемент 2флекс-элемент 3
justify-content:center
флекс-элемент 1флекс-элемент 2флекс-элемент 3
justify-content:flex-start
флекс-элемент 1флекс-элемент 2флекс-элемент 3
justify-content:flex-end
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-items:
управляет размещением флекс-элементов вдоль поперечной оси.
align-items:flex-start
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-items:flex-end
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-items:center
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-items:stretch
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-items:baseline
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-self:
управляет размещением отдельного флекс-элемента вдоль поперечной оси, переопределяет align-items.
align-self:flex-end;
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-self:flex-start
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-self:center
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-self:stretch
флекс-элемент 1флекс-элемент 2флекс-элемент 3
align-self:baseline
флекс-элемент 1флекс-элемент 2флекс-элемент 3

Выровнять флекс-элемент по центру вертикально и горизонтально: align-items: center; justify-content: center;

ФЛЕКС-ЭЛЕМЕНТ
flex-wrap:wrap
переносит элементы флекс-контейнера сохраняя их пропорции. Без данного стиля элементы сжимаются в зависимости от размеров окна.
flex-wrap:wrap-reverse
переносит флекс-элементов в обратном направлении.
flex-wrap:nowrap
запрет переноса флекс-элементов.
12345
12345
order: число
разместит флекс-элемент с большим числом после флекс-элементов с меньшим числом или без order.

#fe1{order:1} #fe2{order:0} <span id='fe1'>флекс-элемент 1</span><span id='fe2'>флекс-элемент 2</span><span id='fe3'>флекс-элемент 3</span>

флекс-элемент 1флекс-элемент 2флекс-элемент 3
флекс-элемент 1флекс-элемент 2флекс-элемент 3