Flex CSS что это и как с ним работать (флексы css)

Flex CSS что это и как с ним работать (флексы css)

Современная верстка не обходится без Flexbox, потому как это дает больше возможностей и скорость работы. Flex позволяет легко управлять расположением, выравниванием и размером блоков в отличии от устаревших (но иногда применяемых) float и position. В данной статье мы подробно разберем: Flex CSS что это и как работает на примерах.

CSS display flex — что это

Как вам наверняка уже известно, стиль display задает определенному блоку свое свойство и поведение в верстке. Например, display: flex; делает из блока flex контейнер и все его дочерние элементы становятся флексами, которыми можно управлять по разному в зависимости от ваших задач.

.container {
  display: flex;
}

CSS flex-direction направление элементов

Свойство flex-direction задаёт направление, в котором располагаются элементы:

.container {
  display: flex;
  flex-direction: row; /* по умолчанию: слева направо */
}

Значения свойства flex-direction могут быть разными, приведем список:

  • row — размещение дочерних флексов по горизонтали.
  • row-reverse — размещение по горизонтали но справа на лево.
  • column — размещение дочерних флексов по вертикали.
  • column-reverse — размещение по вертикали но снизу вверх.

CSS flex-wrap перенос строк

Все дочерние элементы (флексы) по умолчанию сжимаются в одну строку. Для того чтоб разрешить их перенос используется flex-wrap:

.container {
  display: flex;
  flex-wrap: wrap;
}

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

CSS flex-flow короткая запись

CSS свойство flex-flow объединяет два свойства flex-direction и flex-wrap которые были приведены выше:

.container {
  display: flex;
  flex-flow: row wrap;
}

Flex-flow является просто сокращенной формой записи.

CSS justify-content и align-items выравнивание

Свойства justify-content и align-items управляют элементами по основной и поперечной оси выравнивания.

.container {
  justify-content: flex-start; /* элементы прижаты к началу */
  align-items: center; /* выравнивание по центру по вертикали */
}

Значения для свойства justify-content:

  • flex-start — блоки в начале (по умолчанию).
  • center — блоки по центру.
  • flex-end — блоки в конце.
  • space-between — блоки равномерно с промежутками.
  • space-around — блоки с равными отступами по краям.

Значения для свойства align-items:

  • stretch — растягивает элементы по высоте контейнера (значение по умолчанию).
  • flex-start — прижимает элементы к началу поперечной оси (обычно — к верхнему краю).
  • center — выравнивает элементы по центру поперечной оси.
  • flex-end — прижимает элементы к концу поперечной оси (обычно — к нижнему краю).
  • baseline — выравнивает элементы по их базовой линии текста.

CSS display inline-flex

Если вы хотите, чтобы контейнер с flex вёл себя как строчный элемент, используйте:

.container {
  display: inline-flex;
}

Это полезно, если нужно несколько флекс-контейнеров в одной строке.

CSS flex-grow что это

Свойство CSS flex-grow задает возможность растягивания элемента (дочернего флекса), для того чтоб заполнить свободное пространство.

.item {
  flex-grow: 1;
}

Если у нескольких элементов разные значения flex-grow, элемент с большим числом получит больше свободного места.

.item1 { 
  flex-grow: 1; 
}
.item2 { 
  flex-grow: 2; 
}

В данном примере элемент .item2 будет в два раза шире чем элемент .item1

CSS flex: 1 1 0 что это значит

Свойство flex — это короткая запись для трёх параметров: flex-grow, flex-shrink, flex-basis.

.item {
  flex: 1 1 0;
}

Расшифровка этих трех элементов задающихся флексу:

  • 1 — элемент может расти, занимая свободное место.
  • 1 — может сжиматься при нехватке места.
  • 0 — начальная ширина — 0 (элемент займёт место, пропорционально flex-grow).

Как работает Flexbox на примере

Приводим пример реального кода при построении верстки:

/* HTML */
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>
/* CSS */
.container {
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex-wrap: wrap;
}

.item {
  flex: 1 1 200px;
  background: #0ff;
  margin: 10px;
  text-align: center;
  padding: 20px;
}

Дополняем конкретной таблицей свойств и описаний флексов:

Свойство Описание Пример значения
display Активирует flex-контейнер flex, inline-flex
flex-direction Задаёт направление расположения элементов row, column
flex-wrap Разрешает перенос элементов на новую строку wrap, nowrap
flex-flow Сокращённая запись для flex-direction и flex-wrap row wrap
justify-content Выравнивание элементов по основной оси flex-start, center, space-between
align-items Выравнивание элементов по поперечной оси flex-start, center, stretch
align-content Управляет расстоянием между строками при переносе space-between, stretch
order Определяет порядок отображения элементов 1, 2, 3
flex-grow Позволяет элементу расширяться, занимая свободное пространство 1, 2
flex-shrink Позволяет элементу сжиматься при нехватке места 1, 0
flex-basis Определяет базовую ширину элемента до распределения пространства auto, 200px
flex Сокращённая запись для flex-grow, flex-shrink и flex-basis 1 1 0
align-self Переопределяет align-items для отдельного элемента center, flex-end