Назад

Все свойства модуля CSS Flexbox

CSS Flexbox (Flexible Box Layout Module) — это современная и мощная технология компоновки в CSS, предназначенная для создания одномерных макетов. Она позволяет эффективно распределять пространство и выравнивать элементы внутри контейнера, даже когда их размер неизвестен или динамически изменяется. Гибкость этого модуля сделала его незаменимым инструментом для верстки адаптивных и сложных интерфейсов, избавляя разработчиков от использования таких приемов, как float-блоки или таблицы. Flexbox интуитивно понятен: вы определяете гибкий контейнер, внутри которого его непосредственные дочерние элементы автоматически становятся flex-элементами, подчиняющимися набору логических правил выравнивания и распределения.

В этой статье мы детально рассмотрим все без исключения свойства модуля Flexbox, разделив их на свойства для управления контейнером и свойства для тонкой настройки отдельных элементов.

Свойства для flex-контейнера

Эти свойства применяются непосредственно к родительскому блоку, тем самым устанавливая контекст гибкой компоновки для всех его прямых потомков (дочерних элементов).

display: flex / inline-flex

Это свойство является отправной точкой для использования Flexbox. Оно превращает любой HTML-элемент в flex-контейнер. Основное свойство для flex-конейнера без которого остальные свойства работать не будут. При установке данного свойства все блоки внутри данного контейнера становятся флекс-элементами и выстраиваются в одну линию

Применение значений flex или inline-flex в свойстве display активирует flex-контекст, и все прямые дочерние элементы немедленно выстраиваются вдоль главной оси, которая по умолчанию горизонтальна.

flex
inline-flex
block
Блоковый flex-контейнер. Контейнер ведет себя как блочный элемент, занимая всю доступную ширину своей родительской области, перенося соседние элементы на новую строку.
трочный flex-контейнер. Контейнер ведет себя как строчный элемент, занимая лишь ту ширину, которая необходима для размещения своих flex-элементов. Это позволяет располагать несколько flex-контейнеров на одной строке, аналогично поведению inline-block.
Значение block вставленно ради примера, что бы можно было посмотреть как распологались блоки до применения flex
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element {
    width: auto;
    magrin: 5px;
}

flex-direction

Свойство flex-direction - это одно из ключевых свойств, которое определяет направление главной оси, тем самым задавая ориентацию flex-элементов внутри контейнера. Выбор направления напрямую влияет на то, как будут интерпретироваться свойства justify-content и flex-grow/flex-shrink.

row
row-reverse
column
column-reverse
Значение по умолчанию. Элементы располагаются слева направо (в режиме LTR) вдоль горизонтальной оси.
Элементы располагаются в обратном порядке, справа налево, также вдоль горизонтальной оси. Визуально это зеркально отражает последовательность элементов.
Элементы выстраиваются вертикально, сверху вниз. Главная ось становится вертикальной, что кардинально меняет логику работы других свойств, таких как justify-content.
Элементы выстраиваются вертикально, но в обратном порядке — снизу вверх.
1
2
3
4
5
.flex_container {
    display: flex;
    flex-direction: row;
}

flex-wrap

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

nowrap
wrap
wrap-reverse
Значение по умолчанию. Все элементы будут сжаты и размещены в одну линию, независимо от их исходной ширины и доступного пространства. Это может привести к переполнению контейнера.
Элементы, которые не помещаются в одну линию, будут автоматически переноситься на следующую, располагаясь сверху вниз (при flex-direction: row) или слева направо (при flex-direction: column).
Перенос элементов происходит в обратном направлении. Например, при flex-direction: row новые строки будут добавляться не снизу, а сверху.
1
2
3
4
5
.flex_container {
    display: flex;
    flex-wrap: nowrap;
}
.flex_element {
    width: 33.3333%;
}

justify-content

Свойство justify-content - это свойство отвечает за выравнивание flex-элементов вдоль главной оси (по умолчанию по горизонтали). Оно распределяет свободное пространство, оставшееся после того, как все элементы заняли свою фиксированную или гибкую ширину.

flex-start
flex-end
start
end
center
space-between
space-around
space-evenly
Значение по умолчанию. Элементы группируются в начале главной оси. При применении flex-direction: row, flex-элементы стартуют с левого края, при flex-direction: column - с верхнего края
Элементы группируются в конце главной оси. При применении flex-direction: row, flex-элементы стартуют с правого края, при flex-direction: column - с нижнего края
Аналогичен значению flex-start
Аналогичен значению flex-end
Элементы становятся по центру вдоль главной оси. При применении flex-direction: row - элементы выравниваються по центру по горизонтали, при flex-direction: column - по вертикали
Равномерно распределяет все элементы по ширине flex-контейнера. Первый элемент прижимается к началу, последний — к концу, а все остальные элементы распределяются равномерно между ними. Свободное пространство делится на равные промежутки.
Равномерно распределяет все элементы по ширине flex-контейнера. Каждый элемент окружается равным пространством слева и справа. Визуально это создает отступы вокруг каждого элемента, которые между соседями складываются, поэтому промежуток между двумя элементами будет в два раза больше, чем отступ от края контейнера.
Равномерно распределяет все элементы по ширине flex-контейнера. Все промежутки распределяются абсолютно равномерно: расстояние от края контейнера до первого элемента, между любыми двумя элементами и от последнего элемента до противоположного края — идентичны.
1
2
3
4
5
.flex_container {
    display: flex;
    justify-content: flex-start;
}

align-items

Свойство align-items - это свойство определяет, как flex-элементы выравниваются вдоль поперечной оси (перпендикулярной главной). Для flex-direction: row поперечная ось — вертикальная, для column — горизонтальная.

stretch
flex-start
flex-end
start
end
center
baseline
Значение по умолчанию. Элементы растягиваются, чтобы занять всю высоту (или ширину) контейнера, если их собственный размер не задан явно. Если в контейнере несколько строк, то флекс элементы подстраиваются под самый высоки элемент
Элементы выравниваются по началу поперечной оси (верхний край для flex-direction: row и лувый край для flex-direction: column).
Элементы выравниваются по концу поперечной оси (нижний край для flex-direction: row и правый край для flex-direction: column).
Аналогичен значению flex-start
Аналогичен значению flex-end
Значение center позиционирует элементы по центру. При этом высота флекс-элементов становится равной относительной высоты содержимого контента
Элементы выравниваются по их базовой линии. Если размер контента флекс-элементов разный, то при данном значении они выравниваются таким образом, чтобы нижняя часть контента находилать на одной линии
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Lorem ipsum dolor
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nobis, nihil quas repellendus.
Lorem ipsum dolor sit amet consectetur
.flex_container {
    display: flex;
    align-items: stretch;
}

align-content

Свойство align-content - это свойство вступает в игру только когда у контейнера есть несколько строк flex-элементов (т.е. при flex-wrap: wrap или wrap-reverse). Оно управляет распределением свободного пространства вдоль поперечной оси между этими строками, аналогично тому, как justify-content распределяет пространство вдоль главной оси для отдельных элементов.

stretch
flex-start
flex-end
start
end
center
space-between
space-around
space-evenly
Значение по умолчанию. Строки растягиваются, равномерно заполняя все доступное пространство по поперечной оси.
Строки группируются в начале поперечной оси.
Строки группируются в конце поперечной оси.
Аналогичен значению flex-start
Аналогичен значению flex-end
Строки группируются по центру поперечной оси.
Равномерно распределяет все строки по ширине поперечной оси. Первая строка прижимается к началу, последняя — к концу, а все остальные строки распределяются равномерно между ними. Свободное пространство делится на равные промежутки.
Равномерно распределяет все строки по ширине поперечной оси. Каждая строка окружается равным пространством. Визуально это создает отступы вокруг каждой строки, которые между соседями складываются, поэтому промежуток между двумя строками будет в два раза больше, чем отступ от края контейнера.
Равномерно распределяет все строки по ширине поперечной оси. Все промежутки распределяются абсолютно равномерно: расстояние от края контейнера до первой строки, между любыми двумя строками и от последней строки до противоположного края — идентичны.
Lorem ipsum dolor sit amet
Lorem ipsum
Lorem ipsum dolor sit amet
Lorem ipsum
Lorem ipsum
Lorem ipsum dolor
Lorem ipsum
Lorem ipsum dolor sit amet
.flex_container {
    height: 350px;
    display: flex;
    flex-wrap: wrap;
    align-content: stretch
}

column-gap

Определяет расстояние между колонками (элементами в одной строке).

column-gap: px;
1
2
3
4
5
6
7
8
.flex_container {
    display: flex;
    flex-wrap: wrap;
    column-gap: 0px;
}

row-gap

Определяет расстояние между строками в flex-контейнере.

row-gap: px;
1
2
3
4
5
6
7
8
.flex_container {
    display: flex;
    fler-wrap: 'wrap';
    row-gap: 0px;
}

gap

Универсальное свойство, которое одновременно задает отступы и между строками, и между колонками. Можно указать одно значение для обоих отступов или два: gap: <row-gap> <column-gap>;.

gap: px;
1
2
3
4
5
6
7
8
.flex_container {
    display: flex;
    fler-wrap: 'wrap';
    gap: 0px;
}
.flex_element {
    width: 1 1 calc(25% - 0px);
}

Свойства для управления определенными flex-элементами

Эти свойства применяются к дочерним элементам внутри flex-контейнера, позволяя переопределить поведение, заданное для всех элементов контейнером.

align-self

Свойство align-self - позволяет переопределить выравнивание по поперечной оси для отдельного элемента, установленное свойством align-items у контейнера.

Принимает те же значения, что и align-items (auto, flex-start, flex-end, center, baseline, stretch). Значение auto (по умолчанию) наследует поведение от align-items контейнера. С помощью этого свойства можно, например, прижать один элемент к низу контейнера, в то время как все остальные выровнены по центру.

stretch
flex-start
flex-end
start
end
center
baseline
Значение по умолчанию. Flex-элемент заполняет всю высоту строки. Если в контейнере несколько строк, то флекс элемент подстраиваются под самый высоки элемент
Значение flex-start позиционирует элемент по верхнему краю. При этом высота флекс-элемента становится равной относительной высоты содержимого контента
Значение flex-end позиционирует элемент по нижнему краю. При этом высота флекс-элемента становится равной относительной высоты содержимого контента
Аналогичен значению flex-start
Аналогичен значению flex-end
Значение center позиционирует элемент по центру. При этом высота флекс-элемента становится равной относительной высоты содержимого контента
Элемент выравнивается по базовой линии. Если размер контента флекс-элементов разный, то при данном значении они выравниваются таким образом, чтобы нижняя часть контента находилать на одной линии
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Lorem ipsum dolor
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nobis, nihil quas repellendus.
Lorem ipsum dolor sit amet consectetur
.flex_container {
    display: flex;
}
.flex_element:nth-child(2) {
    align-self: stretch;
}

order

Свойство order - позволяет управлять порядком отображения flex-элементов внутри контейнера без изменения их расположения в исходном HTML-коде (DOM). По умолчанию все элементы имеют order: 0.

Элементы сортируются в порядке возрастания значения order. Элементы с одинаковым значением order отображаются в том порядке, в котором они находятся в исходном коде. Можно задавать как положительные, так и отрицательные значения. Это мощный инструмент для перестановки блоков, например, в адаптивном дизайне для мобильных устройств.

order: ;
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element:nth-child(1) { order: 1; }
.flex_element:nth-child(2) { order: 2; }
.flex_element:nth-child(3) { order: 3; }
.flex_element:nth-child(4) { order: 4; }
.flex_element:nth-child(5) { order: 5; }

flex-basis

Свойство flex-basis - определяет исходный размер элемента по главной оси до того, как к нему будут применены преобразования flex-grow или flex-shrink. Это своего рода "идеальный размер" элемента.

Значения: Может быть задан в абсолютных единицах (например, 200px), относительных (50%), или ключевыми словами (auto, content). auto (по умолчанию): Размер основывается на размере элемента (width/height), если он задан. Если нет — рассчитывается исходя из содержимого (content). content: Размер рассчитывается исключительно на основе содержимого элемента, игнорируя явно заданные width/height.

flex-basis: ;
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element:nth-child(3) { 
    flex-basis: auto; 
}

flex-grow

Свойство flex-grow - определяет коэффициент роста элемента. Управляет тем, какую долю от всего свободного пространства внутри контейнера по главной оси может занять данный элемент, если такое пространство есть. Принимает безразмерное число (по умолчанию 0). Отрицательные значения недопустимы.

Как работает: Если всем элементам задать flex-grow: 1, то все свободное пространство будет распределено между ними поровну. Если одному элементу задать flex-grow: 2, а остальным 1, то этот элемент получит в два раза больше свободного пространства, чем каждый из остальных. Это свойство не увеличивает элемент пропорционально, а распределяет именно свободное место.

0
1
Значение по умолчанию у всех элементов - 0. Флекс-элемент занимает пространство относительно ширины содержимого контента
Элемент занимает все пустое пространство контейнера
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element:nth-child(3) { 
    flex-grow: 0; 
}

flex-shrink

Свойство flex-shrink - определяет коэффициент сжатия элемента. Управляет тем, насколько элемент будет сжиматься относительно других элементов, если для них не хватает места в контейнере (переполнение). Принимает безразмерное число (по умолчанию 1). Отрицательные значения недопустимы.

Как работает: Значение 0 запрещает элементу сжиматься, и он будет сохранять свой исходный размер (flex-basis), в то время как другие элементы с flex-shrink: 1 будут уменьшаться. Если одному элементу задать flex-shrink: 3, а другому 1, то при нехватке места первый будет сжиматься в три раза сильнее второго.

1
0
Значение по умолчанию у всех элементов - 1. Не позволяет элементу уменьшаться при уменьшении экрана
Не позволяет элементу уменьшаться при уменьшении контейнера
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element:nth-child(3) { 
    flex-basis: 300px;
    flex-shrink: 1; 
}

flex

Свойство flex - это сокращенное свойство, которое объединяет flex-grow, flex-shrink и flex-basis в одной записи. Варианты использования: flex: auto; - Эквивалентно flex: 1 1 auto;. Элемент может и расти, и сжиматься. flex: none; - эквивалентно flex: 0 0 auto;. Элемент негибкий, его размер жестко определяется width/height или содержимым.

flex: ;
1
2
3
4
5
.flex_container {
    display: flex;
}
.flex_element:nth-child(3) { 
    flex: 0 1 auto; 
}

Модуль CSS Flexbox предоставляет целостный, логичный и невероятно гибкий инструментарий для построения макетов. Понимая и комбинируя свойства контейнера (justify-content, align-items, flex-wrap) со свойствами элементов (flex-grow, align-self, order), вы получаете практически безграничный контроль над расположением содержимого на странице. Освоение Flexbox — это фундаментальный шаг для каждого фронтенд-разработчика, желающего создавать современные, чистые и отзывчивые пользовательские интерфейсы.