English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
CSS3 Flexible Box или flexbox - это новый модель макета, предназначенный для создания более гибких интерфейсов пользователя.
Flexible Box, обычно называемый flexbox, - это новый модель макета, введённый в CSS3, предназначенный для создания гибких интерфейсов пользователя с несколькими строками и колонками, без использования процента или фиксированных значений длины. CSS3 Модель布局 flex предоставляет простую и мощную механику для автоматического управления распределением пространства и выравниванием содержимого через таблицу стилей, не вмешиваясь в фактическую маркировку.
Данный пример демонстрирует, как использовать модель布局 flex для создания трёхколонного макета, где ширина и высота каждой колонки равны.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CSS3 Three Equal Flex Column</title> <style> .flex-container { width: 80%; min-height: 300px; display: -webkit-flex; /* Safari */ display: flex; border: 1px solid #808080; } .flex-container div { background: #dbdfe5; -webkit-flex: 1; /* Safari */ -ms-flex: 1; /* IE 10 */ flex: 1; } </style> </head>Item 1Item 2Item 3</html>Проверьте, как это выглядит‹/›
Если вы внимательно изучите пример кода выше, вы заметите, что мы не используем внутри .flex-container<div>Если вы внимательно изучите пример кода выше, вы заметите, что мы не используем внутри .flex-container
Flexbox состоит из flex контейнера и flex элементов. Вы можете определить ширину в upper, но вы можете увидеть, что ширина каждого столбца точно равна одной трети родителя .flex-container.displayэлементы, у которых свойство display установлено в flex (чтобы создатьблочный Flex контейнер) или inline-flex (чтобы создать аналогичныйinline-blockвнутренний инлайн-контейнер flex (чтобы создать flex контейнер) или inline-flex (чтобы создать аналогичныйfloat,clearиvertical-alignэта свойство не влияет на элементы с эластичными свойствами.
элементы растяжки следуют по этойflex-directionСвойство определяет направленность растяжки в伸缩ном контейнере. По умолчанию у каждого flex контейнера есть только одна линия растяжки, которая направлена в сторону инлайн-оси текущего режима записи илинаправление текста如图所示,将帮助 вам понять терминологию flex-раскладки.
В стандартной модели CSS-бокса элементы обычно отображаются в том порядке, в котором они появляются в底层 HTML-маркере. Flex-раскладка позволяет вам контролировать направление потока в flex контейнере, таким образом, элементы могут быть выложены в любом направлении потока, например, влево, вправо, вниз или вверх.
Вы можете использоватьflex-directionЭта свойство определяет поток flex элементов в flex контейнере. Значением по умолчанию для этой свойства является row, которое совпадает с текущим направлением текста или模式下 записи, например, с английским языком, который пишется слева направо.
.flex-container { width: 80%; min-height: 300px; /* Safari */ display: -webkit-flex; -webkit-flex-direction: row-reverse; display: flex; flex-direction: row-reverse; border: 1px solid #666; }Проверьте, как это выглядит‹/›
Аналогично, вы можете отображать элементы flex контейнера в виде столбца внутри flex контейнера, а не использовать значение属性 flex-direction столбец, как показано ниже:
.flex-container { width: 80%; min-height: 300px; /* Safari */ display: -webkit-flex; -webkit-flex-direction: column; display: flex; flex-direction: column; }Проверьте, как это выглядит‹/›
Одним из важнейших аспектов гибкой разметки является способность элементов Flex изменять свою ширину или высоту, чтобы заполнить доступное пространство. Это осуществляется черезflexАтрибуты, реализующие это, являются сокращенными атрибутамиflex-grow,flex-shrinkаflex-basisАтрибут.
Контейнер Flex распределяет доступное пространство между своими элементами пропорционально их коэффициентам роста, или сжимает их, чтобы предотвратить переполнение, пропорционально их коэффициенту сжатия.
.flex-container { width: 80%; min-height: 300px; display: -webkit-flex; /* Safari */ display: flex; } .flex-container div { padding: 10px; background: #dbdfe5; } .item1, .item3 { -webkit-flex: 1; /* Safari */ flex: 1; } .item2 { -webkit-flex: 2; /* Safari */ flex: 2; }Проверьте, как это выглядит‹/›
В приведенном выше примере первый и третий элементы Flex занимают 1/4, то есть 1/(1+1+2) свободного пространства, а второй элемент занимает 1/2, то есть 2/(1+1+2) свободного пространства. Аналогичным образом, вы можете использовать эту простую технику для создания других гибких макетов.
Внимание:Строго рекомендуется использовать атрибуты шорткода, а не отдельные атрибуты flex, так как это позволяет правильно сбросить компоненты, не указанные явно.
Есть четыре属性justify-content,align-content,align-itemsиalign-selfЦелью является указание на выравнивание элементов Flex в контейнере Flex. Первые три параметра применяются к контейнеру flex, а последний - к отдельному элементу flex.
С помощью атрибута justify-content можно выровнять элементы Flex по основной оси контейнера (то есть по горизонтали). Обычно используется, когда элементы Flex не занимают все доступное пространство по оси.
Атрибут justify-content принимает следующие значения:
flex-start-Значение по умолчанию. Элементы Flex размещаются в начале основной оси.
flex-end -Элементы Flex расположены в конце основной оси.
center -Элементы Flex расположены в центре между свободным пространством на обоих концах основной оси. Если остается отрицательное свободное пространство, то элементы будут вылезать равномерно в обоих направлениях.
space-between -Элементы Flex распределены по основной оси, где первый элемент размещается в начале оси, а последний - в конце оси. Если элементы вылезают или есть только один элемент, то это значение равно flex-start.
space-around -Элементы Flex распределяются равномерно с одинаковым расстоянием на обоих концах. Если они вылезают или есть только один элемент, то это значение равно center.
Данный пример покажет вам, как различные значения атрибута justify-content влияют на многостолбцовый flex-контейнер с фиксированной шириной.
.flex-container { width: 500px; min-height: 300px; border: 1px solid #666; /* Safari */ display: -webkit-flex; -webkit-justify-content: space-around; display: flex; justify-content: space-around; } .item1 { width: 75px; background: #e84d51; } .item2 { width: 125px; background: #7ed636; } .item3 { width: 175px; background: #2f97ff; }Проверьте, как это выглядит‹/›
Вы можете использовать атрибуты align-items или align-self для выравнивания эластичных элементов по горизонтали flex-контейнера (то есть по вертикальной оси). Однако, когда вы применяете align-items к flex-контейнеру, атрибут align-self применяется к отдельному эластичному элементу и перекрывает align-items. Оба атрибута принимают следующие значения:
flex-start -Эластичные элементы расположены на начале оси пересечения.
flex-end -Эластичные элементы расположены на конце оси пересечения.
center -Эластичные элементы размещаются в центре оси горизонтали, с равным доступным пространством с обеих сторон. Если оставшееся свободное пространство отрицательно, то эластичные элементы будут равномерно переливаться в обе стороны.
baseline -Текстовая база каждого эластичного элемента (или инлайн-оси) выравнивается с базовой линией самого большого эластичного элемента.font-size.
Stretch -Эластичные элементы будут растягиваться, чтобы заполнить текущую строку или столбец, если это не阻止уется минимальной и максимальной шириной или высотой. Значение по умолчанию для атрибута align-items.
Данный пример покажет вам, как различные значения атрибута align-items влияют на многостолбцовый flex-контейнер с фиксированной высотой.
.flex-container { width: 500px; min-height: 300px; border: 1px solid #666; /* Safari */ display: -webkit-flex; -webkit-align-items: center; display: flex; align-items: center; } .item1 { width: 75px; height: 100px; background: #e84d51; } .item2 { width: 125px; height: 200px; background: #7ed636; } .item3 { width: 175px; height: 150px; background: #2f97ff; }Проверьте, как это выглядит‹/›
Вы также можете распределять доступное пространство по горизонтали в многострочном или многостолбцовом flex-контейнере. Атрибут align-content используется для выравнивания строк flex-контейнера, например, если на оси горизонтали остается избыточное пространство, то строки многострочного flex-контейнера выравниваются justify-content, как если бы вы выравнивали один элемент по основной оси.
Атрибут align-content принимает те же значения, что и justify-content, но его применяют к оси горизонтали, а не к основной оси. Он также принимает другую стоимость:
StretchДоступное пространство распределяется поровну между всеми строками или столбцами, чтобы увеличить их размер пересечения. Если оставшееся свободное пространство отрицательно, то это значение равно flex-start.
Данный пример покажет вам, как различные значения атрибута align-content влияют на многострочный flex-контейнер с фиксированной высотой.
.flex-container { width: 500px; min-height: 300px; margin: 0 auto; font-size: 32px; border: 1px solid #666; /* Safari */ display: -webkit-flex; -webkit-flex-flow: row wrap; -webkit-align-content: space-around; display: flex; flex-flow: row wrap; align-content: space-around; } .flex-container div { width: 150px; height: 100px; background: #dbdfe5; }Проверьте, как это выглядит‹/›
Кроме изменения потока внутри flex-контейнера, вы также можете изменитьorderАтрибут показывает порядок отдельного flex-элемента. Этот атрибут принимает положительные или отрицательные целые числа в качестве значений. По умолчанию, все flex-элементы отображаются и раскладываются в порядке их появления в HTML-тегах, так как значение по умолчанию для order равно 0.
Данный пример покажет вам, как определить порядок отдельного эластичного элемента.
.flex-container { width: 500px; min-height: 300px; border: 1px solid #666; display: -webkit-flex; /* Safari 6.1+ */ display: flex; } .flex-container div { padding: 10px; width: 130px; } .item1 { background: #e84d51; -webkit-order: 2; /* Safari 6.1+ */ order: 2; } .item2 { background: #7ed636; -webkit-order: 1; /* Safari 6.1+ */ order: 1; } .item3 { background: #2f97ff; -webkit-order: -1; /* Safari 6.1+ */ order: -1; }Проверьте, как это выглядит‹/›
Внимание:Элементы с наименьшим значением порядка ставятся спереди, а элементы с наибольшим значением порядка ставятся в конце. Элементы с одинаковым значением порядка отображаются в порядке их появления в исходном документе.
Обычно, выравнивание контента по вертикали требует использования JavaScript или некоторых примитивных CSS-хаков. Однако, с помощью flexbox это можно сделать легко, не needing any adjustments.
Данный пример покажет вам, как с помощью функции CSS3 гибкой рамки легко выровнять контент по горизонтали и вертикали в центре.
.flex-container { width: 500px; min-height: 300px; border: 1px solid #666; display: -webkit-flex; /* Safari 6.1+ */ display: flex; } .item { width: 300px; padding: 25px; margin: auto; background: #f0e68c; }Проверьте, как это выглядит‹/›
По умолчанию, эластичный контейнер показывает только одну строку или одну колонку эластичных элементов. Ноflex-wrapЕсли на одной伸缩ной строке не хватает места, вы можете использовать свойства flex-контейнера, чтобы определить, будут ли伸缩аемые элементы перенесены на новые строки.
Свойство flex-wrap принимает следующие значения:
nowrap-по умолчанию. Элементы размещаются в одной строке. Если на伸缩ной линии не хватает места, может возникнуть переполнение.
wrap —flex-контейнер разбивает flex-элементы на несколько строк, так же, как это происходит с текстом, который слишком широк, чтобы умещаться на текущей строке, и его разрезают на новую строку.
wrap-reverse —伸缩аемые элементы будут перенесены на новые строки при необходимости, но в обратном порядке, то естьНачало пересечения (cross-start)иКонец пересечения(cross-end)Направления будут меняться.
Следующие примеры покажут вам, как использовать свойство flex-wrap для отображения flex-элементов в одном или нескольких строках в flex-контейнере.
.flex-container { width: 500px; min-height: 300px; border: 1px solid #666; /* Safari */ display: -webkit-flex; -webkit-flex-wrap: wrap; display: flex; flex-wrap: wrap; } .flex-container div{ width: 130px; padding: 10px; background: #dbdfe5; }Проверьте, как это выглядит‹/›
Внимание:Вы также можете использовать сокращенные CSS-свойства в одном объявленииflex-flowНастройте flex-direction и flex-wrap. Они принимают те же значения, что и соответствующие свойства, и значения могут быть в любом порядке.