Флекс css: CSS Flexible Box Layout — CSS

Содержание

flex | CSS | WebReference

  • Содержание
    • Краткая информация
    • Синтаксис
    • Значения
    • Пример
    • Примечание
    • Спецификация
    • Браузеры

Сокращённое свойство, которое позволяет указать параметры элемента, чтобы он эффективно заполнял доступное пространство. Элементы могут быть растянуты пропорционально с учётом заданного соотношения или сжаты, чтобы целиком вместить все элементы без переносов в одну строку.

Значение по умолчаниюflex-grow: 0
flex-shrink: 1
flex-basis: auto
НаследуетсяНет
ПрименяетсяК флекс-элементам
АнимируетсяДа

Синтаксис

flex: none | [ flex-grow flex-shrink? || flex-basis ]

Обозначения

ОписаниеПример
<тип>Указывает тип значения.<размер>
A && B
Значения должны выводиться в указанном порядке.
<размер> && <цвет>
A | BУказывает, что надо выбрать только одно значение из предложенных (A или B).normal | small-caps
A || BКаждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке.width || count
[ ]Группирует значения.[ crop || cross ]
*Повторять ноль или больше раз.[,<время>]*
+Повторять один или больше раз.<число>+
?Указанный тип, слово или группа не является обязательным.inset?
{A, B}Повторять не менее A, но не более B раз.
<радиус>{1,4}
#Повторять один или больше раз через запятую.<время>#

Значения

none
Соответствует значению 0 0 auto.

Смотрите отдельные свойства для их значений.

Пример

<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>flex</title> <style> body { margin: 0; /* Убираем отступы */ display: flex; /* Включаем флексы */ height: 100vh; /* Занимает всю высоту */ flex-direction: column; /* Главная ось располагается вертикально */ } main { flex: 1; /* Соответствует flex: 1 1 0% */ } footer { background: #e4efc7; /* Цвет фона */ padding: 10px; /* Поля вокруг текста */ } </style> </head> <body> <main> </main> <footer>Подвал</footer> </body> </html>

В данном примере подвал располагается внизу веб-страницы.

Объектная модель

Объект.style.flex

Примечание

Safari до версии 9 поддерживает свойство -webkit-flex.

Спецификация

СпецификацияСтатус
CSS Flexible Box Layout Module Level 1Возможная рекомендация

Спецификация

Каждая спецификация проходит несколько стадий одобрения.

  • Recommendation (Рекомендация) — спецификация одобрена W3C и рекомендована как стандарт.
  • Candidate Recommendation (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
  • Proposed Recommendation (Предлагаемая рекомендация) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
  • Working Draft (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
  • Editor’s draft (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
  • Draft (Черновик спецификации) — первая черновая версия стандарта.

Браузеры

11132912.16.1928
4.42812.17.19.2

Браузеры

В таблице браузеров применяются следующие обозначения.

  •  — свойство полностью поддерживается браузером со всеми допустимыми значениями;
  •  — свойство браузером не воспринимается и игнорируется;
  •  — при работе возможно появление различных ошибок, либо свойство поддерживается лишь частично, например, не все допустимые значения действуют или свойство применяется не ко всем элементам, которые указаны в спецификации.

Число указывает версию браузера, начиная с которой свойство поддерживается.

Флексы

См. также

  • Выравнивание элементов форм

Автор и редакторы

Автор: Влад Мержевич

Последнее изменение: 24.04.2020

Редакторы: Влад Мержевич

Полное руководство по CSS Flex + опыт использования / Хабр

Как и CSS Grid, Flex Box довольно сложен, потому что состоит из двух составляющих: контейнера и элементов внутри него.

Когда я начал изучать Flex, я хотел увидеть все, на что он способен. Но мне не удалось найти подробное руководство с примерами всех возможностей. Поэтому я решил самостоятельно создать диаграммы свойств Flex с «высоты птичьего полета».

Это все, на что способен Flex.

Но… давайте рассмотрим каждую диаграмму отдельно. К концу этого руководства по Flex вы узнаете обо всех его возможностях.

CSS Flex или Flex Box

Flex — это набор правил для автоматического растягивания нескольких столбцов и строк внутри родительского контейнера.

display:flex

В отличие от многих других свойств CSS, в Flex есть основной контейнер и вложенные в него элементы. Некоторые свойства CSS-Flex относятся только к контейнеру. А другие можно применить только к элементам внутри него.

Вы можете думать о flex-элементе как о родительском контейнере со свойством display: flex. Элемент, помещенный в контейнер, называется item. Каждый контейнер имеет границы начала(flex-start) и конца гибкости(flex-end), как показано на этой диаграмме.

Горизонтальная (main) и вертикальная (cross) оси

Хотя список элементов представлен линейно, необходимо обращать внимание на строки и столбцы. По этой причине Flex включает в себя координатные оси. Горизонтальная ось называется main-axis, а вертикальная — cross-axis.

Чтобы управлять шириной содержимого контейнера и промежутками между элементами, которые растягиваются вдоль main-axis, необходимо использовать Justify-content. Для управления вертикальными изменениями элементов необходимо использовать align-items.

Если у вас есть 3 столбца и 6 элементов, Flex автоматически создаст вторую строку для размещения оставшихся элементов. Если у вас в списке более 6 элементов, будут созданы дополнительные строки.

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

Вы можете определять количество столбцов.

Распределение строк и столбцов внутри родительского элемента определяется свойствами CSS Flex flex-direction, flex-wrap и некоторыми другими, которые будут продемонстрированы дальше.

:У нас есть произвольное n-количество элементов, расположенных в контейнере. По умолчанию элементы растягиваются слева направо. Однако направление можно изменить.
Direction

Можно задать направление движения элементов (по умолчанию слева направо).

flex-direction: row-reverse изменяет направление движения списка элементов. По умолчанию стоит значение row, что означает движение слева направо.

Wrap

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

Flow

flex-flow включает в себя flex-direction и flex-wrap, что позволяет определять их с помощью одного свойства.

Примеры:

Направление можно изменить, чтобы сделать вертикальную ось главной.

Когда мы меняем flex-direction на column, свойство flex-flow ведет себя точно так же, как и в предыдущих примерах. За исключением wrap-reverse, когда элементы переносятся снизу вверх.

justify-content

Я получил много просьб прояснить приведенный выше пример. Для этого я создал анимацию:

Анимированные возможности justify-content.

Надеюсь, эта CSS-анимация поможет лучше понять работу justify content.

Свойства следующие:flex-direction:row; justify-content: flex-start | flex-end | center | space-between | space-around | stretch | space-evenly. В этом примере мы используем только 3 элемента в строке.

Нет никаких ограничений на количество элементов, которые можно использовать в Flex. Эти диаграммы демонстрируют только поведение элементов, когда одно из перечисленных значений применяется к свойству justify-content .

То же свойство justify-content используется для выравнивания элементов, когда flex-direction: column.
Packing Flex Lines (согласно спецификации Flex)

Я не уверен, реализовано ли это в каком-либо браузере, но когда-то это было частью спецификации CSS-flex и, вероятно, стоит упомянуть об этом для полноты картины.

В спецификации Flex это называется «Packing Flex Lines». По сути, это работает так же, как в примерах выше. Однако стоит обратить внимание, что интервал расположен между целыми группами элементов. Это полезно, когда вы хотите создать зазоры между группами.

Packing Flex Lines, но теперь с flex-direction: column
align-items

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

flex-basis

flex-basis работает аналогично другому свойству CSS: min-width. Оно увеличивает размер элемента в зависимости от содержимого. Если свойство не задействуется, то используется значение по умолчанию.

flex-grow

flex-grow применяется к конкретному элементу и масштабирует его относительно суммы размеров всех других элементов в той же строке, которые автоматически корректируются в соответствии с заданным значением свойства. В примере значение flex-grow для элементов было установлено на 1, 7 и (3 и 5) в последней строке.

flex-shrink

flex-shrink — это противоположность flex-grow. В примере значение flex-shrink равно 7. При таком значении размер элемента равен 1/7 размера окружающих его элементов (размер которых автоматически скорректирован).

При работе с отдельными элементами можно использовать только одно свойство из трёх: flex-grow , flex-shrink или flex-base.

order

Используя свойство order , можно изменить естественный порядок элементов.

justify-items

И последнее, что нужно для тех, кто хочет использовать CSS Grid вместе с Flex Box… justify-items в CSS Grid похожи на justify-content в Flex. Свойства, описанные на приведенной выше диаграмме, не будут работать в Flex, но в значительной степени эквивалентны сетке для выравнивания содержимого ячеек.

Мы в веб-студии ITSOFT перешли на Flex в 2010 году. В основе всех наших новых проектов лежит именно эта технология. Наш опыт показал, что она позволяет создавать адаптивные и кроссбраузерные сайты с действительно красивым дизайном.

При использовании Flex нужно учитывать, что:

  • Flex-элементы по умолчанию ужимаются под свое содержимое; Это может пригодиться, когда есть блоки, размер которых изначально неизвестен и зависит от количества контента.

    Примеры: пункты меню в https://ketoplus.ru/

  • Внешние отступы flex-элементов не схлопываются и не выпадают, в отличие от блочной модели.

    Схлопывание и выпадание отступов полезно, в основном, при верстке текстовых страниц, поэтому во избежание путаницы в отступах при создании сеток отсутствие такого поведения приходится очень кстати.

    Пример: блоки в http://velpharm.ru/about/veltrade/

  • Flex-элементы умеют перераспределять свободное пространство вокруг себя, таким образом меняя свои размеры;

    Больше не нужно вручную задавать ширину в процентах флекс-элементам, если необходимо равномерно заполнить все пространство флекс-контейнера. Браузер сам рассчитает размеры и распределит элементы по флекс-контейнеру.

    Пример: главная страница http://oflomil.ru/

  • Внутри одного флекс-контейнера можно менять порядок флекс-элементов, хотя в DOM-дереве порядок остается неизменным.

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

    Пример: разный порядок следования логотипа и навигации в шапке в мобильной и десктопной версиях (http://elmucin.ru/).

  • Flex-элементу можно задать не только горизонтальные автоматические отступы, но и вертикальные; к тому же есть специальные свойства, с помощью которых очень просто выравнивать элементы внутри флекс-контейнера по горизонтали или вертикали.

    Пример: кнопка всегда находится в нижней части карточки статьи (https://rabiet.ru/experts/), блок продукция (https://stomatofit.ru/#products).

  • Flex-элементы могут переноситься на следующую строку, если указано соответствующее свойство.

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

    Пример: каталог Велфарм (http://velpharm.ru/catalog/), блок Где купить (http://valosemid/#partners, https://gopantomid.ru/)

Стоит отметить, что Flexbox поддерживается в Internet Explorer 10-11, хоть и с некоторыми оговорками.

Некоторые интересные фишки Flex мы реализовали на сайте oflomil.ru. На разводящей странице есть 3 столбца на всю высоту видимой области экрана. На мобильном они трансформируются в 3 строки, каждая из которых равномерно занимает место в видимой части экрана. На продуктовых страницах без единого скрипта реализована бегущая строка. Текстовые элементы расположены в ряд благодаря inline-flex. Все свободное пространство в ряду распределено между этими элементами равномерно. Наш собственный сайт также свёрстан с использованием Flex.

Реализация бегущей строки с Flex

Из недостатков можно отметить то, что Flex не хватает при верстке писем. Не во всех почтовых клиентах он работает корректно.

В скором времени большую распространённость получит технология Grid. Однако Grid не замена Flexbox. Флексы в связке с гридами помогут решать задачи, которые раньше были сложными или вовсе невозможными. К примеру, Masonry-раскладка — одна из тех вещей, которую нельзя полноценно реализовать на данный момент. После появления возможностей спецификации Grid Layout 3 уровня в браузерах, реализация такой раскладки станет возможной и к тому же простой.

Источники: оригинал руководства с картинками


Дата-центр ITSOFT — размещение и аренда серверов и стоек в двух дата-центрах в Москве. За последние годы UPTIME 100%. Размещение GPU-ферм и ASIC-майнеров, аренда GPU-серверов, лицензии связи, SSL-сертификаты, администрирование серверов и поддержка сайтов.  

Исследование CSS-свойства flex / Хабр

Вам когда-нибудь было интересно узнать о том, как работает сокращённое CSS-свойство flex? Оно позволяет задавать значения свойств flex-grow, flex-shrink и flex-basis. Я обратил внимание на то, что данное свойство чаще всего используют в виде flex: 1, что позволяет flex-элементу растягиваться, занимая доступное пространство.

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

Свойство flex-grow

CSS-свойство flex-grow используется для настройки так называемого «коэффициента роста» элементов (flex grow factor), что позволяет этим элементам растягиваться, занимая доступное пространство. В качестве значений этого свойства можно использовать только целые числа. Рассмотрим пример.

Вот HTML-разметка:

<div>
  <div></div>
  <div></div>
  <div></div>
</div>

Вот стили:

.wrapper {
    display: flex;
    flex-wrap: wrap;
}
.item {
    flex-grow: 1;
}

Свойство flex-grow может воздействовать на ширину или на высоту элемента, что зависит от значения свойства flex-direction. Рассматривая следующие примеры, учитывайте то, что используемое в них свойство flex-direction установлено в значение, задаваемое по умолчанию (row). Если это будет не так — я об этом скажу.

Обратите внимание на то, что без использования flex-grow ширина flex-элементов будет установлена в значение, применяемое по умолчанию, то есть — она будет равна их исходной ширине. А если используется flex-grow: 1, то доступное свободное пространство распределяется между элементами.

Вверху свойство flex-grow не применяется. Внизу применяется flex-grow: 1

Возможно, тут у вас возникнет вопрос о том, как именно между flex-элементами распределяется свободное пространство. Это — хороший вопрос. Скоро я на него отвечу.

На следующем рисунке показано то, как элементы выглядят без использования свойства flex-grow. Другими словами, здесь показаны элементы, имеющие свой обычный размер.

Свойство flex-grow не используется

Для того чтобы понять то, как вычисляется ширина flex-элементов, взгляните на формулы, показанные ниже. Я нашёл эти формулы в материале Саманты Минг (за что её благодарю!).

Давайте посчитаем ширину первого элемента — того, в котором находится текст CSS.

Нахождение ширины элемента

Итак, тут используется такая формула:

Ширина элемента = ((flex-grow элемента / сумма значений flex-grow) * доступное пространство) + исходная ширина элемента

Разберём эту формулу:

  • flex-grow элемента — это коэффициент роста, заданный для элемента.
  • сумма значений flex-grow — это сумма значений коэффициентов роста всех элементов.
  • доступное пространство — это свободное пространство контейнера, которое имеется в нём до применения механизмов flex-grow.
  • исходная ширина элемента — это, как несложно догадаться, ширина элемента до её изменения с помощью flex-grow.

В результате подстановки в эту формулу реальных значений получается следующее:

Ширина элемента = ( (1 / 3) * 498) + 77 = 241

Разные значения flex-grow, задаваемые для разных элементов

В предыдущем примере для всех flex-элементов использовалось одно и то же значение flex-grow. Попробуем теперь назначить первому элементу свойство flex-grow: 2. Как будет вычисляться ширина элементов теперь? Рассматривая следующую формулу, помните о том, что ширина свободного пространства в нашем примере равняется 498px.

Нахождение ширины элемента в ситуации, когда разным элементам заданы разные значения flex-grow

Как видите, тут используется тот же механизм расчёта ширины элементов, который был рассмотрен выше. Главное отличие заключается в том, что значение flex-grow для первого элемента задано как 2, что находит отражение в формуле расчёта ширины элементов.

Можно ли использовать 0 в качестве значения flex-grow?

Конечно можно! Так как свойство flex-grow принимает целочисленные значения, в него можно записать и 0. Это будет означать, что мы не хотим, чтобы flex-элемент менял бы размеры, занимая некоторую часть свободного пространства контейнера.

Последствия установки свойства flex-grow в значение 0

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

Использование flex-grow не приводит к тому, что элементы становятся одинаковыми

Существует распространённое заблуждение, в соответствии с которым использование flex-grow позволяет сделать так, чтобы соответствующие элементы имели бы одинаковую ширину. Это — ошибка. Смысл использования

flex-grow заключается в распределении доступного пространства между элементами. Как вы могли видеть, анализируя вышеприведённые формулы, итоговая ширина flex-элементов вычисляется на основе их исходной ширины (то есть той, которую они имели до применения flex-grow).

Если вам нужно сделать так, чтобы все элементы из некоего набора имели бы одинаковую ширину, то знайте, что сделать это можно, воспользовавшись свойством flex-basis. Мы поговорим об этом ниже.

Свойство flex-shrink

Свойство flex-shrink позволяет задать так называемый «коэффициент сжатия» элемента (flex shrink factor). Если размер всех flex-элементов больше, чем размер их контейнера, размер элементов будет уменьшен в соответствии с назначенными им значениями свойства flex-shrink.

Центральному элементу назначено свойство flex-shrink: 1

Вот стили к этому примеру:

.item-2 {
    width: 300px;
    flex-shrink: 1;
}

Браузер сделает ширину элемента item-2 равной 300px при выполнении следующих условий:

  • Общая ширина всех элементов меньше ширины контейнера.
  • Ширина области просмотра страницы равна или больше ширины элемента.

Вот как элементы из предыдущего примера ведут себя при их выводе в областях просмотра разной ширины.

Ширина элемента с текстом Is не уменьшается до тех пор, пока на экране достаточно места для его вывода

Как видите, элемент не сжимается, сохраняя ширину в 300px до тех пор, пока ему хватает места.

Свойство flex-basis

Свойство flex-basis задаёт базовый размер flex-элемента, который он имеет до распределения свободного пространства в соответствии с коэффициентами гибкости, задаваемыми свойствами flex-grow и flex-shrink. По умолчанию, для всех значений, кроме auto и content, значение flex-basis равняется ширине элемента, а при использовании свойства flex-direction: column — его высоте.

Свойство flex-basis принимает те же значения, которые могут принимать свойства width и height. Значением, задаваемым по умолчанию, является auto, которое устанавливается на основе значения content. Значение content задаётся автоматически, на основе размера содержимого flex-элемента.

Применим к элементу item-1 из нашего примера следующие стили:

.item-1 {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 50%;
}

Использование свойства flex-basis: 50%

Здесь первому элементу назначено свойство flex-basis: 50%. При этом тут важно сбросить в 0 свойство flex-grow, что позволит сделать так, чтобы размер элемента не превысил бы 50%.

Что произойдёт, если вместо этого записать в свойство flex-basis значение 100%? Это приведёт к тому, что элемент займёт 100% ширины родительского элемента, а другие элементы будут перенесены на новую строку.

Вот соответствующие стили:

.item-1 {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 100%;
}

Результат использования свойства flex-basis: 100%;

Сокращённое свойство flex

Свойство flex позволяет, в сокращённом формате, задавать значения свойств flex-grow, flex-shrink и flex-basis. Значением по умолчанию, которое принимает это свойство, является auto. Оно соответствует flex: 0 1 auto. Это означает, что оно позволяет flex-элементам увеличиваться в размерах, основываясь на размерах их содержимого.

В данном контексте мне хотелось бы обратить ваше внимание на одну важную деталь. Речь идёт о flex-элементах с абсолютными и относительными размерами. И, кстати, это не имеет отношения к CSS-позиционированию. Это относится к модели flexbox.

Flex-элементы с относительными размерами

Вот CSS-код:

.item {
    /* Значение, используемое по умолчанию, эквивалентно flex: 1 1 auto */
    flex: auto;
}

Здесь размер flex-элементов основан на их содержимом. В результате элементы, в которых больше содержимого, будут больше.

Элемент, в котором больше содержимого, будет больше

Flex-элементы с абсолютными размерами

Если же, в отличие от предыдущего примера, свойство flex-basis будет установлено в значение 0, это приведёт к тому, что все flex-элементы увеличатся до одного и того же размера.

Вот стиль:

.item {
    /* Аналогично flex: 1 1 0% */
    flex: 1;
}

Элементы имеют одинаковый размер

Особенности свойства flex, которые мне нравятся

Само название свойства flex намекает на то, что оно умеет гибко работать с передаваемыми ему значениями. Это наделяет его некоторыми особенностями, которые кажутся мне привлекательными. Рассмотрим несколько примеров.

▍Одно значение без единиц измерения

Вот CSS-код:

.item {
    flex: 1;
}

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

▍Два значения без единиц измерения

Взглянем на следующий стиль:

. item {
    flex: 1 1;
}

Тут мы в явном виде задаём, соответственно, значения flex-grow и flex-shrink. При этом flex-basis будет сброшено в значение, применяемое по умолчанию.

▍Одно значение, представляющее собой некий размер

Поговорим о том, как будет «расшифрован» следующий стиль:

.item {
    flex: 100px;
    /* flex: 1 1 100px */
}

Значение 100px будет рассматриваться системой как значение flex-basis. А во flex-grow и flex-shrink будет, по умолчанию, записано 1.

▍Использование значения 0 без указания единиц измерения

Предположим, нужно установить flex-basis в значение 0, воспользовавшись свойством flex. Мы, для решения этой задачи, решим поступить так:

. item {
    flex: 0;
}

Делать так не рекомендуется, так как это способно запутать и тех, кто будет читать подобный код, и браузер. Как понять — к чему именно относится этот 0? К свойству flex-grow, flex-shrink или flex-basis? В общем — путаница получается. Вот что говорится об этом в спецификации CSS:

Ноль без указания единиц измерения, перед которым нет двух значений коэффициентов гибкости, должен интерпретироваться как значение коэффициента гибкости. Для того чтобы избежать неправильной интерпретации или ошибочного объявления свойства, авторы должны, задавая нулевое значение flex-basis, использовать единицы измерения, или ставить перед этим значением два значения, относящиеся к коэффициентам гибкости.

То есть, чтобы избежать неоднозначностей, вышеприведённый код стоит переписать так:

.item {
    flex: 0%;
    /* flex: 1 1 0% */
}

Здесь используется конструкция 0%, но можно, например, воспользоваться и конструкцией 0px.

Пользуйтесь сокращённым свойством flex

Когда вам надо задать свойства flex-grow, flex-shrink и flex-basis, лучше всего использовать для этого сокращённое свойство flex.

Заглянем в спецификацию CSS:

Авторам рекомендуется управлять гибкими элементами, используя сокращённое свойство flex, а не применяя напрямую полные имена свойств, так как при применении сокращённого свойства производится корректный сброс неуказанных значений к состоянию, соответствующему распространённым способам их использования.

Сценарии использования и практические примеры


▍Аватары пользователей


Аватар, при настройке которого использовано свойство flex

Модель flexbox часто используется для оформления компонентов страниц, имеющих отношение к пользователям. Например, это касается аватара пользователя и соответствующей подписи, которые должны находиться на одной строке.

Вот разметка:

<div>
    <img src="shadeed.jpg" alt="" />
    <div>
        <h4>Ahmad Shadeed</h4>
        <p>Author of Debugging CSS</p>
    </div>
</div>

Вот стиль:

.user {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}
.user__avatar {
    flex: 0 0 70px;
    width: 70px;
    height: 70px;
}

Обратите внимание на то, что, настраивая элемент user__avatar, я применил свойство flex: 0 0 70px. Это важно, так как без этой настройки в некоторых устаревших браузерах изображение может вывестись неправильно. Более того, приоритет свойства flex выше приоритета свойства width (если речь идёт о ситуации, в которой применяется flex-direction: row) и свойства height (в ситуации, когда применяется flex-direction: column).

Если изменить размер аватара, воздействуя только на свойство flex, браузер проигнорирует то, что задано в свойстве width. Вот соответствующий стиль:

.user__avatar {
    /* Ширина будет 100px, а не 70px */
    flex: 0 0 100px;
    width: 70px;
    height: 70px;
}

▍Заголовок элемента


Заголовок элемента

Предположим, нам надо оформить заголовок некоего элемента. Этот заголовок должен занять всё доступное ему пространство. Решить эту задачу можно с помощью свойства flex: 1:

.page-header {
    display: flex;
    flex-wrap: wrap;
}
.page-header__title {
    flex: 1;
}

▍Поле ввода для подготовки сообщения


Поле ввода

Подобные поля часто встречаются в приложениях для обмена сообщениями, вроде тех, что есть в Facebook и Twitter. Такое поле должно занимать всё доступное ему пространство. При этом кнопка для отправки сообщения должна иметь фиксированную ширину. Вот как это выглядит в CSS:

form {
    display: flex;
    flex-wrap: wrap;
}
input {
    flex: 1;
    /* Другие стили */
}

Этот пример являет собой удачную демонстрацию использования свойства flex-grow.

Надо отметить, что некоторым способам использования свойства flex не уделяется достаточно внимания в публикациях, посвящённых этому свойству. Давайте это исправим.

▍Выравнивание нижних элементов, находящихся на разных карточках


Цель — выровнять обе даты по красной линии

Предположим, что перед нами — макет, сформированный средствами CSS Grid, в котором имеются две колонки. Проблема тут в том, что даты, выводимые в конце текстового содержимого карточек, не выровнены. А нам нужно, чтобы они находились бы на одной линии, показанной на предыдущем рисунке.

Для решения этой задачи можно воспользоваться моделью flexbox.

Вот разметка:

<div>
    <img src="thumb.jpg" alt="">
    <h4>Title short</h4>
    <time></time>
</div>

Достичь нашей цели можно, воспользовавшись свойством flex-direction: column. Элемент card__title, заголовок, можно стилизовать, применив свойство flex-grow и сделав так, чтобы он занимал бы всё доступное ему пространство. В результате окажется, что строка с датой попадёт в нижнюю часть карточки. Так произойдёт даже в том случае, если сам заголовок окажется достаточно коротким.

Вот стили:

.card {
    display: flex;
    flex-direction: column;
}
/* Первое решение */
.card__title {
    flex-grow: 1;
}

Решить эту задачу можно и не прибегая к свойству flex-grow. А именно, речь идёт о применении модели flexbox и механизма автоматической настройки внешних отступов с использованием ключевого слова auto. Я, кстати, написал об этом подробную статью.

/* Второе решение */
.card__date {
    margin-top: auto;
}

Использование разных значений для коэффициентов гибкости

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

▍Панели управления


Набор элементов управления

На подготовку этого примера меня вдохновил дизайн Facebook (значки я тоже взял оттуда). На панели управления (элемент actions в следующем коде) имеется четыре элемента. Последний (элемент actions__item.user) имеет ширину, которая меньше, чем ширина других элементов. Сформировать подобную панель управления можно так:

.actions {
    display: flex;
    flex-wrap: wrap;
}
.actions__item {
    flex: 2;
}
.actions__item.user {
    flex: 1;
}

▍Анимация, в ходе которой элемент растягивается


Элемент растягивается при наведении на него указателя мыши

Flex-элементы можно анимировать при наведении на них указателя мыши. Этот приём может оказаться крайне полезным. Вот соответствующий CSS-код:

. palette {
    display: flex;
    flex-wrap: wrap;
}
.palette__item {
    flex: 1;
    transition: flex 0.3s ease-out;
}
.palette__item:hover {
    flex: 4;
}

Здесь можно найти видео, демонстрирующее всё это в действии.

▍Увеличение размера активной карточки

Мне очень нравится этот проект на CodePen, в котором реализован механизм увеличения размеров карточки с описанием тарифного плана, по которой щёлкнул пользователь. Размер карточки меняется благодаря установке её свойства flex-grow в значение 4.

Увеличение размера активной карточки

▍Что делать, если содержимое контейнера больше самого контейнера?


Элементы не помещаются в контейнер

Некоторое время тому назад мне пришло письмо от одного из моих читателей, который рассказал мне о возникшей у него проблеме и попросил помочь с её решением. Суть этой проблемы представлена на предыдущем рисунке. Здесь есть пара изображений, которые должны находиться в пределах элемента-контейнера, но размер этих изображений больше размеров контейнера.

Попробуем такой стиль:

.wrapper {
    display: flex;
}
.wrapper img {
    flex: 1;
}

Но даже при использовании свойства flex: 1 изображения в контейнер не помещаются. Обратимся к спецификации CSS:

Flex-элементы, по умолчанию, не уменьшаются в размерах до величин, меньших, чем размеры их содержимого (длина самого длинного слова или элемента с фиксированным размером). Для того чтобы это изменить, нужно воспользоваться свойствами min-width или min-height.

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

.wrapper img {
    flex: 1;
    min-width: 0;
}

Подробности смотрите в этой моей статье.

Итоги

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

Пользуетесь ли вы CSS-свойством flex в своих проектах?

Свойство flex | CSS справочник

CSS свойства

Определение и применение

CSS свойство flex является короткой записью для свойств, которые позволяют определить размер для флекс элемента, установленный по умолчанию, указать на сколько элемент может увеличится, либо уменьшится по отношению к остальным флекс элементам в одном контейнере, а именно:

  • flex-grow (number | initial | inherit)
  • flex-shrink (number | initial | inherit)
  • flex-basis (auto | width | initial | inherit)

Поддержка браузерами

Свойство
Chrome

Firefox

Opera

Safari

IExplorer

Edge
flex29. 0
21.0
-webkit-
28.0
18.0
-moz-
17.09.0
6.1
-webkit-
11.0
10.0
-ms-
12.0

CSS синтаксис:

flex:"flex-grow flex-shrink flex-basis | auto | none | initial | inherit";
Если указывается одно числовое значение оно устанавливается для flex-grow,
если указаны единицы измерения CSS, то для flex-basis
Если второе значение соответствует числовому значению, то оно устанавливается для flex-shrink,
если указаны единицы измерения CSS, то для flex-basis и т.п.

JavaScript синтаксис:

object.style.flex = "0 1 auto"

Значения свойства

ЗначениеОписание
flex-growЧисло, которое указывает, на сколько будет увеличен блок по отношению к остальным флекс элементам в контейнере. Отрицательные значения не допускаются. Значение по умолчанию 0.
flex-shrinkЧисло, которое указывает, на сколько будет уменьшен блок по отношению к остальным флекс элементам в контейнере (при недостатке свободного пространства). Отрицательные значения не допускаются. Значение по умолчанию 1.
flex-basisОпределяет размер для флекс элемента, установленный по умолчанию перед распределением пространства в контейнере. Отрицательные значения не допускаются. Размер указывается в единицах измерения CSS(px, em, pt и т.д.), либо высчитывается автоматически браузером исходя из содержания элемента. Значение по умолчанию auto.
autoСоответствует значению flex : 1 1 auto;.
noneСоответствует значению flex : 0 0 auto;.
initialУстанавливает свойство в значение по умолчанию. Соответствует значению flex : 0 1 auto;.
inheritУказывает, что значение наследуется от родительского элемента.

Версия CSS

CSS3

Наследуется

Нет.

Анимируемое

Да.

Пример использования

Рассмотрим пример увеличения флекс элементов в CSS, используя свойство flex:

<!DOCTYPE html>
<html>
<head>
<title>Увеличение флекс элементов в CSS</title>
<style> 
. container {
width: 100%; /* устанавливаем ширину блока */
height: 100px;  /* устанавливаем высоту блока */
display: -webkit-flex;  /* для поддержки ранних версий браузеров */
display: flex;  /* элемент отображается как блочный flex-контейнер */
color: white;  /* устанавливаем цвет шрифта */
} 
.container div:nth-of-type(1) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем первый <div> в контейнере)
-webkit-flex: 1;  /* для поддержки ранних версий браузеров */
flex: 1;  /* число, которое указывает, на сколько будет увеличен блок по отношению к остальным флекс элементам */
background: orange;  /* устанавливаем цвет заднего фона */
} 
.container div:nth-of-type(2) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем второй <div> в контейнере)
-webkit-flex: 3;  /* для поддержки ранних версий браузеров */
flex: 3;  /* число, которое указывает, на сколько будет увеличен блок по отношению к остальным флекс элементам */
background: brown;  /* устанавливаем цвет заднего фона */
}
. container div:nth-of-type(3) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем третий <div> в контейнере)
-webkit-flex: 1;  /* для поддержки ранних версий браузеров */
flex: 1;  /* число, которое указывает, на сколько будет увеличен блок по отношению к остальным флекс элементам */
background: tan;  /* устанавливаем цвет заднего фона */
}
</style>
</head>
	<body>
		<div class = "container">
			<div>1</div>
			<div>3</div>
			<div>1</div>
		</div>
	</body>
</html>
Пример использования CSS свойства flex(увеличение флекс элементов в CSS).

Рассмотрим пример уменьшения флекс элементов в CSS, используя свойство flex:

<!DOCTYPE html>
<html>
<head>
<title>Уменьшение флекс элементов в CSS</title>
<style> 
.container {
width: 250px; /* устанавливаем ширину блока */
height: 100px;  /* устанавливаем высоту блока */
display: -webkit-flex;  /* для поддержки ранних версий браузеров */
display: flex;  /* элемент отображается как блочный flex-контейнер */
color: white;  /* устанавливаем цвет шрифта */
 /* устанавливаем два свойства для возможности масштабировать контейнер по горизонтали (изменять ширину): */
overflow: auto;  /* указываем, что при переполнении содержимое отображается (автоматический режим) */
resize: horizontal;  /* пользователь может изменять ширину элемента */
} 
. container div:nth-of-type(1) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем первый <div> в контейнере)
 -webkit-flex: 0 1 150px;  /* для поддержки ранних версий браузеров */
flex: 0 1 150px;  /* блоки по отношению к другим не увеличиваем(значение 0), указываем, что блок при недостатке места будет уменьшен по умолчанию(1), определяем начальную ширину флекс элемента (приведет сразу к уменьшению второго блока, т.к. ширина контейнера 250px)  */
background: orange;  /* устанавливаем цвет заднего фона */
} 
.container div:nth-of-type(2) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем второй <div> в контейнере)
-webkit-flex: 0 3 150px;  /* для поддержки ранних версий браузеров */
flex: 0 3 150px;  /* блоки по отношению к другим не увеличиваем(значение 0), указываем, что блок при недостатке места будет уменьшен по отношению к другим на 3, определяем начальную ширину флекс элемента (приведет сразу к уменьшению второго блока, т. к. ширина контейнера 250px)  */
background: brown;  /* устанавливаем цвет заднего фона */
}
.container div:nth-of-type(3) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем третий <div> в контейнере)
-webkit-flex: 0 1 150px;  /* для поддержки ранних версий браузеров */
flex: 0 1 150px;  /* блоки по отношению к другим не увеличиваем(значение 0), указываем, что блок при недостатке места будет уменьшен по умолчанию(1), определяем начальную ширину флекс элемента (приведет сразу к уменьшению второго блока, т.к. ширина контейнера 250px)  */
background: tan;  /* устанавливаем цвет заднего фона */
}
</style>
</head>
<body>
	<div class = "container">
		<div>1</div>
		<div>3</div>
		<div>1</div>
	</div>
</body>
</html>
Пример использования CSS свойства flex(уменьшение флекс элементов в CSS).

Рассмотрим пример, где мы укажем значение ширины флекс элемента по умолчанию, используя при этом единицы измерения CSS и в автоматическом режиме, используя свойство flex:

<!DOCTYPE html>
<html>
<head>
<title>Размер флекс элементов по умолчанию в CSS</title>
<style> 
. container {
width: 250px; /* устанавливаем ширину блока */
height: 100px;  /* устанавливаем высоту блока */
display: -webkit-flex;  /* для поддержки ранних версий браузеров */
display: flex;  /* элемент отображается как блочный flex-контейнер */
color: white;  /* устанавливаем цвет шрифта */
 /* устанавливаем два свойства для возможности масштабировать контейнер по горизонтали (изменять ширину): */
overflow: auto;  /* указываем, что при переполнении содержимое отображается (автоматический режим) */
resize: horizontal;  /* пользователь может изменять ширину элемента */
} 
.container div:nth-of-type(1) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем первый <div> в контейнере)
-webkit-flex: 0 1 auto;  /* для поддержки ранних версий браузеров */
flex: 0 1 auto;  /* для элемента задано значение по умолчанию (ширина элемента расчитывается по содержимомку) */
background: orange;  /* устанавливаем цвет заднего фона */
} 
. container div:nth-of-type(2) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем второй <div> в контейнере)
-webkit-flex: 0 1 150px;  /* для поддержки ранних версий браузеров */
flex: 0 1 150px;  /* элемент не увеличиваем и не уменьшаем по отношению к другим, но значение ширины по умолчанию устанавливаем равной 150px */
background: brown;  /* устанавливаем цвет заднего фона */
}
.container div:nth-of-type(3) { псевдокласс :nth-of-type() выбирает каждый указанный элемент, который является заданным дочерним элементом своего родительского элемента (выбираем третий <div> в контейнере)
-webkit-flex: 0 1 auto;  /* для поддержки ранних версий браузеров */
flex: 0 1 auto;  /* для элемента задано значение по умолчанию (ширина элемента расчитывается по содержимомку) */
background: tan;  /* устанавливаем цвет заднего фона */
}
</style>
</head>
<body>
	<div class = "container">
		<div>auto</div>
		<div>150px</div>
		<div>auto</div>
	</div>
</body>
</html>
Пример использования CSS свойства flex(размер флекс элементов по умолчанию в CSS). CSS свойства

CSS свойство flex

❮ Назад Вперед ❯

Свойство flex определяет компоненты гибкой длины. Это сокращенное свойство для flex-grow, flex-shrink и flex-basis. Flex-shrink и flex-basis — дополнительные свойства, т. е. нет необходимости включать их в объявление flex.

Свойство flex является частью модуля макета гибкого контейнера. Если нет гибких элементов, свойство flex не будет иметь эффекта.

Если не включать свойство flex-grow в сокращенное объявление, значение будет равно 1 по умолчанию. Если не включать свойство flex-shrink в сокращенное объявление, значение будет равно 1 по умолчанию. Фактор свойства flex-shrink увеличивается с помощью flex-basis, когда есть распределенное отрицательное пространство. Когда свойство flex-basis не включено в сокращенное объявление, будет задано значение 0%.

«Auto» — значение по умолчанию свойства flex. Это свойство устанавливает размер элементов на основе свойства width/height. (Если свойство задает основной размер элемента как «auto», это значение устанавливает размер флекс-элемента на основе его контента.)

Значение «initial» устанавливает размер элемента на основе свойства width/height (или на основе контента, если свойства не заданы). При этом значении элемент становится негибким, если доступно свободное пространство, но дает возможность максимально уменьшить элемент в случае недостаточного пространства. Возможности выравнивания и auto margins могут быть использованы для выравнивания флекс-элементов по главной оси.

Значение «none» устанавливает размер элемента на основе свойств width и height. Является полностью негибким.

Примечание: Начальные значения свойств flex-grow и flex-shrink отличаются от их значений по умолчанию, когда они не включены в сокращенное объявление flex.

flex: flex-grow | flex-shrink | flex-basis | auto | initial | inherit;

Пример

<!DOCTYPE html>
<html>
  <title>Заголовок документа</title>
  <head>
    <style> 
      . box {
      width: 350px;
      height: 200px;
      padding-left: 0;
      list-style-type: none;	
      border: 1px dashed black;
      display: -webkit-flex;
      display: flex;
      }
      .box div {
      flex: 1;
      }
      .green {background-color: #8ebf42}
      .blue {background-color: #1c87c9;}
      .gray {background-color: #666}
    </style>
  </head>
  <body>
    <h3>Пример свойства flex</h3>
    <div>
      <div>GREEN</div>
      <div>BLUE</div>
      <div>GRAY</div>
    </div>
  </body>
</html>

Попробуйте сами!

Пример, где один из элементов имеет другой размер:

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Заголовок документа</title>
    <style>
      . box {
      width: 320px;
      height: 120px;
      border: 1px solid #666;
      display: -webkit-flex; /* Safari */
      display: flex;
      }
      /* Safari 6.1+ */
      .box div:nth-of-type(1) {-webkit-flex-grow: 1;}
      .box div:nth-of-type(2) {-webkit-flex-grow: 4;}
      .box div:nth-of-type(3) {-webkit-flex-grow: 1;}
      .box div:nth-of-type(4) {-webkit-flex-grow: 1;}
      .box div:nth-of-type(5) {-webkit-flex-grow: 1;}
      /* Standard syntax */
      .example div:nth-of-type(1) {flex-grow: 1;}
      .example div:nth-of-type(2) {flex-grow: 4;}
      .example div:nth-of-type(3) {flex-grow: 1;}
      .example div:nth-of-type(4) {flex-grow: 1;}
      .example div:nth-of-type(5) {flex-grow: 1;}
    </style>
  </head>
  <body>
    <h3>Пример flex-grow</h3>
    <div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </body>
</html>

Попробуйте сами!

Пример с flex-shrink:

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Заголовок документа</title>
    <style>
      . box {
      width: 320px;
      height: 120px;
      border: 1px solid #666;
      display: -webkit-flex; /* Safari */
      display: flex;
      }
      .box div {
      -webkit-flex-grow: 1; /* Safari 6.1+ */
      -webkit-flex-shrink: 2; /* Safari 6.1+ */
      -webkit-flex-basis: 100px; /* Safari 6.1+ */
      flex-grow: 1;
      flex-shrink: 2;
      flex-basis: 100px;
      }
      .box div:nth-of-type(2) {
      -webkit-flex-shrink: 5; /* Safari 6.1+ */
      flex-shrink: 5;
      }
    </style>
  </head>
  <body>
    <h3>Пример flex-shrink</h3>
    <div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </body>
</html>

Попробуйте сами!

Обзор CSS Flexbox layout — технологии для расположения блоков на HTML-странице

Flexbox разработан для оптимизации раскладки элементов, в отличие от float. Он облегчает выравнивание элементов по горизонтали и вертикали, смену направления и порядок отображения элементов, позволяет растягивать блоки на всю высоту родителя или опускать их к нижнему краю.

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

Что же такое Flexbox

С уверенностью можно сказать, что Flexbox призван помочь нам с некоторыми особо неприятными моментами CSS (например, вертикальное выравнивание). И в решении данного вопроса ему нет равных. Но порой разобраться в принципах работы этой технологии бывает сложно. Особенно если у вас не хватает опыта или вы совсем новичок.

Главная задача Flexbox — сделать слои гибкими, а работу с ними максимально простой. Идея гибкой (flex) разметки — позволить контейнеру менять ширину/высоту (и порядок) своих элементов, чтобы наилучшим образом заполнить доступное пространство (в основном для размещения на всех типах и размерах экранов). Flexbox контейнер расширяет элементы, чтобы заполнить свободное пространство, или сжимает их, чтобы избежать переполнения.

Так как Flexbox — это полноценный модуль, а не отдельное свойство, он содержит целый набор свойств.

Некоторые элементы предназначены для работы с родительским контейнером «flex-контейнер». А другие касаются дочерних элементов (известных, как «flex-элементы»).

Если обычная система компоновки основана на блочных и строковых направлениях, то Flexbox основан на «flex-flow направлениях».

Чтобы начать работать с Flexbox, нам нужно сделать наш контейнер flex-контейнером. Делается это так:

<div class="flex-container">
    <div class="box box-1">Item 1</div>
    <div class="box box-2">Item 2</div> 
    <div class="box box-3">Item 3</div> 
    <div class="box box-4">Item 4</div> 
</div>
.flex-container {
    display: flex;
}

Как можно заметить, элементы выстроились в ряд.

Flex-direction

У flex-контейнера есть две оси: главная ось и перпендикулярная ей.

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

Свойство flex-direction позволяет вращать главную ось.

Важно, что свойство flex-direction: column не выравнивает квадраты по оси, перпендикулярной главной. Главная ось сама меняет свое расположение и теперь направлена сверху вниз.

Также существует еще несколько параметров для flex-direction: row-reverse и column-reverse.

.flex-container {
  display: flex;
  flex-direction: column-reverse;
}
.flex-container {
  display: flex;
  flex-direction: row-reverse;
}

Justify-сontent

Свойство justify-content: может принимать пять разных значений:

flex-start;
flex-end;
center;
space-between;
space-around. 

Работу всех этих свойств можно посмотреть, вписав в пример ниже:

Если justify-content работает с главной осью, то align-items работает с осью, перпендикулярной главной оси.

Свойство также может принимать пять разных значений:

flex-start;
flex-end;
center;
stretch;
baseline;

Как показано в примере, свойства justify-content и align-items довольно легко объединять:

Align-self

Align-self позволяет выравнивать элементы по отдельности.

.flex-container {
  display: flex;
  min-height:100px;
  flex-direction: row;
  justify-content: center;
  align-items: flex-start;
}
.box-1 {
  width:50px;  
}
.box-2 {
  width:70px;
}
.box-3 {
  align-self:center;
  width:90px;
}
.box-4 {
  align-self:flex-end;
}

Flex-grow

Свойство определяет возможность элемента увеличиваться в размере при необходимости. Оно принимает безразмерное значение в качестве пропорции, которое определяет, какое количество свободного пространства внутри контейнера должен занимать элемент.

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

<div class="flex-container">
  <div class="box box-1">Item 1</div>
  <div class="box box-2">Item 2</div> 
  <div class="box box-3">Item 3</div> 
  <div class="box box-4">Item 4</div> 
</div>
.box-1 {
  flex-grow: 1;
}
.box-2 {
  flex-grow: 2;
}
.box-3 {
  flex-grow: 3;
}
.box-4 {
  flex-grow: 4;
}

Указывать отрицательные числа нельзя.

Flex-shrink

Это свойство определяет возможность элемента уменьшаться в размере, при необходимости.

.item {
  flex-shrink: <number>; /* по умолчанию 1 */
}

Указывать отрицательные числа нельзя.

Flex

Это сокращение для flex-grow, flex-shrink и flex-basis. Второй и третий параметры (flex-shrink и flex-basis) не обязательны. Значение по умолчанию установлено в 0 1 auto.

Рекомендуется использовать это сокращённое свойство, а не указывать значения индивидуально.

Поддержка браузерами

Chrome - 21+
Safari - 3.1+
Firefox - 22+
Opera - 12.1+
IE - 11
Edge
Android - 2.1+
iOS - 3.2+

Заключение

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

Эта технология больше подходит для компонентов приложения и небольших макетов, хотя и весьма сложных, тогда как спецификация CSS Grid Layout предназначена для более масштабных макетов.

Плюсы
  1. Не нужны сетки различных HTML-фреймворков
  2. Управление блоками абсолютно наглядно и гибко.
  3. Полностью решена проблема вертикального позиционирования.
  4. Полная поддержка всеми современными браузерами, кроме Internet Explorer.
Минусы
  1. Невозможность использования под Internet Explorer 9.
  2. Internet Explorer 10+ не понимают некоторые условия Flexbox.


Этот материал на английском языке — CSS Flex-Box: Web-Development Guide


Читайте также: Обзор CSS Grid — технологии для упрощения разметки HTML-страниц

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Теми: CSS, frontend, HTML, tech, Web

flex-basis — CSS: Каскадные таблицы стилей

CSS-свойство flex-basis задает начальный основной размер гибкого элемента. Он устанавливает размер блока содержимого, если не указано иное с помощью box-sizing .

В этом примере для свойств flex-grow и flex-shrink установлено значение 1 для всех трех элементов, что указывает на то, что flex-элемент может увеличиваться и уменьшаться от исходного flex-basis .

Демо затем изменяет flex-basis на первый элемент. Затем он будет расти и сжиматься от этой гибкой основы. Это означает, что, например, когда flex-basis первого элемента равен 200px , он будет начинаться с 200px, но затем сжиматься, чтобы соответствовать доступному пространству, а другие элементы имеют размер не менее min-content . .

На изображении ниже показано, как Firefox Flexbox Inspector помогает понять, какой размер становится у элементов:

Примечание: В случае, если для элемента установлены flex-basis (кроме auto ) и width (или height в случае flex-direction: column ) , база имеет приоритет.

 /* Укажите <'ширину'> */
flex-база: 10em;
flex-база: 3px;
flex-база: 50%;
flex-основа: авто;
/* Ключевые слова внутреннего размера */
flex-basis: максимальное содержание;
flex-база: мин-контент;
flex-basis: fit-контент;
/* Автоматический размер на основе содержимого гибкого элемента */
flex-база: контент;
/* Глобальные значения */
flex-база: наследовать;
flex-база: начальная;
flex-база: вернуться;
flex-basis: revert-слой;
flex-база: не установлена;
 

Свойство flex-basis указывается либо как ключевое слово content , либо как <'width'> .

Значения

<'ширина'>

Абсолютное , основного свойства размера родительского гибкого контейнера или ключевое слово auto . Отрицательные значения недействительны. По умолчанию авто .

содержание

Указывает автоматическое изменение размера на основе содержимого гибкого элемента.

Примечание: Это значение отсутствовало в первоначальном выпуске Flexible Box Layout, поэтому некоторые более старые реализации не поддерживают его. Аналогичный эффект можно получить, используя auto вместе с основным размером (шириной или высотой) auto .

  • Первоначально flex-basis:auto означало «посмотрите на мой ширина или высота недвижимость».
  • Затем flex-basis:auto было изменено на автоматическое изменение размера, а «основной размер» был введен как ключевое слово «посмотрите на мое свойство width или height ». Он был реализован в ошибке 1032922.
  • Затем это изменение было отменено в ошибке 1093316, поэтому auto еще раз означает «посмотрите на мое свойство width или height «; и новое ключевое слово content вводится для запуска автоматического изменения размера. (ошибка 1105111 связана с добавлением этого ключевого слова).
 flex-basis = 
контент |
<'width'>

Установка начальных размеров гибкого элемента

HTML
 
  • 1: тест на основе гибкости
  • 2: тест на гибкость
  • 3: тест на гибкость
  • 4: проверка гибкости
  • 5: проверка гибкости
<ул>
  • 6: тест гибкости
  • КСС
     .контейнер {
      семейство шрифтов: arial, без засечек;
      маржа: 0;
      заполнение: 0;
      тип стиля списка: нет;
      дисплей: гибкий;
      flex-wrap: обернуть;
    }
    .flex {
      фон: #6ab6d8;
      отступ: 10 пикселей;
      нижняя граница: 50 пикселей;
      граница: 3 пикселя сплошная #2e86bb;
      белый цвет;
      размер шрифта: 14px;
      выравнивание текста: по центру;
      положение: родственник;
    }
    . flex :: после {
      положение: абсолютное;
      z-индекс: 1;
      слева: 0;
      верх: 100%;
      поле сверху: 10px;
      ширина: 100%;
      цвет: #333;
      размер шрифта: 12px;
    }
    .flex1 {
      flex-основа: авто;
    }
    .flex1 :: после {
      содержание: "авто";
    }
    .flex2 {
      flex-basis: максимальное содержание;
    }
    .flex2 :: после {
      контент: "максимальное содержание";
    }
    .flex3 {
      flex-база: мин-контент;
    }
    .flex3 :: после {
      контент: "мин-контент";
    }
    .flex4 {
      flex-basis: fit-контент;
    }
    .flex4:: после {
      контент: "фит-контент";
    }
    .flex5 {
      flex-база: контент;
    }
    .flex5:: после {
      контент: "контент";
    }
     
    Результаты
    . Включите JavaScript для просмотра данных.
    • Руководство CSS Flexbox: Основные понятия Flexbox
    • Руководство по CSS Flexbox: Управление соотношением гибких элементов вдоль главной оси
    • ширина

    Последнее изменение: , участниками MDN

    Что происходит при создании Flexbox Flex Container? — Smashing Magazine

    • 14 минут чтения
    • CSS, CSS-сетка, Макеты, Flexbox
    • Поделиться в Twitter, LinkedIn
    Об авторе

    Рэйчел Эндрю — веб-разработчик, писатель и спикер. Она является автором ряда книг, в том числе The New CSS Layout. Она одна из тех, кто стоит за… Больше о Рэйчел ↬

    В моем идеальном мире CSS Grid и Flexbox должны были появиться вместе, полностью сформированными, чтобы составить систему макетов для Интернета. Вместо этого, однако, сначала мы получили Flexbox, и, поскольку он лучше подходит для создания макетов с сеткой, чем с плавающей запятой, мы получили множество сеточных систем на основе Flexbox. На самом деле, многие места, где люди находят Flexbox сложным или запутанным, на самом деле связаны с этой попыткой сделать его методом компоновки сетки.

    В коротком цикле статей я потрачу немного времени на детальную распаковку Flexbox — так же, как я делал это в прошлом с сеткой. Мы посмотрим, для чего был разработан Flexbox, что он действительно делает хорошо и почему мы не можем выбрать его в качестве метода компоновки. В этой статье мы подробно рассмотрим, что на самом деле происходит, когда вы добавляете 9Отображение 0004: flex в вашу таблицу стилей.

    Гибкий контейнер, пожалуйста!

    Чтобы использовать Flexbox, вам нужен элемент, который будет flex-контейнером. В вашем CSS вы используете display: flex :

    См. Pen Smashing Flexbox Series 1: display: flex; Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: дисплей: гибкий; Рэйчел Эндрю (@rachelandrew) на CodePen.

    Давайте немного подумаем о том, что отображает : flex действительно означает. В модуле отображения уровня 3 каждое значение отображения описывается как фактически являющееся комбинацией двух вещей: модели внутреннего отображения и модели внешнего отображения. Когда мы добавляем display: flex , мы на самом деле определяем display: block flex . Тип внешнего отображения нашего гибкого контейнера — block ; он действует как элемент уровня блока в обычном потоке. Тип внутреннего отображения — flex , поэтому элементы непосредственно внутри нашего контейнера будут участвовать в гибком макете.

    Это то, о чем вы, возможно, никогда не задумывались, но, вероятно, все равно понимаете. Flex-контейнер действует как любой другой блок на вашей странице. Если у вас есть абзац, за которым следует гибкий контейнер, обе эти вещи ведут себя так, как мы привыкли к поведению блочных элементов.

    Больше после прыжка! Продолжить чтение ниже ↓

    Мы также можем определить наш контейнер со значением inline-flex , что похоже на использование display: inline flex , то есть контейнер flex, который действует как встроенный элемент уровня, с дочерними элементами, которые участвуют в flex макет. Дочерние элементы нашего встроенного гибкого контейнера ведут себя так же, как ведут себя дочерние элементы нашего блочного гибкого контейнера; разница заключается в том, как ведет себя контейнер в общем макете.

    См. Pen Smashing Flexbox Series 1: дисплей: inline-flex; Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: дисплей: inline-flex; Рэйчел Эндрю (@rachelandrew) на CodePen.

    Эта концепция элементов, имеющих внешний тип отображения, который определяет, как они ведут себя как блоки на странице (плюс внутренний тип отображения), диктующий, как ведут себя их дочерние элементы, весьма полезна. Вы можете применить это мышление к любому блоку в CSS. Как действует этот элемент? Как действуют дети этого элемента? Ответы касаются их внешних и внутренних моделей отображения.

    Строки или столбцы?

    После того, как мы определили наш гибкий контейнер, в игру вступают некоторые начальные значения. Без добавления каких-либо дополнительных свойств гибкие элементы отображаются в виде строки. Это происходит потому, что начальное значение свойства flex-direction равно row . Если вы не установите его, вы получите строку.

    Свойство flex-direction определяет направление главной оси. Другие значения для flex-direction :

    • столбец
    • ряд-реверс
    • столбец-обратный

    Элементы в строке размещаются с первым элементом на начальном краю встроенного измерения и отображаются в том порядке, в котором они появляются в источнике. В спецификации это ребро описывается как main-start :

    main-start находится в начале встроенного измерения (большой предварительный просмотр)

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

    main-start — это начало размера блока (большой предварительный просмотр)

    Когда мы используем row-reverse , расположение main-start и main-end меняются местами; поэтому элементы выкладываются один за другим, в конечном итоге в обратном порядке.

    main-start находится в конце встроенного измерения (большой предварительный просмотр)

    Значение column-reverse делает то же самое. Важно помнить, что эти значения не «меняют порядок элементов», хотя это то, что мы видим, они меняют место, где начинается поток элементов: переключая где основной-старт есть. Таким образом, наши элементы отображаются в обратном порядке, но это потому, что они начинают размещаться на другом конце контейнера.

    Также важно помнить, что когда это происходит, эффект чисто визуальный. Мы просим элементы отображать себя, начиная с конечного края; они по-прежнему идут в том же порядке, и это порядок, который использует программа чтения с экрана, а также порядок, в котором они могут быть пролистаны. Вы никогда не должны использовать row-reverse , когда вы действительно хотите изменить порядок элементов. Внесите это изменение в источник документа.

    Две оси Flexbox

    Мы уже показали важную особенность flexbox: возможность переключения главной оси со строки на столбец. Это переключение осей — вот почему я думаю, что часто проще сначала понять такие вещи, как выравнивание в Grid Layout. С сеткой, работающей в двух измерениях, вы можете выравнивать обе оси практически одинаково. Flexbox немного сложнее, потому что разные вещи происходят в зависимости от того, работаете ли вы с главной осью или поперечной осью.

    Мы уже встречались с главной осью, то есть с осью, которую вы определили как значение flex-direction . Поперечная ось — это другое измерение. Если вы установили flex-direction: row , ваша главная ось проходит вдоль строки, а поперечная ось — вниз по столбцам. С flex-direction: column главная ось проходит вниз по столбцу, а поперечная ось — вдоль строк. Именно здесь нам нужно изучить еще одну важную особенность Flexbox, а именно то, что она не привязана к физическим размерам экрана. Мы не говорим о строке, идущей слева направо, или о столбце сверху вниз, потому что это не всегда так.

    Режимы записи

    Когда я описывал строки и столбцы выше, я упомянул блочные и встроенные размеры . Эта статья написана на английском языке с использованием горизонтального стиля письма. Это означает, что когда вы просите Flexbox предоставить вам строку, вы получаете горизонтальное отображение ваших flex-элементов. В данном случае слева находится main-start — место, с которого начинаются предложения на английском языке.

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

    См. Pen Smashing Flexbox Series 1: строка с rtl-текстом Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: строка с текстом в формате rtl от Рэйчел Эндрю (@rachelandrew) на CodePen.

    Начальные значения flexbox означают, что если все, что я делаю, это создаю flex-контейнер, мои элементы будут начинаться справа и отображаться в направлении слева. Начальный край в линейном направлении — это место, где начинаются предложения в используемом вами режиме письма .

    Если вы оказались в режиме вертикального письма и запросили строку, ваша строка будет располагаться вертикально, потому что именно так строки текста располагаются в вертикальном языке. Вы можете попробовать это, добавив свойство write-mode в свой flex-контейнер и установив для него значение vertical-lr . Теперь, когда вы установите flex-direction на row , вы получите вертикальный столбец элементов.

    См. Pen Smashing Flexbox Series 1: ряд с вертикальным режимом письма Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: ряд с вертикальным режимом письма Рэйчел Эндрю (@rachelandrew) на CodePen.

    Таким образом, ряд может проходить горизонтально, с main-start слева или справа, а также вертикально с main-start вверху. Это по-прежнему flex-direction из row , даже если нашему привыкшему к горизонтальному тексту уму трудно представить строку, идущую вертикально!

    Чтобы элементы располагались в блочном измерении, мы устанавливаем значение flex-direction на столбец или column-reverse . На английском (или на арабском) мы видим элементы, отображаемые один поверх другого вниз по странице, начиная с верхней части контейнера.

    В режиме вертикального письма размер блока проходит по всей странице, так как это направление расположения блоков в этих режимах письма. Если вы запросите столбец в формате vertical-lr , ваши блоки будут располагаться слева направо по вертикали:

    См. Pen Smashing Flexbox Series 1: столбец в режиме записи vertical-lr Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. колонку Pen Smashing Flexbox Series 1: в режиме вертикального письма Рэйчел Эндрю (@rachelandrew) на CodePen.

    Однако независимо от того, в каком направлении отображаются блоки, если вы работаете со столбцом , то вы работаете в блочном измерении.

    Понимание того факта, что строка или столбец могут проходить в разных физических направлениях, полезно для понимания некоторых терминов, используемых для Grid и Flexbox. Мы не говорим «слева и справа» или «сверху и снизу» во Flexbox и Grid, потому что мы не делаем никаких предположений относительно режима написания нашего документа. Весь CSS становится более осведомленным о режиме написания; если вас интересуют какие-то другие свойства и значения, реализованные для того, чтобы остальная часть CSS вел себя таким же образом, прочитайте мою статью о логических свойствах и значениях.

    Подводя итог, помните, что:

    Начальное выравнивание

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

    Примечание : Стоит отметить, что хотя эти свойства выравнивания впервые появились в спецификации Flexbox, спецификация Box Alignment в конечном итоге заменит свойства, определенные в спецификации Flexbox, как поясняется в спецификации Flexbox 9.0162 .

    Выравнивание главной оси

    Начальное значение justify-content установлено на flex-start . Это как если бы наш CSS был:

     .container {
        дисплей: гибкий;
        выравнивание содержимого: flex-start;
    }
     

    По этой причине наши flex-элементы выстраиваются в линию на начальном краю flex-контейнера. Это также причина, по которой, когда мы устанавливаем row-reverse , они переключаются на конечное ребро, потому что это ребро затем становится началом главной оси.

    Когда вы видите свойство выравнивания, начинающееся с justify-, оно применяется к главной оси во Flexbox. Итак, justify-content выполняет выравнивание по главной оси и выравнивает наши элементы по началу.

    Другими возможными значениями для Levify-Content являются:

    • Flex-End
    • Центр
    • Пространство
    • 9009 9102 в выравнивании по рамке)

    Эти значения относятся к распределению доступного пространства в контейнере flex. Вот почему элементы перемещаются или расставляются. Если вы добавите justify-content: space-between , то все доступное пространство будет разделено между элементами. Однако это может произойти только в том случае, если для начала есть свободное место. Если бы у вас был плотно упакованный гибкий контейнер (без лишнего места после того, как все элементы были выложены), то justify-content вообще ничего бы не сделал.

    Вы можете увидеть это, если переключите flex-direction на столбец . Без высоты во флекс-контейнере нет свободного места, поэтому установка justify-content: space-between ничего не даст. Если вы добавите высоту и сделаете так, чтобы контейнер был выше, чем требуется для отображения элементов, то свойство имеет эффект:

    См. Pen Smashing Flexbox Series 1: столбец с высотой Рейчел Эндрю (@rachelandrew) на КодПене.

    См. колонку Pen Smashing Flexbox Series 1: с высотой Рэйчел Эндрю (@rachelandrew) на CodePen.

    Cross-Axis Alignment

    Элементы также выравниваются по поперечной оси с помощью однострочного гибкого контейнера; выравнивание, которое мы выполняем, заключается в выравнивании блоков друг против друга в строке. В следующем примере в одном из наших блоков больше содержимого, чем во всех остальных. Что-то говорит другим ящикам растянуться на ту же высоту. Это что-то элемента выравнивания , начальное значение которого равно stretch :

    .

    См. Руководство по разметке Pen Smashing Guide: clearfix от Рэйчел Эндрю (@rachelandrew) на CodePen.

    Когда вы видите свойство выравнивания, которое начинается с align- и вы находитесь в flexbox, то вы имеете дело с выравниванием поперек оси, и align-items выравнивает элементы внутри flex-линии. Другие возможные значения:

    • Flex-Start
    • Flex-end
    • Центр
    • Базовый уровень

    , если вы не хотите, чтобы коробки были растянуты до высоты. items: flex-start приведет к тому, что все они будут выровнены по начальному краю поперечной оси.

    См. Pen Smashing Flexbox Series 1: align-items: flex-start Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: align-items: flex-start Рэйчел Эндрю (@rachelandrew) на CodePen.

    Начальные значения для элементов Flex

    Наконец, сами элементы Flex также имеют начальные значения, они установлены на:

    • flex-grow: 0
    • flex-shrink: 1
    • 5 : auto

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

    Однако элементы могут сжиматься, так как flex-shrink имеет положительное значение 1 . Это означает, что если у нас очень узкий гибкий контейнер, то элементы будут становиться настолько маленькими, насколько это возможно, прежде чем произойдет какое-либо переполнение. Это разумное поведение; в общем, мы хотим, чтобы вещи оставались внутри своих коробок и не переполнялись, если есть место для их отображения.

    Чтобы получить наилучший макет по умолчанию, flex-basis устанавливается на auto . Мы должным образом рассмотрим, что это значит, в следующей статье этой серии, однако в большинстве случаев вы можете думать о auto как «достаточно большой для содержимого». Что вы увидите, когда у вас есть гибкие элементы, которые заполняют контейнер, и один из этих элементов имеет больший объем содержимого, чем другие, большему элементу будет предоставлено больше места.

    См. Pen Smashing Flexbox Series 1: начальные значения flex-элементов Рэйчел Эндрю (@rachelandrew) на CodePen.

    См. Pen Smashing Flexbox Series 1: начальные значения flex-элементов Рэйчел Эндрю (@rachelandrew) на CodePen.

    Гибкость Flexbox в действии. С flex-basis auto и к элементам не применяются размеры, flex-элементы имеют базовый размер max-content size. Это был бы размер, если бы они растянулись и не делали никаких обертываний. Затем пространство отнимается у каждого элемента пропорционально, как подробно описано в следующем примечании к спецификации flexbox.

    «Примечание. Коэффициент сжатия при изгибе умножается на базовый размер при распределении отрицательного пространства. Это распределяет отрицательное пространство пропорционально тому, насколько элемент может сжиматься, так что, например. маленький предмет не уменьшится до нуля до того, как заметно уменьшится большой предмет».

    Чем больше предмет, тем меньше места, поэтому мы получаем окончательный макет. Вы можете сравнить два скриншота ниже, оба сделаны на примере выше. Однако на первом снимке экрана третье поле имеет меньший объем содержимого, и поэтому наши столбцы имеют более равномерное распределение пространства.

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

    Flexbox здесь помогает нам получить разумный конечный результат, не учитывая никакого другого участия человека, пишущего CSS. Вместо того, чтобы равномерно уменьшить пространство и получить очень высокий элемент с парой слов в каждой строке, он выделяет этому элементу больше места для размещения. Такое поведение является ключом к реальным вариантам использования Flexbox. Flexbox проявляет себя лучше всего, когда используется для размещения наборов вещей — вдоль одной оси — гибким и учитывающим содержимое способом. Я коснусь здесь некоторых деталей, но мы подробно рассмотрим эти алгоритмы позже в этой серии.

    Резюме

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

    Макеты Flex являются гибкими: по умолчанию они стараются сделать правильный выбор в отношении вашего контента — сжимая и растягивая, чтобы получить лучшую читабельность. Макеты Flex учитывают режим записи: направления строк и столбцов относятся к используемому режиму записи. Гибкие макеты позволяют выравнивать элементы как группу по главной оси, выбирая, как распределяется пространство. Они позволяют выравнивать элементы в пределах их гибкой линии, перемещая элементы по поперечной оси относительно друг друга. Важно отметить, что гибкие макеты понимают, насколько велик ваш контент, и стараются принимать правильные базовые решения для его отображения. В будущих статьях мы рассмотрим эти области более подробно и подробно рассмотрим, когда и почему мы можем выбрать использование Flexbox.

    CSS Flexbox | отображение flex, свойства flex, макет на основе flex

    Автор: Авинаш Малхотра

    Обновлено:

    • ← Путь зажима
    • Сетки CSS→
    1. Дом
    2. Веб-дизайн
    3. CSS3
    4. CSS Flexbox
    1. Флексбокс
    2. Свойства
    3. Гибкий дисплей
    4. Направление гибкости
    5. Гибкий поток
    6. Выровнять содержимое
    7. Выровнять элементы
    8. заказ
    9. гибкий рост
    10. гибкий термоусадочный
    11. гибкая основа
    12. гибкий
    13. выровнять себя

    Макеты на основе Flex

    flex box — гибкий бокс, предназначенный для создания одномерных макетов в css. Одномерность означает, что flexbox может создавать макет в одном измерении за один раз. Для двумерных макетов используйте сетки CSS, которые могут обрабатывать как строки, так и столбцы.

    Display flex используется для сборки flexbox. Flex может создавать одномерный макет, который лучше, чем макет на основе плавающих элементов.

    Преимущество использования flexbox?

    1. Улучшенный дизайн компоновки
    2. Преимущество гибких макетов.
    3. Поддерживает браузеры IE 10 и выше.
    4. Доступна опция автоматической настройки высоты и ширины.
    5. Легко изменить направление гибких колонок.

    Для IE 9 и более ранних версий используйте макеты на основе CSS с плавающей запятой.


    Свойства Flexbox

    Flex — это значение CSS display. Используя display flex в родительских элементах, дочерние элементы автоматически выравниваются, как столбцы или строки, с автоматической шириной и автоматической высотой.

    CSS Flexbox

    Свойства гибкого контейнера

    1. дисплей (гибкий или встроенный гибкий)
    2. flex-направление
    3. гибкая пленка
    4. гибкий поток
    5. выравнивание содержимого
    6. выравнивание элементов
    7. выравнивание содержимого

    Свойства гибких элементов (дочерний элемент контейнера)

    1. заказ
    2. гибкий рост
    3. гибкий термоусадочный
    4. гибкий базовый
    5. гибкий
    6. выровнять себя

    Свойства гибкого контейнера

    Дисплей Flex

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

    Изменить гибкий дисплей

    Блок Флекс

    Поз. 1

    Поз. 2

    Поз. 3

    Поз. 4

    <стиль>
        .flex-контейнер{
            дисплей:  гибкий  ;
        }
        .flex-элемент{
            отступ: 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px
        }
    
    <дел>
        
    Элемент 1
    Элемент 2
    Элемент 3
    Элемент 4

    Направление гибкости

    Flex Direction свойство дается flex-контейнеру на изменение направления flex-элементов . По умолчанию направлением гибкости является строка.

    Значение Flex Directions

    1. строка (по умолчанию)
    2. ряд-реверс
    3. столбец
    4. колонна-реверс

    Изменение направления гибкости

    ряд ряд-обратный столбец колонна-реверс

    Поз. 1

    Поз. 2

    Поз. 3

    Поз. 4

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-направление: строка;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px
        }
    
    <дел>
        
    Элемент 1
    Элемент 2
    Элемент 3
    Элемент 4

    Гибкая обертка

    элемента Flex по умолчанию помещаются в одну строку. flex wrap используется, чтобы разрешить перенос элементов на следующую строку или в обратном порядке.

    Значения Flex Wrap

    1. сейчас (по умолчанию)
    2. перенос (перенос на следующую строку)
    3. обратный перенос (несколько строк, но в обратном порядке снизу вверх)

    Замена гибкой обмотки

    сейчас сворачивать обертка-реверс

    Пункт 1

    Пункт 2

    Пункт 3

    Пункт 4

    Пункт 5

    Пункт 6

    Пункт 7

    Пункт 8

    Пункт 9

    . 13

    Поз. 14

    Поз. 15

    Поз. 16

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-направление: строка;
            гибкая обертка: nowrap;
            -ms-flex-wrap:nowrap;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px
        }
    
    <дел>
        
    Элемент 1
    Элемент 2
    Элемент 3
    Элемент 4
    Элемент 5
    Элемент 6
    Элемент 7
    Элемент 8
    Элемент 9<дел>
    Элемент 10
    Элемент 11
    Элемент 12
    Элемент 13
    Элемент 14
    Элемент 15
    Элемент 16

    Гибкий поток

    flex flow — это сокращение для свойств flex-direction и flex-wrap . Значение по умолчанию – 9.0622 строка теперь .

    Поз. 1

    Поз. 2

    Поз. 3

    Поз. 4

    <стиль>
    .flex-контейнер{
        дисплей: гибкий;
        flex-flow: перенос столбца;
    }
    .flex-элемент{
        отступ: 0 10 пикселей;
        граница: 1px сплошная #ccc;
        поле: 5px
    }
    
    <дел>
        
    Элемент 1
    Элемент 2
    Элемент 3
    Элемент 4

    Выровнять содержание

    свойство justify-content используется для выравнивания содержимого по главной оси. Это может отрегулировать элементы слева, по центру, справа или добавить пространство между ними.

    значения выравнивания содержимого

    1. гибкий старт (по умолчанию)
    2. гибкий конец
    3. центр
    4. пробел-между
    5. пробел-около
    6. равномерно по пространству

    Изменить содержимое по ширине

    гибкий старт гибкий конец центр пространство между пространство вокруг пространство-равномерно

    Поз. 1

    Поз. 2

    Поз. 3

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
            выравнивание содержимого: flex-start;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px
        }
    
    <дел>
        
    Элемент 1
    Элемент 2 больше
    Элемент 3

    Выравнивание элементов

    Свойство Align-items определяет поведение гибкого элемента, расположенного по горизонтальной оси. По умолчанию значение растягивается.

    Значения элементов выравнивания

    1. стрейч
    2. гибкий старт
    3. гибкий конец
    4. центр
    5. базовый уровень

    стрейч гибкий старт гибкий конец центр базовый уровень

    <стиль>
        . flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
            выравнивание элементов: растянуть;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
        <дел> 3 <дел>
    
                       

    Свойства гибких элементов

    заказ

    свойство order гибкого элемента задает порядок их появления в родительском контейнере. Порядок по умолчанию равен 0. Значением порядка всегда является число.

    По умолчанию все гибкие элементы располагаются в порядке потока документов.

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            заказ:0;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
        <дел> 3 <дел>
    
             

    гибкий рост

    flex-grow свойство гибкого элемента определяет возможность роста. Значение по умолчанию для всех гибких элементов — 0,

    .

    Flex-grow 0 означает ширину гибкого элемента только в соответствии с содержимым.

    Flex-grow 1 означает, что ширина гибкого элемента будет равномерно распределена по всем элементам.

    Flex-рост: 0 1

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            гибкий рост: 0;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
        <дел> 3 <дел>
    
             
    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            гибкий рост: 1;
        }
        .fg2{
        гибкий рост: 2;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
        <дел> 3 <дел>
    
             

    Гибкая термоусадка

    Flex Shrink Свойство гибкого элемента определяет возможность сжатия при необходимости. Значение по умолчанию для flex-shrink равно 1. Значение может быть любым положительным значением или 0.

    Гибкая усадка: 0 1

    Столбец

    Столбец

    Столбец

    Столбец

    Столбец

    Столбец

    Столбец

    Столбец

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            гибкая термоусадка: 1;
        }
    
    <дел>
        
    Столбец
    Столбец
    Столбец
    Столбец
    Столбец
    Столбец
    Столбец
    Столбец

    Гибкая основа

    flex-basis свойство элемента flex определяет ширину элемента по умолчанию до в %age, px, em или rem. Значение по умолчанию для flex-basis — auto. Мы можем присвоить значение flex-shrink в зависимости от требуемого процента. Например, 20% означает, что ширина элемента будет равна 20%, а сумма ширин других элементов будет равна 80%.

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            гибкий рост: 1;
            гибкая усадка: 0;
            flex-основа:50%;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
    
             

    гибкий

    flex — это сокращение для flex-grow, flex-shrink и flex-basis. Значение по умолчанию для flex равно 0 1 0% . Первое значение, то есть flex-grow, является обязательным, а два других — необязательными.

    Всегда предпочитайте свойство flex вместо трех.

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            flex:1 0 авто;
        }
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
    
             

    Самовыравнивание

    align-self является свойством flex-элементов. Он используется для выравнивания отдельного гибкого элемента по оси Y.

    <стиль>
        .flex-контейнер{
            дисплей: гибкий;
            flex-flow: перенос строк;
            высота: 150 пикселей;
        }
        .flex-элемент{
            отступ: 0 10 пикселей;
            граница: 1px сплошная #ccc;
            поле: 5px;
            flex:1 0 авто;
        }
        .flex-item: nth-child (1) {align-self: flex-start}
        .flex-item: nth-child (2) {align-self: center}
        .flex-item: nth-child (3) {align-self: flex-end}
    
    <дел>
        <дел> 1 <дел>
        <дел> 2 <дел>
        <дел> 3 <дел>
    
     

    • ← Путь клипа
    • Сетки CSS→

    5-минутное руководство для начинающих по CSS Flexbox | Джилл Платтс

    Для этой кружки нужен флексбокс.

    Представленный в CSS3, flexbox — это метод определения того, как компоненты страницы ведут себя на разных устройствах и размерах экрана. Названный благодаря своей гибкости, flexbox предлагает несколько преимуществ по сравнению со старыми методами компоновки, включая динамическую перестановку, выравнивание, направление и подгонку контейнера. В мире, который становится все более мобильным, flexbox позволяет разработчику получить полный контроль над поведением элементов страницы, независимо от того, с какого устройства к ним осуществляется доступ.

    Меню навигации Flexbox — горизонтальный и вертикальный вид.

    Обзор Flexbox

    Существует три основных компонента flexbox:

    • flex-контейнер — flex-элементы содержатся внутри flex-контейнера
    • flex-элементы — элементы, поведение которых контролируется
    • направление потока управляет направлением flex-элементов

    1) Создание Flex-контейнера

    Чтобы определить и получить доступ к контейнеру как к flex-контейнеру, вы можете использовать дисплей: гибкий; . Если дополнительные правила не заданы, все прямые дочерние элементы будут считаться гибкими элементами и будут располагаться горизонтально слева направо. Ширина гибких элементов автоматически подстраивается под размер контейнера.

    HTML:

     
    test1
    test2
    test3

    CSS:

     .flexcontainer { 
    display:flex;
    }
    Базовый гибкий контейнер с тремя гибкими элементами.

    2) Определение направления гибкости

    Чтобы поместить все элементы гибкости в один столбец, добавьте flex-direction: column; в ваш CSS.

     .flexcontainer { 
    display: flex;
    flex-direction: столбец;
    }
    Элементы Flex в ориентации столбца.

    Чтобы изменить порядок столбцов гибких элементов, добавьте flex-direction: column-reverse; в свой CSS.

     .flexcontainer { 
    display: flex;
    flex-direction: обратная колонка;
    }
    Порядок столбцов теперь обратный.

    Чтобы изменить порядок строк гибких элементов, добавьте flex-direction: row-reverse; в ваш CSS.

     .flexcontainer { 
    display: flex;
    flex-direction: строка-реверс;
    }
    Порядок строк теперь обратный.

    3) Выравнивание и выравнивание элементов Flex

    Если вы хотите выровнять элементы Flex по правому краю:

     .flexcontainer { 
    дисплей: гибкий;
    выравнивание содержимого: flex-end;
    }
    Флексбокс с выравниванием по правому краю.

    Если вы хотите центрировать гибкие элементы:

     .flexcontainer { 
    display: flex;
    выравнивание содержимого: по центру;
    }
    Флексбокс по центру.

    Если вы хотите разделить гибкие элементы:

     .flexcontainer { 
    display: flex;
    выравнивание содержимого: пробел между;
    }
    Добавлен интервал между каждым элементом flexbox.

    Для центрирования гибких элементов как по горизонтали, так и по вертикали:

     .flexcontainer { 
    дисплей: гибкий;
    выравнивание содержимого: по центру;
    элементов выравнивания: по центру;
    }

    4) Обтекание

    Размер изменен, чтобы поместиться в один столбец или одну строку, когда flex-контейнер недостаточно велик, flex-элементы не могут переноситься по умолчанию. Используя flex-wrap: wrap; , любые гибкие элементы, вызывающие переполнение, будут перенесены на следующую строку.

    Чтобы разрешить перенос:

     .flexcontainer { 
    display: flex;
    flex-wrap: обертка;
    }
    Третий элемент flexbox переносится на следующую строку.

    Для разрешения обратного переноса (элементы переполнения отправляются в строку выше):

     .flexcontainer { 
    display: flex;
    flex-wrap: обратная обмотка;
    }
    Третий элемент flexbox, перенесенный на строку выше.

    Для управления позиционированием flex-элементов при переносе (замените * на stretch, space-around, space-between, center, flex-end или flex-start):

     .flexcontainer { 
    display: flex;
    flex-wrap: обертка;
    выравнивание содержимого: * ;
    }

    5) Расширение flex-элементов

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

    Чтобы увеличить гибкий элемент (размер по умолчанию равен 0):

     .flexcontainer { 
    display: flex;
    }.flexitem1 {
    flex-grow: 1;
    граница: сплошная 3 пикселя;
    }
    Первый элемент flexbox, управляемый с помощью flex-grow.

    Работает только при наличии свободного места в контейнере , flex-grow равно отношению ширины/высоты контейнера, на которое элемент должен растягиваться, чтобы заполнить все оставшееся пространство контейнера, по отношению к размеру других дочерних элементов в контейнере. Точно так же flex-shrink работает только тогда, когда flex-элементы переполняют flex-контейнер из-за нехватки места.

    Чтобы уменьшить гибкий элемент (размер по умолчанию равен 0):

     .flexcontainer { 
    display: flex;
    }.flexitem1 {
    гибкий термоусадочный: 1;
    граница: сплошная 3 пикселя;
    }

    Чтобы установить точный размер каждого гибкого элемента (значение по умолчанию — flex-basis: auto; ):

     . flexcontainer { 
    display: flex;
    }.flexitem1 {
    flex-basis: 25%; /*процентное значение*/
    }.flexitem2 {
    flex-basis: 50px; /*абсолютное значение*/
    }.flexitem3 {
    flex-basis: 5px;
    }
    Набор размеров для всех трех элементов flexbox.

    Для использования flex-grow , flex-basis и flex-shrink одновременно:

     .flexcontainer { 
    display: flex;
    }.flexitem1 {
    flex: 2 1 100px;
    }.flexitem2 {
    5 1 5%;
    }.flexitem3 {
    flex: 1 5 5%;
    }

    6) Дополнительный метод доступа к элементам Flex

    На протяжении всего руководства доступ к элементам Flex осуществлялся напрямую через CSS, например:

     .flexitem1 { 
    flex-shrink: 1;
    }

    Однако вы можете захотеть назвать все элементы flex одинаковыми, создать группы элементов и т. д. Чтобы сделать ваш код более удобным, вы можете получить доступ к элементам flexbox по их порядковому номеру (поместите порядковый номер элемента, который вы хотите изменить в скобках):

     . flexitem1:nth-child(1) { 
    flex-shrink: 1;
    }

    Простой в освоении, flexbox — это быстрый способ создания адаптивных элементов страницы. В отличие от более старых методов макета, таких как вертикальный блок или горизонтальный встроенный, flexbox был разработан так, чтобы его можно было адаптировать как к вертикальному, так и к горизонтальному макету. Автоматически подстраиваясь под любой тип устройства, с которого к нему осуществляется доступ, flexbox жизненно важен для современной веб-разработки. Сделайте ваши страницы динамичными на мобильных устройствах, планшетах и ​​ПК с помощью flexbox.

    Макет с Flexbox | Codecademy

    CSS Flexbox

    Levify-Content Property

    Flex Собственность

    Руководство с гибкой

    . Свойство

    Css flex-basis property

    Подробнее

    CSS Flexbox

     

    div { дисплей: гибкий; }

    Свойство CSS display: flex устанавливает HTML-элемент в качестве гибкого контейнера на уровне блока, который занимает всю ширину своего родительского контейнера. Любые дочерние элементы, находящиеся внутри flex-контейнера, называются flex-элементами.

    Элементы Flex изменяют свой размер и расположение в зависимости от размера и положения их родительского контейнера.

    1. 1

      Что такое Flexbox?

      CSS предоставляет множество инструментов и свойств, которые можно использовать для размещения элементов на веб-странице. Уроки Codecademy по блочной модели и отображению CSS знакомят с парой этих методов. В этом ле…

      Start

    2. 2

      display: flex

      Любой элемент может быть flex-контейнером. Контейнеры Flex — это полезные инструменты для создания веб-сайтов, которые реагируют на изменения размеров экрана. Дочерние элементы flex-контейнеров изменят размер и местоположение…

      Start

    3. 3

      inline-flex

      В предыдущем упражнении вы могли заметить, что когда мы давали div — элемент уровня блока — отображаемое значение flex, чтобы он оставался элементом блочного уровня. Что, если мы хотим м…

      Start

    4. 4

      justify-content

      В предыдущих упражнениях, когда мы изменяли значение отображения родительских контейнеров на flex или inline-flex, все дочерние элементы (элементы flex) перемещались в верхний левый угол родителя содержат…

      Start

    5. 5

      align-items

      В предыдущем упражнении вы научились выравнивать содержимое flex-контейнера слева направо на странице. Также можно выровнять гибкие элементы вертикально внутри контейнера. Т…

      Start

    6. 6

      flex-grow

      В упражнении 3 мы узнали, что все flex-элементы уменьшаются пропорционально, когда flex-контейнер слишком мал. Однако, если родительский контейнер больше необходимого, то гибкие элементы не будут растягиваться. можно использовать, чтобы указать, какие элементы будут сжиматься и в каких пропорциях. Возможно, вы заметили в ухе…

      Start

    7. 8

      flex-basis

      В предыдущих двух упражнениях размеры элементов div определялись высотой и шириной, установленными с помощью CSS. Другой способ указать ширину гибкого элемента — использовать свойство flex-basis. fle…

      Start

    8. 9

      flex

      Сокращенное свойство flex предоставляет удобный способ указать, как элементы растягиваются и сжимаются, одновременно упрощая необходимый CSS. Свойство flex позволяет объявлять flex-grow, flex-shr…

      Start

    9. 10

      flex-wrap

      Иногда мы не хотим, чтобы наш контент сжимался, чтобы соответствовать его контейнеру. Вместо этого мы можем захотеть, чтобы гибкие элементы перемещались на следующую строку, когда это необходимо. Это можно объявить с помощью свойства flex-wrap. Th…

      Start

    10. 11

      align-content

      Теперь, когда элементы могут переноситься на следующую строку, у нас может быть несколько строк flex-элементов в одном контейнере. В предыдущем упражнении мы использовали свойство align-items для размещения flex-элементов из t…

      Start

    11. 12

      flex-direction

      До этого момента мы рассматривали только гибкие элементы, которые растягиваются и сжимаются по горизонтали и скручиваются по вертикали. Как указывалось ранее, гибкие контейнеры имеют две оси: главную ось и поперечную ось . By d…

      Start

    12. 13

      flex-flow

      Как и сокращенное свойство flex, сокращенное свойство flex-flow используется для объявления свойств flex-wrap и flex-direction в одной строке. .container { дисплей: гибкий; flex-wrap: обернуть…

      Start

    13. 14

      Вложенные Flexbox'ы

      До сих пор у нас было несколько flex-контейнеров на одной странице для изучения позиционирования flex-элементов. Также можно размещать гибкие контейнеры друг в друге. …

      Старт

    14. 15

      Обзор: Flexbox

      Гордитесь собой! Вы узнали самые важные свойства flexbox. Flexbox — это искусство и наука; вы можете использовать его, чтобы упростить выкладку нескольких элементов. Вы…

      Пуск

    • Flexbox: Приложение To-Do

      Установите свойства Flexbox для приложения To-Do.

    • Внеплатформенный проект: Tea Cozy

      Создайте вымышленный магазин чая на своем компьютере, используя изображения и спецификацию дизайна.

    • Flexbox

      Какое из следующих значений display позволит нескольким flex-контейнерам отображаться вместе друг с другом?

    Полное руководство по CSS Flex

    Визуальное изучение CSS ! Каждое отдельное свойство CSS визуализировано в этом иллюстрированном руководстве по CSS!

    ⭐⭐⭐⭐ и 1/2⭐ - принадлежат более чем 27,1 тыс. читателей.

    Получите эту книгу CSS в формате PDF на Amazon или начните читать эту книгу CSS на своем устройстве Kindle уже сегодня!

    Подобно CSS Grid (другое мое руководство), Flex Box довольно сложен, поскольку состоит не из одного, а из двух типов элементов: контейнера и элементов.

    CSS Visual Dictionary PDF (или вы можете получить книгу в мягкой обложке на Amazon) (111 отзывов ⭐ 4. 5) была книгой, из которой были взяты диаграммы в этом руководстве — эта книга — настоящая классика! с визуальной диаграммой для каждого существующего свойства CSS как то, что вы видите в этом руководстве, но для всего.

    объявление

    Когда я начал изучать Flex, я хотел увидеть все, на что он способен. Но мне не удалось найти подробный учебник, показывающий примеры всех свойств Flex. Итак, я создал эти диаграммы с помощью Flex с высоты птичьего полета.

    CSS Flex или Flex Box

    Flex — это набор правил для автоматического растягивания нескольких столбцов и строк. содержимого в родительском контейнере.

    Дисплей

    : гибкий

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

    Вы можете думать о flex-элементе как о родительском контейнере с display:flex. Элементы, размещенные внутри этого контейнера, называются элементами. У каждого контейнера есть начальная и конечная точки гибкости, как показано на этой диаграмме.

    Главная ось и поперечная ось

    Хотя список элементов предоставляется линейным образом, Flex требует, чтобы вы помнить о строках и столбцах. По этой причине он имеет две координатные оси. горизонтальная ось называется главной осью, а вертикальная — поперечной осью.

    Для управления поведением ширины контента и промежутков между этим отрезком горизонтально по главной оси вы будете использовать свойства выравнивания. Контролировать вертикальное поведение элементов вы будете использовать свойства выравнивания.

    Если у вас есть 3 столбца и 6 элементов, автоматически будет создана вторая строка Flex для размещения оставшихся элементов.

    Если у вас есть более 6 элементов в списке, будет создано еще больше строк.

    элемента Flex равномерно распределены по главной оси. Это представление по умолчанию. Мы рассмотрим свойства и значения, чтобы сделать это через мгновение.

    Вы можете определить количество столбцов.

    То, как строки и столбцы распределяются внутри родительского элемента, определяется свойствами CSS Flex flex-direction, flex-wrap и некоторыми другими, которые будут продемонстрированы в оставшейся части этого руководства по гибкости.

    Здесь у нас есть произвольное количество n элементов, расположенных внутри контейнера. По умолчанию элементы растягиваются слева направо. Однако исходную точку можно изменить.

    Направление

    Можно задать направление потока предмета, изменив его.

    flex-direction:row-reverse изменяет направление потока списка элементов. По умолчанию это строка, что означает поток слева направо, как и следовало ожидать!

    Обертка

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

    Поток

    flex-flow — это сокращение от flex-direction и flex-wrap. позволяя вам указать их обоих, используя только одно имя свойства.

    flex-flow:row wrap определяет flex-direction как строку, а flex-wrap как перенос.

    flex-flow:row wrap-reverse;

    flex-flow:обертка строк; выравнивание содержимого: пробел между;

    flex-flow:row-reverse wrap;

    flex-flow:row-reverse wrap-reverse;

    flex-flow:обертка строк; выравнивание содержимого: пробел между;

    Направление можно изменить, чтобы сделать поперечную ось основной.

    Когда мы меняем направление flex на столбец, свойство flex-flow ведет себя точно так же, как и в предыдущих примерах. За исключением этого времени, они следуют вертикальному направлению столбца.

    выравнивание содержимого

    Я получил много запросов на уточнение приведенного выше примера. Поэтому я создал эту анимацию. Оригинальная деталь, из которой была создана диаграмма:

    Анимированный контент с выравниванием по ширине.

    Надеюсь, эта гибкая анимация CSS рассеет туман прецедентов!

    flex-direction:строка; выравнивание содержимого: flex-start | гибкий конец | центр | пространство между | пространство вокруг | растянуть | пространственно-равномерно . В этом примере мы используем только 3 элемента в строке.

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

    То же свойство justify-content используется для выравнивания элементов, когда flex-direction является столбцом.

    css-flex-animation-direction-column-justify-content-all-use-case-examples.gif

    Упаковочные линии Flex (в соответствии со спецификацией Flex)

    Я не уверен, реализовано ли это на самом деле в каком-либо браузере, но когда-то это было частью спецификации CSS flex и, вероятно, по крайней мере, стоит упомянуть, чтобы быть полным.

    В спецификации

    Flex это называется «гибкие линии упаковки». По сути, это работает так же, как примеры, которые мы видели на предыдущих нескольких страницах. За исключением этого времени, обратите внимание, что интервал между целыми наборами элементов. Это полезно, когда вы хотите создать промежутки вокруг пакета из нескольких элементов.

    Упаковка гибких линий (продолжение) Но теперь с flex-direction, установленным в столбец.

    выравнивание элементов

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

    гибкая основа

    flex-basis работает аналогично другому свойству CSS: min-width вне flex. Это расширит размер элемента на основе внутреннего содержимого. В противном случае будет использоваться базовое значение по умолчанию.

    гибкий рост

    flex-grow при применении к элементу будет масштабировать его относительно суммы размеров всех других элементов в той же строке, которые автоматически корректируются в соответствии с указанным значением. В каждом примере здесь значение flex-grow элемента было установлено на 1, 7 и (3 и 5) в последнем примере.

    гибкий термоусадочный

    flex-shrink — это противоположность flex-grow. В этом примере значение 7 использовалось для «сжатия» выбранного элемента на время, равное 1/7-й части размера окружающих его элементов  - , которые также будут автоматически скорректированы.

    При работе с отдельными элементами вы можете использовать свойство flex в качестве ярлыка для flex-grow, flex-shrink и flex-basis, используя только одно имя свойства.

    заказ

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

    элементы выравнивания

    И последнее, что нужно сделать тем, кто хочет использовать CSS Grid вместе с Flex Box… Элементы выравнивания сетки CSS похожи на содержимое выравнивания Flex. (Свойства, описанные на приведенной выше диаграмме, не будут работать во Flex, но они в значительной степени эквивалентны сетке для выравнивания содержимого ячеек.)

    Получить визуальный словарь CSS (рекомендуется в формате PDF, так как он цветной)

    (моя книга по кодированию)

    Эй, ребята, создание туториалов, подобных этому, может занять недели (и месяцы последующих улучшений) работы. Одни только схемы делались в течение двух недель ежедневной работы! С предложениями других текст улучшается и редактируется в течение месяца или дольше.

    Вы можете поддержать мою работу, чтобы помочь мне продолжать делать больше руководств по веб-разработке.

    Визуальный словарь CSS (загрузка в формате PDF) был книгой, из которой были взяты диаграммы в этом руководстве — эта книга — настоящая классика! с визуальной диаграммой для каждого существующего свойства CSS очень похоже на то, что вы видели в этом руководстве, за исключением всего.

    На протяжении многих лет книга зарабатывала ⭐ 4,5 звезды рейтинга сообщества программистов за насыщенное содержание и полный охват. На каждой странице есть схема.

    Если вы хотите стать обладателем этой книги, скачайте копию CSS Visual Dictionary (загрузка в формате PDF) (это можно загрузить сразу после покупки в формате PDF).

    CSS Visual Dictionary также доступен на Amazon в мягкой обложке, если вам нужна физическая копия.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Спецификация
    Неизвестная спецификация
    # Flex-Basis-Property