- CSS Flex Container
- Example
- The flex-direction Property
- Example
- Example
- Example
- Example
- The flex-wrap Property
- Example
- Example
- Example
- The flex-flow Property
- Example
- The justify-content Property
- Example
- Example
- Example
- Example
- Example
- The align-items Property
- Example
- Example
- Example
- Example
- Example
- 3
- The align-content Property
- Example
- Example
- Example
- Example
- Example
- Example
- Perfect Centering
- Example
- The CSS Flexbox Container Properties
- Flexbox
- Display: flex
- Flex-direction
- Flex-wrap
- Order
- Justify-content
- Align-items
- Align-self
- Align-content
- Сайдбар
- Статьи
- Страницы
- Проекты
CSS Flex Container
Like we specified in the previous chapter, this is a flex container (the blue area) with three flex items:
The flex container becomes flexible by setting the display property to flex :
Example
The flex container properties are:
The flex-direction Property
The flex-direction property defines in which direction the container wants to stack the flex items.
Example
The column value stacks the flex items vertically (from top to bottom):
Example
The column-reverse value stacks the flex items vertically (but from bottom to top):
Example
The row value stacks the flex items horizontally (from left to right):
Example
The row-reverse value stacks the flex items horizontally (but from right to left):
The flex-wrap Property
The flex-wrap property specifies whether the flex items should wrap or not.
The examples below have 12 flex items, to better demonstrate the flex-wrap property.
Example
The wrap value specifies that the flex items will wrap if necessary:
Example
The nowrap value specifies that the flex items will not wrap (this is default):
Example
The wrap-reverse value specifies that the flexible items will wrap if necessary, in reverse order:
The flex-flow Property
The flex-flow property is a shorthand property for setting both the flex-direction and flex-wrap properties.
Example
The justify-content Property
The justify-content property is used to align the flex items:
Example
The center value aligns the flex items at the center of the container:
Example
The flex-start value aligns the flex items at the beginning of the container (this is default):
Example
The flex-end value aligns the flex items at the end of the container:
Example
The space-around value displays the flex items with space before, between, and after the lines:
Example
The space-between value displays the flex items with space between the lines:
The align-items Property
The align-items property is used to align the flex items.
In these examples we use a 200 pixels high container, to better demonstrate the align-items property.
Example
The center value aligns the flex items in the middle of the container:
Example
The flex-start value aligns the flex items at the top of the container:
Example
The flex-end value aligns the flex items at the bottom of the container:
Example
The stretch value stretches the flex items to fill the container (this is default):
Example
The baseline value aligns the flex items such as their baselines aligns:
Note: the example uses different font-size to demonstrate that the items gets aligned by the text baseline:
2
3
The align-content Property
The align-content property is used to align the flex lines.
In these examples we use a 600 pixels high container, with the flex-wrap property set to wrap , to better demonstrate the align-content property.
Example
The space-between value displays the flex lines with equal space between them:
Example
The space-around value displays the flex lines with space before, between, and after them:
Example
The stretch value stretches the flex lines to take up the remaining space (this is default):
Example
The center value displays the flex lines in the middle of the container:
Example
The flex-start value displays the flex lines at the start of the container:
Example
The flex-end value displays the flex lines at the end of the container:
Perfect Centering
In the following example we will solve a very common style problem: perfect centering.
SOLUTION: Set both the justify-content and align-items properties to center , and the flex item will be perfectly centered:
Example
The CSS Flexbox Container Properties
The following table lists all the CSS Flexbox Container properties:
Property | Description |
---|---|
align-content | Modifies the behavior of the flex-wrap property. It is similar to align-items, but instead of aligning flex items, it aligns flex lines |
align-items | Vertically aligns the flex items when the items do not use all available space on the cross-axis |
display | Specifies the type of box used for an HTML element |
flex-direction | Specifies the direction of the flexible items inside a flex container |
flex-flow | A shorthand property for flex-direction and flex-wrap |
flex-wrap | Specifies whether the flex items should wrap or not, if there is not enough room for them on one flex line |
justify-content | Horizontally aligns the flex items when the items do not use all available space on the main-axis |
Flexbox
Flexbox — это новый способ располагать блоки на странице. Это технология, созданная именно для раскладки элементов, в отличие от float-ов. С помощью Flexbox можно легко выравнивать элементы по горизонтали и по вертикали, менять направление и порядок отображение элементов, растягивать блоки на всю высоту родителя или прибивать их к нижнему краю.
UPD от 02.02.2017: сделала удобную шпаргалку по флексбоксам, с живыми демками и описаниями из спеки: Flexbox cheatsheet.
В примерах используется только новый синтаксис. На момент написания статьи правильней всего они отображаются в Chrome. В Firefox работают частично, в Safari — вообще не работают.
Спецификация на английском есть тут: w3.org/TR/css3-flexbox.
Согласно сайту caniuse.com, Flexbox не поддерживается 8 и 9-м IE и Opera Mini, а в других браузерах поддерживаются не все свойства и/или требуются префиксы.
Это означает, что технологию нельзя широко использовать прямо сейчас, но уже самое время познакомиться с ней поближе.
Для начала надо знать, что flex-элементы располагаются по осям. По умолчанию элементы располагаются по горизонтали — вдоль main axis — главной оси.
Так же следует иметь в виду, что при использовании Flexbox для внутренних блоков не работают float , clear и vertical-align , а так же свойства, задающие колонки в тексте.
Приготовим полигон для экспериментов:
Один родительский блок (желтый) и 5 дочерних.
Display: flex
И теперь родительскому элементу добавляем display: flex; . Внутренние div-ы выстраиваются в ряд (вдоль главной оси) колонками одинаковой высоты, независимо от содержимого.
display: flex; делает все дочерние элементы резиновыми — flex , а не инлайновыми или блочными, как было изначально.
Если родительский блок содержит картинки или текст без оберток, они становятся анонимными flex-элементами.
Свойство display для Flexbox может принимать два значения:
flex — ведёт себя как блочный элемент. При рассчете ширины блоков приоритет у раскладки (при недостаточной ширине блоков контент может вылезать за границы).
inline-flex — ведёт себя как инлайн-блочный. Приоритет у содержимого (контент растопыривает блоки до необходимой ширины, чтобы строчки, по возможности, поместились).
Flex-direction
Направление раскладки блоков управляется свойством flex-direction .
row — строка (значение по умолчанию);
row-reverse — строка с элементами в обратном порядке;
column-reverse — колонка с элементами в обратном порядке.
Flex-wrap
nowrap — блоки не переносятся (значение по умолчанию);
wrap-reverse — блоки переносятся и располагаются в обратном порядке.
Для короткой записи свойств flex-direction и flex-wrap существует свойство: flex-flow .
Возможные значения: можно задавать оба свойства или только какое-то одно. Например:
flex-flow: column-reverse wrap;
Демо для row-reverse wrap-reverse :
Order
Возможные значения: числа. Чтобы поставить блок самым первым, задайте ему order: -1 :
Justify-content
justify-content и align-items применяются к родительскому контейнеру, align-self — к дочерним.
justify-content отвечает за выравнивание по главной оси.
Возможные значения justify-content :
flex-start — элементы выравниваются от начала главной оси (значение по умолчанию);
flex-end — элементы выравниваются от конца главной оси;
center — элементы выравниваются по центру главной оси;
space-between — элементы выравниваются по главной оси, распределяя свободное место между собой;
space-around — элементы выравниваются по главной оси, распределяя свободное место вокруг себя.
Align-items
Возможные значения align-items :
flex-start — элементы выравниваются от начала перпендикулярной оси;
flex-end — элементы выравниваются от конца перпендикулярной оси;
center — элементы выравниваются по центру;
baseline — элементы выравниваются по базовой линии;
stretch — элементы растягиваются, занимая все пространство по перпендикулярной оси (значение по умолчанию).
Align-self
align-self также отвечает за выравнивание по перпендикулярной оси, но задается отдельным flex-элементам.
Возможные значения align-self :
auto — значение по умолчанию. Означает, что элемент использует align-items родительского элемента;
flex-start — элемент выравнивается от начала перпендикулярной оси;
flex-end — элемент выравнивается от конца перпендикулярной оси;
center — элемент выравнивается по центру;
baseline — элемент выравнивается по базовой линии;
stretch — элемент растягивается, занимая все пространство по высоте.
Align-content
flex-start — элементы выравниваются от начала главной оси;
flex-end — элементы выравниваются от конца главной оси;
center — элементы выравниваются по центру главной оси;
space-between — элементы выравниваются по главной оси, распределяя свободное место между собой;
space-around — элементы выравниваются по главной оси, распределяя свободное место вокруг себя;
stretch — элементы растягиваются, заполняя всю высоту (значение по умолчанию).
Ps: Некоторые штуки мне так и не удалось увидеть в действии, например, строчку flex-flow: column wrap или полную запись того же flex-direction: column; flex-wrap: wrap; .
Элементы стоят столбиком, но не переносятся:
Не срабатывает wrap при flex-direction: column; , хотя в спеке это выглядит вот так:
Думаю, со временем заработает.
UPD от 21.06.2014: всё работает, если задать блоку высоту. За подсказку спасибо SelenIT2.
Сайдбар
Статьи
- Математические функции в CSS
- Адаптивное видео с помощью встроенных математических функций CSS
- Недоступность в картинках
- Единицы размеров в CSS
- Генератор цветовых тем
- Jekyll → Gatsby
- Вариативные шрифты
- Размеры в SVG
- Адаптивный Pixel Perfect
- Логотип не отвечает или временно недоступен
- SVG-паттерны
- Мыльные пузыри на SVG
- SVG-градиенты
- Весёлая консолька
- SVG-маски
- Умная прокрутка со Scroll Snap Points
- CSS-анимации для ротации изображений
- Анимированные SVG-маски
- Странности обводки в SVG
- SVG-прелоадеры
- Анимируем градиенты ещё раз
- Background-blend-mode
- Возможности оформления SVG
- CSS и SVG маски
- Nth-child и nth-of-type
- SVG-иконки
- SVG: заливка и обводка
- SVG-path
- SVG: группировка и переиспользование элементов
- SVG-фигуры и трансформации
- SVG
- СSS-градиенты и 3D
- Рисовалка анимированных теней
- Свежие CSS-паттерны
- CSS-паттерны
- Радиальные градиенты
- Линейные градиенты
- Крестики-нолики на CSS
- Border-image
- Электронные часы на CSS и JS.
- Сколько весят селекторы?
- Символы юникода
- Свойство content
- Анимируем CSS-градиенты
- Текстовые эффекты
- Древовидный список на CSS
- Css-селекторы, часть 2
- Css-селекторы
- Контекст наложения
- Два способа «прошить» элемент по краю
- Box-sizing
- Цвета в CSS
- Фон под строчками: добавляем поля
- Box-shadow
- Css-фигуры: лепесток
- Transform
- Css Animation
- 3D-куб
- Border-radius
- First letter
- Эти глаза напротив
- CSS-фигуры
- Стрелки с помощью свойства border
- Flexbox