Wrap flex css: flex-wrap — CSS | MDN

flex-wrap — CSS | MDN

Свойство CSS flex-wrap задаёт правила вывода flex-элементов — в одну строку или в несколько, с переносом блоков. Если перенос разрешён, то возможно задать направление, в котором выводятся блоки.

flex-wrap: nowrap;
flex-wrap: wrap;
flex-wrap: wrap-reverse;
/* Global values */
flex-wrap: inherit;
flex-wrap: initial;
flex-wrap: unset;
Начальное значениеnowrap
Применяется кflex-контейнеры
Наследуетсянет
Обработка значениякак указано
Animation typediscrete

Подробнее по свойствам и общей информации смотрите Using CSS flexible boxes.

Свойство flex-wrap может содержать одно из следующих ниже значений.

Значения

Допускаются следующие значения:

nowrap

Расположение в одну линию, может привести к переполнению контейнера. Свойство cross-start эквивалентно start или before в зависимости от значения flex-direction.

wrap

Расположение в несколько линий. Свойство cross-start эквивалентно start или before в зависимости от значения flex-direction и свойство cross-end противоположно cross-start.

wrap-reverse

Ведёт себя так же, как и wrap но cross-start и cross-end инвертированы.

Formal syntax

flex-wrap = 
nowrap | (en-US)
wrap | (en-US)
wrap-reverse

HTML

<h5>This is an example for flex-wrap:wrap </h5>
<div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
<h5>This is an example for flex-wrap:nowrap </h5>
<div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
<h5>This is an example for flex-wrap:wrap-reverse </h5>
<div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>

CSS

/* Common Styles */
. content,
.content1,
.content2 {
    color: #fff;
    font: 100 24px/100px sans-serif;
    height: 150px;
    text-align: center;
}
.content div,
.content1 div,
.content2 div {
    height: 50%;
    width: 50%;
}
.red {
    background: orangered;
}
.green {
    background: yellowgreen;
}
.blue {
    background: steelblue;
}
/* Flexbox Styles */
.content {
    display: flex;
    flex-wrap: wrap;
}
.content1 {
    display: flex;
    flex-wrap: nowrap;
}
.content2 {
    display: flex;
    flex-wrap: wrap-reverse;
}

Results

SpecificationStatusComment
CSS Flexible Box Layout Module
Определение ‘flex-wrap’ в этой спецификации.
Кандидат в рекомендации

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

  • Using CSS flexible boxes (en-US)

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

Want to get more involved?

Learn how to contribute.

This page was last modified on by MDN contributors.

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

CSS свойства

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

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


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


Схематичное отображение работы свойства flex-wrap отображено на следующем изображении:

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

Свойство
Chrome

Firefox

Opera

Safari

IExplorer

Edge
flex-wrap29. 0
21.0
-webkit-
28.0
18.0
-moz-
17.09.0
6.1
-webkit-
11.012.0

CSS синтаксис:

flex-wrap: "nowrap | wrap | wrap-reverse | initial | inherit";

JavaScript синтаксис:

object.style.flexWrap = "wrap-reverse"

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

ЗначениеОписание
nowrapУказывает, что флекс элементы выстраиваются в одну строку. Это значение по умолчанию.
wrapУказывает, что флекс элементы внутри контейнера располагаются в несколько горизонтальных рядов (в случае переполнения). Флекс элементы размещаются слева направо при направлении ltr (глобальный HTML атрибут dir, либо CSS свойство direction со значением ltr), а при значении rtl размещаются справа налево.
wrap-reverseУказывает, что флекс элементы внутри контейнера располагаются в несколько горизонтальных рядов (в случае переполнения) по аналогии со значением wrap, но формирование строк идёт в обратном порядке.
initialУстанавливает свойство в значение по умолчанию.
inheritУказывает, что значение наследуется от родительского элемента.

Версия CSS

CSS 3

Наследуется

Нет.

Анимируемое

Нет.

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

<!DOCTYPE html>
<html>
<head>
<title>Однострочные и многострочные флекс контейнеры</title>
<style> 
.container {
display: -webkit-flex;  /* для поддержки ранних версий браузеров */
display: flex;  /* элемент отображается как блочный flex-контейнер */
-webkit-flex-wrap: nowrap;  /* для поддержки ранних версий браузеров */
flex-wrap: nowrap;  /* указывает, что флекс элементы выстраиваются в одну строку(это значение по умолчанию) */
}
.container2
{ display: -webkit-flex; /* для поддержки ранних версий браузеров */ display: flex; /* элемент отображается как блочный flex-контейнер */ -webkit-flex-wrap: wrap; /* для поддержки ранних версий браузеров */ flex-wrap: wrap; /* указывает, что флекс элементы внутри контейнера располагаются в несколько горизонтальных рядов (в случае переполнения) */ } . container3 { display: -webkit-flex; /* для поддержки ранних версий браузеров */ display: flex; /* элемент отображается как блочный flex-контейнер */ -webkit-flex-wrap: wrap-reverse; /* для поддержки ранних версий браузеров */ flex-wrap: wrap-reverse; /* по аналогии со значением wrap, но формирование строки идёт в обратном порядке */ }
div > div
{ используем селектор дочерних элементов (форматируем все элементы <div>, вложенные внутрь элементов <div>) width: 40%; /* устанавливаем ширину блока */ height: 25px; /* устанавливаем высоту блока */ border: 1px solid orange; /* устанавливаем сплошную границу 1px оранжевого цвета */ } </style> </head> <body> <h4>flex-wrap:nowrap;</h4> <div class = "container"> <div>A</div> <div>B</div> <div>C</div> </div> <h4>flex-wrap:wrap;</h4> <div class = "container2"> <div>A</div> <div>B</div> <div>C</div> </div> <h4>flex-wrap:wrap-reverse;</h4> <div class = "container3"> <div>A</div> <div>B</div> <div>C</div> </div> </body> </html>

Результат примера:

Пример использования CSS свойства flex-wrap (однострочные и многострочные флекс контейнеры). CSS свойства

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

Свойство CSS flex-wrap устанавливает, будут ли flex-элементы принудительно помещаться в одну строку или могут переноситься на несколько строк. Если перенос разрешен, он устанавливает направление, в котором строки располагаются друг над другом.

Дополнительные свойства и сведения см. в разделе Использование гибких блоков CSS.

 flex-wrap: nowrap; /* Значение по умолчанию */
flex-wrap: обернуть;
flex-wrap: обернуть-обратно;
/* Глобальные значения */
flex-wrap: наследовать;
flex-wrap: начальный;
flex-wrap: вернуться;
flex-wrap: возвратный слой;
flex-wrap: не установлено;
 

Свойство flex-wrap указано как одно ключевое слово, выбранное из списка значений ниже.

Значения

Допустимы следующие значения:

nowrap

Элементы Flex расположены в одну строку, что может привести к переполнению контейнера Flex. cross-start либо эквивалентен start , либо перед в зависимости от значения flex-direction . Это значение по умолчанию.

обертка

Элементы Flex разбиваются на несколько строк. cross-start либо эквивалентен start , либо перед в зависимости от значения flex-direction , а cross-end противоположен указанному cross-start .

обратная сторона

Ведет себя так же, как обтекание , но с перекрестным запуском

и кросс-энд переставлены.

Initial value nowrap
Applies to flex containers
Inherited no
Computed value as specified
Animation type discrete
 flex-wrap = 
nowrap |
упаковка |
обратная сторона

Установка значений обтекания flex-контейнера

HTML
 
Это пример для flex-wrap:wrap
<дел> <дел>1 <дел>2 <дел>3
Это пример для flex-wrap:nowrap
<дел> <дел>1 <дел>2 <дел>3
Это пример для flex-wrap:wrap-reverse
<дел> <дел>1 <дел>2 <дел>3
CSS
 /* Общие стили */
. содержание,
.content1,
.content2 {
  цвет: #fff;
  шрифт: 100 24px/100px без засечек;
  высота: 150 пикселей;
  ширина: 897 пикселей;
  выравнивание текста: по центру;
}
.контент раздел,
.content1 раздел,
.content2 раздел {
  высота: 50%;
  ширина: 300 пикселей;
}
.красный {
  фон: оранжево-красный;
}
.зеленый {
  фон: желто-зеленый;
}
.синий {
  фон: стальной синий;
}
/* Стили Flexbox */
.содержание {
  дисплей: гибкий;
  flex-wrap: обернуть;
}
.content1 {
  дисплей: гибкий;
  гибкая обертка: nowrap;
}
.content2 {
  дисплей: гибкий;
  flex-wrap: обернуть-обратно;
}
 
Результаты
Спецификация
CSS с гибкой коробкой. Включите JavaScript для просмотра данных.

  • Руководство CSS Flexbox: Основные понятия Flexbox
  • Руководство по CSS Flexbox: Освоение упаковки гибких элементов

Обнаружили проблему с содержанием этой страницы?

  • Отредактируйте страницу на GitHub.
  • Сообщить о проблеме с содержимым.
  • Просмотрите исходный код на GitHub.

Хотите принять участие?

Узнайте, как внести свой вклад.

Последний раз эта страница была изменена участниками MDN.

Освоение упаковки гибких элементов — CSS: каскадные таблицы стилей

Flexbox был разработан как одномерный макет, что означает, что он имеет дело с расположением элементов в виде строки или столбца, но не того и другого одновременно. Однако существует возможность переноса гибких элементов на новые строки, создавая новые строки, если flex-direction — это строка и новые столбцы, если flex-direction — это столбец . В этом руководстве я объясню, как это работает, для чего оно предназначено и в каких ситуациях действительно требуется CSS Grid Layout, а не flexbox.

Начальное значение свойства flex-wrap равно nowrap . Это означает, что если у вас есть набор гибких элементов, которые слишком широки для их контейнера, они переполнят его. Если вы хотите, чтобы они заворачивались, когда они становятся слишком широкими, вы должны добавить flex-wrap со значением wrap или используйте сокращение flex-flow со значениями row wrap или column wrap .

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

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

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

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

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

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

Если вам нужен макет в двух измерениях, вам, вероятно, нужен макет сетки. Мы можем сравнить наш пример с обернутой строкой выше с версией этого макета в CSS Grid, чтобы увидеть разницу. В следующем живом образце используется CSS Grid Layout для создания макета, который имеет столько столбцов размером не менее 160 пикселей, сколько поместится, распределяя дополнительное пространство между всеми столбцами. Однако в этом случае элементы остаются в своей сетке и не растягиваются, когда их меньше в последнем ряду.

Это разница между одномерным и двухмерным макетом. В одномерном методе, таком как flexbox, мы контролируем только строку или столбец. В двухмерном макете, таком как сетка, мы контролируем оба одновременно. Если вы хотите, чтобы пространство распределялось построчно, используйте flexbox. Если нет, используйте Grid.

Обычно грид-системы на основе flexbox работают, возвращая flexbox в знакомый мир макетов на основе float. Если вы назначаете ширину в процентах для гибких элементов — либо как flex-basis , либо добавляя ширину к самому элементу, оставляя значение flex-basis как auto — вы можете получить впечатление двухмерного макета. Вы можете увидеть, как это работает в примере ниже.

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

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

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

Свойство gap в CSS является сокращением для row-gap и column-gap , определяя размер промежутков, который представляет собой пространство между строками и столбцами в сеточных, гибких и многоколоночных макетах.

Во Flexbox свойство gap применяется к контейнеру flex. Он создает фиксированное пространство между соседними гибкими элементами. Однако свойство gap — не единственное, что может помещать пробелы между элементами. Поля, отступы, justify-content и align-content также могут увеличить размер отступа, влияя на фактический размер зазора.

Чтобы увидеть, как свойство gap отличается от свойства margin по обеим осям, попробуйте добавить gap в контейнер .box и изменить значение margin на . box > * flex-элементов.

Спецификация flexbox подробно описывает, что должно произойти, если элемент flex свернут с помощью установки видимость: свернуть на предмет. См. документацию MDN для свойства видимости . Спецификация описывает поведение следующим образом:

«Указание visibility:collapse для элемента flex приводит к тому, что он становится свернутым элементом flex, производя эффект, аналогичный Visibility:collapse для строки таблицы или столбца таблицы: свернутый элемент flex полностью удаляется из рендеринга, но остается позади «стойка», которая поддерживает стабильный поперечный размер flex-линии. Таким образом, если flex-контейнер имеет только одну flex-линию, динамически сворачивающиеся или разворачивающиеся элементы могут изменить основной размер flex-контейнера, но гарантированно не повлияют на его поперечный размер и не приведет к тому, что остальная часть макета страницы будет «колебаться». Однако перенос строк Flex выполняется повторно после свертывания, поэтому поперечный размер контейнера Flex с несколькими строками может измениться, а может и не измениться. — Свернутые элементы

Это поведение полезно, если вы хотите настроить гибкие элементы с помощью JavaScript, например, для отображения и скрытия содержимого. Пример в спецификации демонстрирует один из таких шаблонов.

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

Примечание: Используйте Firefox для двух приведенных ниже примеров, поскольку Chrome и Safari считают свертывание скрытым.

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

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

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

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

Разница между

видимость: скрыто и отображение: нет

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

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

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