Не всё о Flexbox
Свойство display
Устанавливает отображение flexbox для дочерних элементов.
.container{
display:flex;
}
flex-direction
Определяет направление, в котором расположатся дочерние элементы (в вертикальном или горизонтальном). Префикс -reverse меняет порядок расположения элементов на обратный.
- row (по умолчанию) слева направо
- row-reverse справа налево
- column сверху вниз
- column-reverse снизу вверх
.container{
flex-direction:row| row-reverse| column| row| column-reverse;
}
justify-content
Устанавливает выравнивание дочерних элементов по горизонтали (если
- flex-start (по умолчанию) выравнивание по левому краю
- flex-end по правому краю
- center по середине
- space-between расширяет пространство между элементами так, чтобы первый элемент касался левого края, а последний – правого
- space-around расстояние между элементами одинаково, а расстояние между крайними элементами и границами родителя равно половине расстояния между элементами
- space-evenly расстояния между элементами и границами родителя равны
.container{
justify-content:flex-start| flex-end| center| space-between| space-around| space-evenly;
}
align-items
Устанавливает выравнивание дочерних элементов по вертикали (если flex-direction: row) или по горизонтали (если flex-direction: column).
- stretch (по умолчанию) растянуть элементы так, чтобы заполнить родительский блок
- flex-start выравнивание по верхнему краю
- flex-end по нижнему краю
- baseline по первой строке текста
.container{
align-items:stretch| flex-start| flex-end| center| baseline;
}
flex-wrap
Разрешает перенос элементов на новую строку. По умолчанию перенос запрещён.
- nowrap (по умолчанию) все элементы выстроены одной строкой
- wrap элементы могут переноситься на следующую строку
- wrap-reverse строки расположены в обратном порядке
.container{
flex-wrap:nowrap| wrap| wrap-reverse;
}
flex-flow
Сокращённая запись двух свойств flex-direction и flex-wrap. По умолчанию row nowrap
.container{
flex-flow:|| ;
}
align-content
Если дочерние элементы flexbox не помещаются в ширину блока и разрешён перенос элементов на новую строку (flex-wrap: wrap), то при помощи align-content можно настроить выравнивание этих строк.
Выравнивание может выполняться относительно горизонтали или вертикали в зависимости от значения свойства flex-direction.
- stretch (по умолчанию) растягивает высоту строк настолько, чтобы заполнить блок
- flex-start выравнивание относительно начала блока
- flex-end относительно конца
- center относительно центра
- space-between первая строка в начале блока, последняя в конце. Расстояние между всеми строками равно
- space-around аналогично space-between, но расстояние между первой строкой и началом блока и последней строкой и концом блока равно половине расстояния между строками
.container{
align-items:stretch| flex-start| flex-end| center| space-between| space-around;
}
Перенос на новую строку с помощью flexbox
От автора: вот проблема: если вы хотите создать макет с несколькими строками элементов, как вы можете контролировать во flexbox перенос элементов на новую строку?
Предположим, вы хотите создать макет, который выглядит примерно так, с чередующимися строками из трех элементов и одним элементом на всю ширину:
Распространенным способом управления позиционированием и размером flex-элементов является использование width или flex-basic; если мы установим для четвертого элемента width 100%, он будет расположен в отдельной строке. Но что, если мы не хотим или не можем установить ширину отдельных элементов? Или есть ли способ просто указать flexbox разрыв строки в определенных точках?
Нет никакого свойства, которое мы могли бы установить для flex, чтобы оно переносило элементы на новую строку, но мы можем вставить перенос строки (вы можете представить это, как br) между двумя flex-элементами для достижения чего-то похожего:
/* Вставка разрыва строки между двумя flex-элементами заставит * flex-элемент, который расположен после него переноситься на новую строку */ .break { flex-basis: 100%; height: 0; }
<div> <div></div> <div></div> <!-- break --> <div></div> </div>
Давайте рассмотрим некоторые сценарии, когда вы, возможно, захотите использовать это, а также некоторые интересные методы компоновки, которые позволяет нам это использовать.
Обратите внимание , что все примеры кода ниже, требуют и предполагают, что у вас есть контейнер с display: flex и flex-wrap: wrap и flex-элементы добавляются в этот контейнер:
.container { display: flex; flex-wrap: wrap; }
<div> <div></div> <div></div> <div></div> ... </div>
Вставка элемента разрыва
Использование элемента для перехода к новой строке flexbox дает интересный эффект: мы можем пропустить указание ширины любого элемента в макете и полностью полагаться на разрывы строк для определения потока сетки.
Давайте начнем с простого примера. Скажем, у нас есть два элемента, отображаемые рядом (они будут растягиваться с помощью flex-grow: 1, и для них не определены ни width, ни flex-basis):
Мы можем вставить элемент разрыва строки между элементами, чтобы они оба заняли 100% доступного пространства:
<div>...</div> <div></div> <!-- перенос на новую строку --> <div>...</div>
Это создает макет с двумя вертикальными элементами полной ширины (я добавил границу к элементу .break, чтобы проиллюстрировать его положение и поведение):
Как это работает? Так как мы указали, что .break должен занимать 100% ширины контейнера (потому что мы установили flex-basis: 100%), flex-элемент переноса должен размещаться в собственном ряду, чтобы достигнуть этого. Он не может размещаться в одном ряду с первым элементом, поэтому перейдет к новой строке, в результате чего первый элемент останется один в одной строке. Первый элемент будет растягиваться, чтобы заполнить оставшееся пространство (так как мы установили flex-grow: 1). Та же логика применима ко второму элементу.
Мы можем использовать эту технику для компоновки макета, описанного в начале статьи, разбивая последовательность до и после каждого четвертого элемента:
<div>...</div> <div>...</div> <div>...</div> <div></div> <!-- разрыв --> <div>...</div> <div></div> <!-- разрыв --> <div>...</div> <div>...</div> <div>...</div>
Это создаст нужный макет. По сути, элемент не будет переноситься на новую строку, если мы не вставим элемент разрыва строки:
Опять же, нам не нужно было указывать ширину ни для одного из этих элементов. Тот же самый метод будет работать для столбцов, если у нас есть гибкий контейнер с flex-direction: column, и установлено значение width 0 (вместо height) для элемента разрыва строки:
/* Используем столбец разрыва для переноса в новый столбец */ .break-column { flex-basis: 100%; width: 0; }
Такой подход с использованием элементов разрыва для определения макета добавляет некоторое раздутие и шум в HTML, но он может быть мощным инструментом при правильном использовании. Мы можем, например, использовать его для верстки макета кладки с помощью чистого CSS и динамически размещать разрывы с помощью свойства order. Мы также можем перейти к новой строке, не изменяя ширину какого-либо элемента содержимого, и мы можем полагаться исключительно на распределение пространства в макете сетки с помощью flex-grow.
Предположим, что мы хотим создать этот макет:
И предположим, что мы хотим сделать это, задав разные значения flex-grow для распределения пространства (вместо использования flex-basis или width, которые вам придется пересчитывать, когда вы добавляете или удаляете элементы):
.item { flex-grow: 1; } .item-wide { flex-grow: 3; }
<div></div> <div></div> <div></div>
Если затем мы хотим добавить еще одну строку элементов ниже этой:
Мы не сможем сделать это, не устанавливая flex-basis или width, по крайней мере, для некоторых элементов (или не создавая вложенный макет flexbox с одним flex-элементом для каждой строки). Если все элементы имеют разные значения flex-grow, и ничто не заставляет их переноситься на новую строку, они все просто втиснутся в одну строку:
Неплохо. Однако, если мы вставим элемент разрыва строки, мы можем построить этот макет, распределяя все пространство с помощью flex-grow:
.item { flex-grow: 1; } .item-wide { flex-grow: 3; }
<div></div> <div></div> <div></div> <div></div> <!-- разрыв --> <div></div> <div></div>
Это задает нужный макет, со всеми размерами, определенными пропорционально через flex-grow:
И если будет сценарий, когда нам нужно пять элементов в первой строке, нам не нужно менять какой-либо CSS-код, чтобы это заработало, мы можем просто добавить эти элементы до разрыва строки:
<div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <!-- разрыв --> <div></div> <div></div>
Все, что вам нужно добавить в CSS, чтобы использовать элементы разрыва строки — это эти два класса (единственное различие между этими двумя классами состоит в том, что для width (а не для height) необходимо установить 0, чтобы элемент разрывал столбец при использовании в макете столбцов):
/* Использование разрыва строки между двумя flex-элементами заставит * flex-элемент, который расположен после него, перенестись в новую строку */ .break { flex-basis: 100%; height: 0; } /* Используем разрыв столбца, чтобы перенести элемент в новый столбец */ .break-column { flex-basis: 100%; width: 0; }
Вы, безусловно, может достичь того же или подобного эффекта с помощью вложенных flexbox, когда для каждого ряда будет задан отдельный flexbox, но во многих случаях простое использование flex-basis, width или контента в пределах flex-элементов, вероятно, будет предпочтительным способ управления потоком элементов в макете flexbox. Вставка элементов разрыва является доступной и простой в использовании, она работает, и данная техника обладает некоторыми уникальными характеристиками, которые могут вам пригодиться.
Автор: Tobias Bjerrome Ahlin
Источник: https://tobiasahlin.com
Редакция: Команда webformyself.
Источник: https://webformyself.com/perenos-na-novuyu-stroku-s-pomoshhyu-flexbox/
Свойство flex-wrap — многострочная расстановка блоков по главной оси
Свойство flex-wrap задает многострочную расстановку блоков по главной оси.
Применяется к родительскому элементу для flex блоков. Входит в свойство-сокращение flex-flow.
Синтаксис
селектор {
flex-wrap: nowrap | wrap | wrap-reverse;
}
Значения
Значение | Описание |
---|---|
nowrap | Однострочный режим — блоки выстраиваются в одну строку. |
wrap | Блоки выстраиваются в несколько строк, если не помещаются в одну. |
wrap-reverse | То же самое, что и wrap, но блоки выстраиваются в другом порядке (сначала последний, потом первый). |
Значение по умолчанию: nowrap.
Пример . Значение wrap
Сейчас блоки не помещаются в свой контейнер и выстроятся в несколько строк:
<div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
#parent {
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-between;
border: 1px solid #696989;
height: 200px;
width: 330px;
margin: auto;
}
#parent > div {
width: 100px;
height: 50px;
border: 1px solid #696989;
}
:
Пример . Значение wrap-reverse
А теперь порядок следования поменяется на обратный (смотрите на цифры внутри блоков):
<div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
#parent {
display: flex;
flex-wrap: wrap-reverse;
flex-direction: row;
justify-content: space-between;
border: 1px solid #696989;
height: 200px;
width: 330px;
margin: auto;
}
#parent > div {
width: 100px;
height: 50px;
border: 1px solid #696989;
}
:
Пример . Значение nowrap
Сейчас блоки будут располагаться в однострочном режиме (так по умолчанию). При этом значение ширины width для блоков будет проигнорировано, если оно мешает блокам помещаться в родителя. Обратите внимание на то, что блоки поместились в родителя, но их реальная ширина не 100px, как им задано, а меньше:
<div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
#parent {
display: flex;
flex-wrap: nowrap;
flex-direction: row;
justify-content: space-between;
border: 1px solid #696989;
height: 200px;
width: 330px;
margin: auto;
}
#parent > div {
width: 100px;
height: 50px;
border: 1px solid #696989;
}
:
Пример . Значение nowrap
Однако, если блоки помещаются при заданной им ширине — то свойство width не будет проигнорировано. Уменьшим количество блоков так, чтобы они все влезли:
<div>
<div>1</div>
<div>2</div>
<div>3</div>
</div>
#parent {
display: flex;
flex-wrap: nowrap;
flex-direction: row;
justify-content: space-between;
border: 1px solid #696989;
height: 200px;
width: 330px;
margin: auto;
}
#parent > div {
width: 100px;
height: 50px;
border: 1px solid #696989;
}
:
Смотрите также
- свойство flex-direction,
которое задает направление осей flex блоков - свойство justify-content,
которое задает выравнивание по главной оси - свойство align-items,
которое задает выравнивание по поперечной оси - свойство flex-wrap,
которое многострочность flex блоков - свойство flex-flow,
сокращение для flex-direction и flex-wrap - свойство order,
которое задает порядок flex блоков - свойство align-self,
которое задает выравнивание одного блока - свойство flex-basis,
которое задает размер конкретного flex блока - свойство flex-grow,
которое задает жадность flex блоков - свойство flex-shrink,
которое задает сжимаемость flex блоков - свойство flex,
сокращение для flex-grow, flex-shrink и flex-basis
Перенос элементов в контейнере — CSS: Flex
При использовании флекс-контейнера элементы стараются вместиться в него без переноса строки. При этом элементы внутри контейнера ведут себя примерно как строчные элементы — занимают только то пространство, которое им необходимо.
See the Pen css_flex_wrap_no-wrap by Hexlet (@hexlet) on CodePen.
Что же произойдёт, если элементам внутри контейнера не хватит места? По логике контейнера элементы обязаны располагаться в одну строку, если не указано другое. Поэтому элементы внутри просто начнут выходить за пределы контейнера, но останутся в одной строке. Это может быть немного неочевидно, но такое поведение частенько помогает сверстать макет, например, эта особенность пригодится при вёрстке слайдеров.
See the Pen css_flex_wrap_wrap by Hexlet (@hexlet) on CodePen.
Я добавил отступы у элементов внутри контейнера, чтобы вы могли увидеть его реальную ширину. Такое поведение хоть и бывает полезным, но не является ожидаемым в большинстве случаев. Как в таком случае переносить элементы? Для этого существует свойство flex-wrap, которое говорит контейнеру переносить дочерние элементы при нехватке места.
Свойство flex-wrap может принимать одно из трёх значений:
- nowrap. Стандартное поведение флекс-контейнера. Элементы не переносятся и располагаются в одну строку даже при нехватке места.
- wrap. Данное значение говорит перенести элементы внутри контейнера при нехватке места.
See the Pen css_flex_wrap_wrap by Hexlet (@hexlet) on CodePen.
- wrap-reverse. То же самое, что и wrap, но происходит не просто перенос, а переворот блоков по главной оси. В данном случае строка со значениями 1 и 2 окажется ниже, в отличие от ситуации с использованием простого wrap
See the Pen css_flex_wrap_wrap-2 by Hexlet (@hexlet) on CodePen.
Использование flex-wrap — отличный выбор при создании адаптивных сайтов. Хоть одно свойство и не может решить всех проблем сразу, но его использование на основном каркасе сайта поможет автоматически переносить элементы на новую строку при нехватке места на мобильных устройствах.
Документация
flexbox перенос на новую строку
На чтение 4 мин. Просмотров 67 Опубликовано
Свойство display
Устанавливает отображение flexbox для дочерних элементов.
flex-direction
Определяет направление, в котором расположатся дочерние элементы (в вертикальном или горизонтальном). Префикс -reverse меняет порядок расположения элементов на обратный.
- row(по умолчанию) слева направо
- row-reverse справа налево
- column сверху вниз
- column-reverse снизу вверх
justify-content
Устанавливает выравнивание дочерних элементов по горизонтали (если flex-direction: row) или вертикали (если flex-direction: column).
- flex-start(по умолчанию) выравнивание по левому краю
- flex-end по правому краю
- center по середине
- space-between расширяет пространство между элементами так, чтобы первый элемент касался левого края, а последний – правого
- space-around расстояние между элементами одинаково, а расстояние между крайними элементами и границами родителя равно половине расстояния между элементами
- space-evenly расстояния между элементами и границами родителя равны
align-items
Устанавливает выравнивание дочерних элементов по вертикали (если flex-direction: row) или по горизонтали (если flex-direction: column).
- stretch(по умолчанию) растянуть элементы так, чтобы заполнить родительский блок
- flex-start выравнивание по верхнему краю
- flex-end по нижнему краю
- center по центру
- baseline по первой строке текста
flex-wrap
Разрешает перенос элементов на новую строку. По умолчанию перенос запрещён.
- nowrap(по умолчанию) все элементы выстроены одной строкой
- wrap элементы могут переноситься на следующую строку
- wrap-reverse строки расположены в обратном порядке
flex-flow
Сокращённая запись двух свойств flex-direction и flex-wrap. По умолчанию row nowrap
align-content
Если дочерние элементы flexbox не помещаются в ширину блока и разрешён перенос элементов на новую строку (flex-wrap: wrap), то при помощи align-content можно настроить выравнивание этих строк.
Выравнивание может выполняться относительно горизонтали или вертикали в зависимости от значения свойства flex-direction.
- stretch(по умолчанию) растягивает высоту строк настолько, чтобы заполнить блок
- flex-start выравнивание относительно начала блока
- flex-end относительно конца
- center относительно центра
- space-between первая строка в начале блока, последняя в конце. Расстояние между всеми строками равно
- space-around аналогично space-between, но расстояние между первой строкой и началом блока и последней строкой и концом блока равно половине расстояния между строками
Дата публикации: 2019-05-29
От автора: вот проблема: если вы хотите создать макет с несколькими строками элементов, как вы можете контролировать во flexbox перенос элементов на новую строку?
Предположим, вы хотите создать макет, который выглядит примерно так, с чередующимися строками из трех элементов и одним элементом на всю ширину:
Распространенным способом управления позиционированием и размером flex-элементов является использование width или flex-basic; если мы установим для четвертого элемента width 100%, он будет расположен в отдельной строке. Но что, если мы не хотим или не можем установить ширину отдельных элементов? Или есть ли способ просто указать flexbox разрыв строки в определенных точках?
Нет никакого свойства, которое мы могли бы установить для flex, чтобы оно переносило элементы на новую строку, но мы можем вставить перенос строки (вы можете представить это, как br) между двумя flex-элементами для достижения чего-то похожего:
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Есть Flexbox сетка.
Как перенести .new-string на новую строку вместе с элементами, которые идут после него?
6 ответов 6
Примечание переводчика: flex-элемент (flex item) — непосредственный ребёнок блока с display: flex .
Наиболее простое и надёжное решение — это вставка flex-элементов в правильных местах. Если они достаточно широкие ( width: 100% ), они будут создавать перенос строки.
Но это уродливо и не семантически. Вместо этого, мы можем генерировать псевдоэлементы внутры flex-контейнера и использовать свойство order чтобы перемещать их в нужные места.
Но есть ограничение: flex-контейнер может иметь только псевдоэлементы ::before и ::after . Это значит, что мы можем создать только 2 переноса строки.
Чтобы разрешить это, вы можете генерировать псевдоэлементы внутри flex-элементов вместо flex-контейнера. Таким способом вы не будете ограничены двумя. Но эти псевдоэлементы не будут flex-элементами, поэтому не будут создавать переносы строк.
Но, к счастью, спецификация CSS Display L3 ввела display: contents (в данный момент поддерживаемая только Firefox 37):
Элемент сам по себе не генерирует никаких блоков, но его дети и псевдоэлементы генерируют блоки как обычно. С целью генерации блоков и разметки элемент будет расцениваться как будто он был заменён его детьми и псевдоэлементами в дереве документа.
Поэтому вы можете применять display: contents к детям flex-контейнера и обернуть содержимое каждого внутрь дополнительного блок. Таким образом flex-элементы будут этими дополнительными обёртками и псевдоэлементами детей.
Кроме того, в соответствии с Fragmenting Flex Layout и CSS Fragmentation, flexbox позволяет принудительные переносы с помощью break-before , break-after или их псевдонимов в CSS 2.1:
Принудительные переносы строк во flexbox ещё широко не поддерживаются, но они работают в Firefox.
Flexbox
Flexbox представляет собой следующую модель.
Имеется контейнер с элементами.
Элементы размещаются в определённом направлении.
Есть две оси направления — основная и поперечная.
Элементы выравниваются как вдоль основной, так и вдоль поперечной оси.
При нехватке места элементы в контейнере могут вести себя как текст и переходить на новую строку.
Инициализация флексбокса: display: flex
Минимальный пример использования Flexbox.
<style>
.flex-container {
display: flex;
}
</style>
<div>
<div></div>
<div></div>
</div>
1
2
3. Высота не указана
У контейнера указали display: flex, а внутри контейнера разместили два элемента.
Если дочерним элементам не задавать высоту, то блоки автоматически растянутся на всю высоту контейнера. Если указать высоту, то она будут учитываться.
Главная ось: flex-direction
Вместо направлений «влево» и «вправо» во флексбоксе используется понятие «главная ось». Поток флекс-элементов «течёт» вдоль главной оси от её начала к её концу.
Элементы по умолчанию размещаются слева направо. Этому направлению соответствует правило row. Можно изменить направление справа налево через row-reverse.
.flex-container {
display: flex;
flex-direction: row-reverse;
}
Также доступны значения column и column-reverse для размещения элементов сверху вниз и снизу вверх.
Сверху вниз — flex-direction: column.
Снизу вверх — flex-direction: column-reverse.
Выравнивание
Выравниваем элементы внутри контейнера. Возьмём наглядный пример, когда мы развернули направление и элементы разместились у правого края. А мы хотим их прижать к левому краю. Для этого используется justify-content.
.flex-container {
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
}
Доступны значения flex-start, flex-end, center, space-between, space-around и stretch (по умолчанию).
Аналогично можно выравнивать относительно поперечной оси через align-items с такими же названиями.
.flex-container {
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
align-items: center;
}
Для выравнивание отдельного элемента используется align-self к самому элементу.
.flex-container {
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
align-items: center;
}
.flex-item {
align-self: flex-end;
}
Перенос
По умолчанию элементы в контейнере не переносятся, а сжимаются в размерах, чтобы уместиться в отведённом им месте. Можно переопределить это поведение и разрешить перенос на следующий ряд или столбец через flex-wrap: wrap.
.flex-container {
display: flex;
flex-wrap: wrap;
}
Можно изменить направление переноса flex-wrap: wrap-reverse.
Также доступны следующие возможности.
.flex-container {
display: flex;
}
.flex-item.nth-of-type(1){
flex-grow: 1;
}
.flex-item.nth-of-type(2) {
flex-grow: 2;
}
.flex-container {
display: flex;
}
.flex-item:nth-of-type(1) {
flex-shrink: 1;
}
.flex-item:nth-of-type(2) {
flex-shrink: 2;
}
.flex-container {
display: flex;
}
.flex-item.nth-of-type(1) {
flex-basis: 200px;
}
.flex-item.nth-of-type(2) {
flex-basis: 10%;
}
.flex-container {
display: flex;
}
.flex-item:nth-of-type(1) {
flex: 1 0 100px;
}
.flex-item:nth-of-type(2) {
flex: 2 0 10%;
}
Реклама
css — Flexbox — сначала перенести центральный элемент на новую строку
Я использую Flex Box для создания традиционного списка плавающих элементов. У меня есть три элемента со следующей структурой:
<section>
<div>
item one
</div>
<div>
item two
</div>
<div>
item three
</div>
</section>
С помощью CSS:
section{
display: flex;
flex-wrap: wrap;
}
div{
width: 33%;
min-width: 200px;
border: 1px solid black;
}
В этом текущем формате item three
всегда будет первым дочерним элементом, перенесенным на новую строку, если ширина экрана опускается ниже порогового значения.
Есть ли способ настроить Flex Box так, чтобы item two
всегда падал первым?
JSFiddle
4
Lloyd Banks 7 Дек 2016 в 18:56
2 ответа
Лучший ответ
Вы можете контролировать поведение упаковки и порядок гибких элементов в медиа-запросе:
пересмотренная скрипка
section {
display: flex;
}
div {
width: 33%;
min-width: 200px;
border: 1px solid black;
}
@media (max-width: 600px) {
section { flex-wrap: wrap; }
div:nth-child(2) { order: 1; }
}
<section>
<div>item one</div>
<div>item two</div>
<div>item three</div>
</section>
Из спецификации:
5.4. Порядок отображения: свойство
order
Элементы Flex по умолчанию отображаются и размещаются в том же порядке, в каком они появляются в исходном документе. В Свойство
order
можно использовать для изменения этого порядка.Свойство
order
управляет порядком, в котором дочерние элементы гибкого контейнера появляются внутри гибкого контейнера, с помощью отнесение их к порядковым группам. Он принимает одно значение<integer>
, которое указывает, в какой порядковой группе находится гибкий элемент. принадлежит.
Начальное значение order
для всех гибких элементов равно 0.
4
Michael Benjamin 30 Июн 2017 в 16:07
<section>
<div>
item one
</div>
<div>
item two
</div>
<div>
item three
</div>
</section>
section{
display: flex;
flex-wrap: wrap;
flex-direction:column-reverse;
}
div{
width: 33%;
min-width: 200px;
border: 1px solid black;
Другие примеры можно найти с использованием @media (max-width: 600px) {пример а также пример 2 и пример 3 и пример 4 и exmple 5 и пример 6
0
D V Yogesh 7 Дек 2016 в 16:19
Переход к новому ряду с помощью flexbox
Вот проблема: если вы хотите создать макет flexbox с несколькими рядами элементов, как вы контролируете, какой элемент в какой строке окажется? Предположим, вы хотите создать макет, который выглядит примерно так, с тремя сложенными элементами и чередующимися элементами полной ширины:
Распространенным способом управления расположением и размером гибких элементов является использование ширины
или гибкой основы
; если мы установим ширину четвертого элемента равной 100%, он будет помещен в отдельную строку.Но что, если мы не хотим или не можем устанавливать ширину отдельных элементов, действительно ли это нужно? Или есть способ просто указать flexbox на разрыв строки в определенных точках?
Нет свойства, которое мы можем установить для гибкого элемента, чтобы он разбивался на новую строку, но мы можем вставить свернутую строку (вы можете думать об этом как о
) между двумя гибкими элементами, два достигают чего-то похожего . В сущности:
/ * Вставка этой свернутой строки между двумя гибкими элементами сделает
* гибкий элемент, который появляется после того, как он переходит в новую строку * /
.сломать {
флекс-основа: 100%;
высота: 0;
}
Давайте рассмотрим некоторые сценарии, когда вы, возможно, захотите это использовать, и рассмотрим некоторые интересные методы компоновки, которые он позволяет нам использовать.
Обратите внимание, что для всех приведенных ниже примеров кода требуется и предполагается, что у вас есть гибкий контейнер с display: flex
и flex-wrap: wrap
и что гибкие элементы добавляются в этот контейнер:
.container {
дисплей: гибкий;
flex-wrap: обертка;
}
...
Вставка гибкого элемента с разрывом строки
Использование элемента для перехода к новой гибкой строке дает интересный эффект: мы можем пропустить указание ширины любого элемента в нашем гибком макете и полностью полагаться на разрывы строк для определения потока нашей сетки.
Начнем с простого примера.Скажем, у нас есть два элемента, показанные рядом (они настроены на рост с flex-grow: 1
, и у них нет определенной ширины
или flex-base
):
Мы можем вставить элемент разрыва строки между элементами, чтобы они оба занимали 100% доступного пространства:
...
...
Это создает макет с двумя вертикально расположенными элементами во всю ширину (я добавил границу к .break
element, чтобы проиллюстрировать его положение и поведение):
Как это работает? Поскольку мы сказали, что .break
должен занимать 100% ширины контейнера (потому что мы установили flex-base: 100%
), ломающийся гибкий элемент должен располагаться в отдельной строке для этого. Он не может разделить строку с первым элементом, поэтому он перейдет в новую строку, в результате чего первый элемент останется в одной строке. Затем первый элемент будет расти, чтобы заполнить оставшееся пространство (поскольку мы установили flex-grow: 1
).Та же логика применима и ко второму элементу.
Мы можем использовать эту технику для создания макета в верхней части сообщения, разбивая до и после каждого четвертого элемента:
...
...
...
...
...
...
...
Это создаст макет в верхней части сообщения в блоге.По сути, элемент не перейдет в новую строку, если мы не вставим элемент разрыва строки:
Опять же, нам не нужно было указывать ширину ни для одного из этих элементов. Тот же метод будет работать для столбцов, если у нас есть гибкий контейнер с flex-direction: column
, и установите ширину
(вместо высоты
) на 0
для нашего разрушающего элемента:
/ * Использовать свернутый столбец для перехода на новый столбец * /
.break-column {
флекс-основа: 100%;
ширина: 0;
}
Такой подход с использованием элементов разрыва строки для определения макета определенно добавляет некоторого раздувания и шума в наш HTML, но при правильном использовании он может быть мощным инструментом.Мы можем, например, использовать его для создания макета кладки только с помощью CSS и динамически позиционировать разрывы с помощью свойства order
. Мы также можем перейти к новой строке без изменения ширины любого элемента содержимого, и мы можем полагаться исключительно на flex-grow
для распределения пространства в макете сетки.
Предположим, мы хотим создать этот макет:
И предположим, что мы хотим сделать это, установив разные значения flex-grow
для распределения пространства (вместо использования flex-base
или width
, которые вам придется пересчитать, как только вы добавите или удаленные элементы):
.элемент {flex-grow: 1; }
.item-wide {flex-grow: 3; }
Если мы хотим добавить еще одну строку элементов ниже этой строки:
Мы не смогли бы сделать это, не прибегая к установке flex-base
или ширины
по крайней мере для некоторых элементов (или создания вложенного макета flexbox с одним гибким элементом для каждой строки). Если бы все элементы имели разные значения flex-grow
, ничто не заставило бы их перейти в новую строку, все они просто втиснулись бы в одну строку вместе:
Уютно, но не то, что нам нужно.Однако, если мы вставим ломающийся элемент, мы можем построить этот макет, распределив все пространство с помощью flex-grow
:
.item {flex-grow: 1; }
.item-wide {flex-grow: 3; }
Получение желаемого макета со всеми размерами, определенными пропорционально с помощью flex-grow
:
И если есть сценарий, когда нам нужно пять элементов в первой строке, нам не нужно изменять какой-либо CSS, чтобы это работало, мы можем просто добавить эти элементы перед разрывом строки:
Все, что вам нужно добавить в свой CSS для использования элементов разрыва строки, — это эти два класса (единственное различие между этими двумя классами состоит в том, что ширина
(а не высота
) должна быть установлена на 0
для элемент для сворачивания при использовании в макете столбца):
/ * Вставка свернутой строки между двумя гибкими элементами сделает
* гибкий элемент, который появляется после того, как он переходит в новую строку * /
.сломать {
флекс-основа: 100%;
высота: 0;
}
/ * Используйте свернутый столбец для перехода к новому столбцу * /
.break-column {
флекс-основа: 100%;
ширина: 0;
}
Вы, безусловно, можете достичь того же эффекта или аналогичных эффектов, вложив гибкие блоки и имея один гибкий элемент для каждой строки, и во многих случаях просто используя гибкую основу
, ширину
или содержимое в гибких элементах, вероятно, предпочтительнее способ управления потоком элементов в макете flexbox. Но вставка гибких элементов с разрывом линий доступна и проста в использовании, она работает, и эта техника обладает некоторыми уникальными характеристиками, которые могут пригодиться.
html — Как разбить строку внутри Flexbox?
html — Как разбить строку внутри Flexbox? — Переполнение стекаПрисоединяйтесь к Stack Overflow , чтобы учиться, делиться знаниями и строить свою карьеру.
Спросил
Просмотрено 6к раз
На этот вопрос уже есть ответы :
Закрыт 4 месяца назад.
У меня есть изображение и текст внутри Flexbox. Я хочу, чтобы текст был ниже изображения, но по какой-то причине они просто расположены бок о бок.
.container {
ширина: 80%;
дисплей: гибкий;
flex-direction: ряд;
justify-content: center;
}
.sizethis {
ширина: 60%;
маржа: 0 40px;
}
.коробка {
ширина: 23%;
маржа: 1%;
высота: 180 пикселей;
граница: сплошная 1px # c4c4c4;
дисплей: встроенный гибкий;
align-items: center;
justify-content: center;
}
Пункт номер один
Создан 11 июл.
Андре Оливейра1,935 золотых знаков2020 серебряных знаков4949 бронзовых знаков
4Попробуй добавить в свой ‘.box ‘класс:
flex-direction: столбец;
вертикальное выравнивание: сверху;
Похоже, это может решить вашу проблему.
https://jsfiddle.net/85L0sd9o/
Создан 11 июл.
1Я хочу, чтобы текст располагался под изображением, но по какой-то причине они остаются бок о бок.
Они просто держатся бок о бок, потому что гибкий контейнер имеет следующие начальные настройки:
-
flex-direction: ряд
~ все гибкие элементы должны быть выровнены горизонтально -
flex-wrap: nowrap
~ все гибкие элементы ограничены одной линией
Если вы хотите расположить предметы вертикально, есть два метода:
- Добавьте
flex-direction: column
в контейнер. Это отменяет значение по умолчаниюстроки
.
.box {
дисплей: гибкий;
flex-direction: столбец;
align-items: center;
justify-content: center;
выравнивание текста: центр;
ширина: 23%;
высота: 180 пикселей;
граница: сплошная 1px # c4c4c4;
}
Пункт номер один
- Добавить
flex-wrap: обернуть
в контейнер.Это отменяет значение по умолчаниюnowrap
. Затем дайте каждому гибкому элементу достаточную ширину, чтобы переместить следующий элемент в следующую строку.
.box {
дисплей: гибкий;
flex-wrap: обертка;
выровнять контент: центр;
align-items: center;
justify-content: center;
выравнивание текста: центр;
ширина: 23%;
высота: 180 пикселей;
граница: сплошная 1px # c4c4c4;
}
п {
гибкость: 0 0100%;
}
Пункт номер один
Создан 11 июл.
Майкл БенджаминМайкл Бенджамин273k8181 золотой знак
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками html css flexbox или задайте свой вопрос.
lang-html
Stack Overflow лучше всего работает с включенным JavaScriptВаша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie Настроить параметры
html — разрыв строки внутри flex
html — разрыв строки внутри flex — qaruПрисоединяйтесь к Stack Overflow , чтобы учиться, делиться знаниями и строить свою карьеру.
Спросил
Просмотрено 1к раз
На этот вопрос уже есть ответы :
Закрыт 11 месяцев назад.
Я рассмотрел ответы на вопросы о вставке разрывов строк при использовании гибкости. Однако у меня ситуация несколько иная.
У меня есть левый столбец и правый столбец. Левый столбец всегда должен быть 200 пикселей, несмотря ни на что. Правый столбец должен содержать три столбца, а затем разрыв строки на следующие три столбца.
Как я уже указывал, flex-wrap: nowrap; это имеет тенденцию усложнять ситуацию.
Есть идеи, возможно ли это? Я уверен, что так должно быть, но я сталкивался с этим без решения.
.flex {
дисплей: гибкий;
Flex-wrap: nowrap;
}
.Разрыв строки {
ширина: 100%;
}
.leftcol {
ширина: 200 пикселей;
граница: сплошной зеленый 1px;
}
.rightcol {
дисплей: гибкий;
flex-wrap: обертка;
ширина: 100%;
граница: 1 пиксель сплошного синего цвета;
}
.rightcol div {
ширина: 100 пикселей;
маржа: 1%;
граница: сплошной красный 1px;
}
Вещи
1
2
3
4
5
6
Создан 30 авг.
4 Вам необходимо установить .line-break
имеет высоту 1px
, а также, когда вы выбираете элементы div из .rightcol
, не выбирайте .line-break
, а только элементы div, содержащие числа, например:
.flex {
дисплей: гибкий;
Flex-wrap: nowrap;
}
.Разрыв строки {
ширина: 100%;
высота: 1 пикс;
}
.leftcol {
ширина: 200 пикселей;
граница: сплошной зеленый 1px;
}
.rightcol {
дисплей: гибкий;
flex-wrap: обертка;
ширина: 100%;
граница: 1 пиксель сплошного синего цвета;
}
.rightcol div: not (.line-break) {
ширина: 100 пикселей;
маржа: 1%;
граница: сплошной красный 1px;
}
Вещи
1
2
3
4
5
6
Создан 30 авг.
Левый столбец всегда должен быть 200 пикселей, несмотря ни на что.
Так что отключите flex-shrink
на .leftcol
.
Правый столбец должен содержать три столбца, а затем разрыв строки до следующих трех столбцов.
(я думаю, вы имеете в виду «перенос строки на следующую строку»?)
Используйте вложенную сетку на .rightcol
.
.flex {
дисплей: гибкий;
Flex-wrap: nowrap;
}
.Разрыв строки {
ширина: 100%;
}
.leftcol {
ширина: 200 пикселей;
гибкость-усадка: 0; / * отключаем гибкое сжатие * /
/ * flex: 0 0 200 пикселей; можно удалить обе строки выше и использовать вместо них * /
граница: сплошной зеленый 1px;
}
.rightcol {
гибкость: 1;
дисплей: сетка;
сетка-шаблон-столбцы: 1fr 1fr 1fr;
сетка-автоматические строки: 50 пикселей;
сетка-пробел: 10 пикселей;
отступ: 10 пикселей;
граница: 1 пиксель сплошного синего цвета;
}
.rightcol div {
граница: сплошной красный 1px;
}
Вещи
1
2
3
4
5
6
7
8
Создан 30 авг.
Майкл БенджаминМайкл Бенджамин273k8181 золотой знак
Вам необходимо сделать так, чтобы класс разрыв строки
имел более высокую специфичность, чем .rightcol div
класс:
Либо:
.line-break {
ширина: 100%! важно;
}
или:
.rightcol div.line-break {
ширина: 100%;
}
исправит проблему
.flex {
дисплей: гибкий;
Flex-wrap: nowrap;
}
.rightcol div.line-break {
ширина: 100%;
}
.leftcol {
ширина: 200 пикселей;
граница: сплошной зеленый 1px;
}
.rightcol {
дисплей: гибкий;
flex-wrap: обертка;
ширина: 100%;
граница: 1 пиксель сплошного синего цвета;
}
.rightcol div {
ширина: 100 пикселей;
маржа: 1%;
граница: сплошной красный 1px;
}
Вещи
1
2
3
4
5
6
Создан 30 авг.
Дантемандантеман1,94922 золотых знака44 серебряных знака1010 бронзовых знаков
5lang-html
Stack Overflow лучше всего работает с включенным JavaScriptВаша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie Настроить параметры
html — Принудительно разорвать линию внутри flexbox
После обширного исследования я обнаружил, что не только мой первый ответ был неправильным, но и метод добавления новой строки в свойство content:
не то, что я указал.Я прошу прощения.
Правильный способ добавить новую строку (как я нашел в этом ответе на аналогичный вопрос) — использовать не
, а
\ A
в свойстве content:
и дополнительно отформатировать стиль элемент, созданный :: после
(или :: до
) следующим образом:
.two :: after {
содержание: «\ А»;
белое пространство: предварительно;
}
Хотя этот фрагмент кода действительно выполняет вставку новой строки в «анонимный элемент», созданный путем присвоения свойства И снова приношу свои извинения за мой предыдущий неверный ответ. Я сохранил свой предыдущий ответ, чтобы объяснить , почему был неправильным, и дать больше контекста этому ответу. Почему: Оператор Вы можете добавить стиль: Это добавит разрыв строки после каждого элемента Свойство Он определяет, будут ли гибкие элементы размещаться в одной строке или могут быть объединены в несколько строк.Если установлено несколько линий, он также определяет поперечную ось, которая определяет направление, в котором складываются новые линии. Напоминание: поперечная ось — это ось, перпендикулярная главной оси. Его направление зависит от направления главной оси. Свойство В следующей демонстрации: Примечание: для См. Демонстрацию Pen Flex-wrap: CSS-Tricks (@ css-tricks) на CodePen. Для получения дополнительной информации о том, как смешивать синтаксисы, чтобы получить лучшую поддержку браузера, обратитесь к этой статье (CSS-Tricks) или этой статье (DevOpera). Flexbox был разработан как одномерный макет, что означает, что он имеет дело с размещением элементов в виде строки или столбца, но не обоих сразу. Однако есть возможность обернуть гибкие элементы на новые строки, создавая новые строки, если Начальное значение свойства Предметы будут упакованы в контейнер. В следующем примере у меня есть десять элементов, все с гибкой базой То же самое происходит и со столбцами. Контейнер должен иметь высоту, чтобы элементы начали упаковываться и создавать новые столбцы, а элементы растягивались выше, чтобы полностью заполнить каждый столбец. Wrapping работает так, как и следовало ожидать, в сочетании с Обратите внимание, что реверсирование происходит только в линейном направлении. Мы начинаем справа, затем переходим на вторую линию и снова начинаем справа. Мы не разворачиваемся в обе стороны, начиная снизу вверх по контейнеру! Как мы видели из приведенных выше примеров, если нашим элементам разрешено увеличиваться и уменьшаться, когда в последней строке или столбце меньше элементов, тогда эти элементы растут, чтобы заполнить доступное пространство. В flexbox нет метода, чтобы указать элементам в одной строке выровняться с элементами в строке выше — каждая гибкая линия действует как новый гибкий контейнер.Он имеет дело с распределением пространства по главной оси. Если есть только один элемент и этому элементу разрешено расти, он заполнит ось, как если бы у вас был один гибкий контейнер для одного элемента. Если вам нужна двухмерная разметка, то вам, вероятно, понадобится Grid Layout. Мы можем сравнить наш приведенный выше пример обернутой строки с версией этого макета CSS Grid, чтобы увидеть разницу. В следующем живом примере используется CSS Grid Layout для создания макета, который имеет столько столбцов размером не менее 160 пикселей, сколько может поместиться, с распределением дополнительного пространства между всеми столбцами.Однако в этом случае элементы остаются в своей сетке и не растягиваются, когда их меньше в последнем ряду. В этом разница между одномерным и двухмерным макетом. В одномерном методе, таком как flexbox, мы управляем только строкой или столбцом. В двухмерном макете, таком как сетка, мы контролируем и то, и другое одновременно. Если вы хотите, чтобы пространство распределялось по строкам, используйте flexbox. Если нет, используйте сетку. Обычно сеточные системы на основе flexbox работают, возвращая flexbox в знакомый мир макетов на основе float.Если вы назначаете процентную ширину гибким элементам — либо как Здесь я установил Если вам нужно, чтобы гибкие элементы выстраивались по поперечной оси, такое управление шириной позволит добиться этого. Однако в большинстве случаев добавление ширины к гибким элементам таким образом демонстрирует, что вам, вероятно, будет лучше переключиться на макет сетки для этого компонента. При упаковке гибких элементов может возникнуть необходимость их разнесения. В настоящее время у нас нет никаких реализаций свойств зазора из модуля Box Alignment для Flexbox. В будущем мы сможем использовать Из живого примера ниже видно, что для создания зазоров, которые также не создают зазоров по краям контейнера, нам нужно использовать отрицательные поля на самом гибком контейнере. Затем любая граница гибкого контейнера перемещается во вторую оболочку, чтобы отрицательное поле могло подтянуть элементы к этому элементу оболочки. Именно это требование решит за нас свойство пробелов, когда оно будет реализовано.Правильные зазоры возникают только на внутренних краях предметов. Спецификация flexbox подробно описывает, что должно произойти, если гибкий элемент свернут, установив для элемента «Указание видимости: сворачивание гибкого элемента приводит к тому, что он становится свернутым гибким элементом, создавая эффект, аналогичный видимости: сворачивание в таблице-строке или столбце таблицы: свернутый гибкий элемент полностью удаляется из рендеринга, но оставляет позади «распорка», которая сохраняет стабильность поперечного размера гибкой лески.Таким образом, если гибкий контейнер имеет только одну гибкую линию, динамическое сворачивание или разворачивание элементов может изменить основной размер гибкого контейнера, но гарантированно не повлияет на его поперечный размер и не заставит остальную часть макета страницы «качаться». «. Однако перенос гибкой линии выполняется повторно после сворачивания, поэтому поперечный размер гибкого контейнера с несколькими линиями может измениться, а может и не измениться ». — Свернутые предметы Это поведение полезно, если вы хотите настроить таргетинг на гибкие элементы с помощью JavaScript, например, для отображения и скрытия содержимого.Пример в спецификации демонстрирует один такой шаблон. В следующем живом примере у меня есть гибкий контейнер без упаковки. Третий элемент имеет больше содержимого, чем другие, но для него задана видимость Примечание. Используйте Firefox для двух приведенных ниже примеров, поскольку Chrome и Safari рассматривают свертывание как скрытое. Однако, имея дело с многострочными гибкими контейнерами, вы должны понимать, что обертывание выполняется повторно после обрушения . Таким образом, браузеру необходимо заново выполнить упаковку, чтобы учесть новое пространство, оставшееся после свернутого элемента во внутреннем направлении. Это означает, что элементы могут оказаться в строке, отличной от той, с которой они начали.В случае отображения и скрытия элемента это вполне может привести к тому, что элементы окажутся в другой строке. Я создал это поведение в следующем живом примере. Вы можете увидеть, как растяжение меняет строку в зависимости от положения свернутого элемента. Если вы добавите дополнительный контент ко второму элементу, он изменит строку, как только станет достаточно длинной. Эта верхняя строка становится такой же высотой, как одна строка текста. Если это вызывает проблемы для вашего макета, это может потребовать переосмысления структуры, например, помещения каждой строки в отдельный гибкий контейнер, чтобы они не могли сдвигать строки. Когда вы устанавливаете для элемента значение Flexbox, или Flexible Box Layout, — это новый режим макета в CSS3, предназначенный для компоновки сложных приложений и веб-страниц. В CSS 2.1 были определены четыре режима макета, которые определяют размер и положение боксов на основе их отношений с их родственными и родительскими блоками: блочный макет , , предназначенный для размещения документов, в котором элементы размещаются на странице вертикально; встроенный макет , предназначенный для горизонтального размещения текста внутри блочных контейнеров; макет таблицы , предназначенный для размещения двумерных данных в табличном формате; и позиционируемый макет , разработанный для очень явного позиционирования без особого учета других элементов в документе. Flexbox похож на блочную компоновку, за исключением того, что в ней отсутствуют многие свойства, которые можно использовать в блочной компоновке, такие как поплавки и столбцы. Но опять же, он обладает большей гибкостью для распределения пространства и выравнивания контента способами, которые часто необходимы веб-приложениям и сложным веб-страницам. Он решает многие другие проблемы компоновки, с которыми мы боролись и пытались решить в течение очень долгого времени, такие как вертикальное центрирование, например, среди многих других. Flexbox позволяет размещать элементы в контейнере, упорядочивать и (пере) упорядочивать их, выравнивать и распределять пространство между ними (и / или вокруг) независимо от их размера. Это позволяет сделать их буквально гибкими — элементы внутри контейнера можно растягивать и сжимать, чтобы вместить доступное пространство, и их размер можно изменять пропорционально друг другу, а любое доступное пространство между ними или вокруг них может быть распределено между ними на основе пропорция, которую вы можете указать. Используя flexbox, вы также можете размещать элементы внутри контейнера в любом направлении: горизонтальном или вертикальном, называемом направлениями гибкости; вы не привязаны к одному направлению, как в других режимах макета. Это позволяет создавать более адаптивные и отзывчивые макеты, которые адаптируются к изменениям макета на экранах разных размеров и ориентации. И последнее, но не менее важное: вы можете изменить визуальный порядок элементов внутри контейнера, не влияя на их фактический порядок в разметке.Это означает, что вы можете изменить порядок, в котором определенные элементы отображаются на странице, сохраняя при этом их порядок в разметке. Это полезно, когда вы хотите выделить определенные элементы, например, избранную запись в блоге, даже если эти элементы не идут первыми в разметке. Первым шагом к использованию Flexbox является создание гибкого контейнера .Дочерние элементы гибкого контейнера называются гибкими элементами и размещаются внутри гибкого контейнера с использованием свойств Flexbox. Некоторые свойства Flexbox применяются к контейнеру, другие — к элементам Flex. Гибкий контейнер создается путем установки свойства Дисплей Дочерние элементы гибкого контейнера, гибкие элементы, размещаются с использованием макета Flexbox. На любой элемент за пределами гибкого контейнера не влияет определенный на нем макет Flexbox, и он будет отображаться, как обычно на странице. Прежде чем перейти к свойствам Flexbox, которые управляют и настраивают макет Flexbox, есть два понятия и термины, с которыми вы должны сначала познакомиться: оси гибкости , , и линии гибкости , . В отличие от блочного и встроенного макета, макет которого основан на блочном и встроенном направлениях потока, гибкий макет основан на направлениях гибкости . Концепция направлений изгиба основана на концепции осей , , которые определяют направления, вдоль которых укладываются элементы изгиба. На следующем рисунке показаны оси, определенные в гибком контейнере: В зависимости от значений свойств Flexbox элементы гибкости будут располагаться внутри гибкого контейнера, следуя либо основной оси , либо поперечной оси . Перед использованием макета Flexbox необходимо ознакомиться с этими концепциями.Все в макете Flexbox относится к этим двум осям. Гибкие элементы в гибком контейнере располагаются и выравниваются в пределах гибких линий , гипотетической линии, используемой для группировки и выравнивания гибких элементов внутри их контейнера. Линии изгиба следуют за главной осью. Гибкий контейнер может быть однострочным или многострочным , в зависимости от свойства На приведенном выше рисунке предполагается, что режим записи — слева направо (LTR).Гибкая линия следует направлению текста, который в режиме слева направо — слева направо, сверху вниз. Однако, если вы измените направление текста с помощью свойства Кроме того, при изменении режима записи направления как главной оси, так и поперечной оси также изменятся.Например, в раскладке на японском языке основная ось расположена вертикально, а поперечная ось — горизонтальна. См. Пример в разделе свойств Дополнительные сведения о возможных режимах и направлениях записи см. В модуле CSS Writing Modes Module и в записи свойства Свойство Возможные значения имеют следующие значения: Обратите внимание, что обратные значения не меняют порядок боксов; как Следующая демонстрация иллюстрирует результат применения четырех значений Ниже приведена та же демонстрация с другим режимом записи. Направленность текста установлена на Здесь стоит отметить, что гибкий контейнер изначально имеет одну гибкую линию, и гибкие элементы размещаются на этой единственной строке, даже если это означает, что они будут переполнять контейнер. Чтобы элементы переносились по нескольким строкам, используется свойство Свойство Возможные значения имеют следующие значения: Следующая демонстрация иллюстрирует результат применения четырех значений Все элементы гибкости будут пытаться уместиться на одной линии, как вы можете видеть в демонстрации. Используя разные значения Свойство flex-flow является сокращением для установки свойств Начальное значение свойства В следующих примерах показан результат применения различных значений Обратите внимание, что направления Свойство Возможные значения имеют следующие значения: В следующей демонстрации показан результат применения различных значений Свойство Возможные значения имеют следующие значения: Следующая демонстрация показывает результат применения различных значений Когда значение Обратите внимание, что свойство Свойство Возможные значения имеют следующие значения: Обратите внимание, что только гибкие контейнеры с несколькими линиями всегда имеют свободное пространство на поперечной оси для линий, которые необходимо выровнять, потому что в гибких контейнерах с одной линией единственная линия автоматически растягивается, чтобы заполнить пространство (это поведение по умолчанию). Следующая демонстрация показывает результат применения различных значений Элементы Flex по умолчанию отображаются и размещаются в том же порядке, в каком они появляются в исходном документе.Свойство Свойство Затем гибкий контейнер размещает свое содержимое в порядке изменения порядка документов, начиная с порядковой группы с наименьшим номером и далее вверх. Элементы с одинаковой порядковой группой располагаются в том порядке, в котором они появляются в исходном документе . Начальный порядок всех гибких элементов равен нулю (0) , и гибкие элементы отображаются в том порядке, в котором они появляются в исходном коде. Свойство Обратите внимание, что порядок, в котором гибкий элемент появляется внутри своего контейнера, изменяется только на экране, а не в исходном документе .Это означает, что программы чтения с экрана будут читать гибкие элементы в том порядке, в котором они появляются в источнике документа, а не в порядке, указанном с помощью свойства Это свойство может быть полезно для изменения порядка сообщений в блогах, например, когда вы можете захотеть разместить сообщение в блоге в начале страницы, даже если эта статья уже не самая последняя. Будет сохранен логический порядок, доступный для программ чтения с экрана, и статью можно будет визуально заменить, не влияя на доступность. Попробуйте изменить порядок элементов в следующем гибком контейнере, чтобы увидеть, как они переупорядочиваются визуально. Элементы Flex могут быть выровнены по поперечной оси текущей строки гибкого контейнера, аналогично Возможные значения имеют следующие значения: В следующей демонстрации элементы выравниваются внутри гибкого контейнера сначала с помощью свойства Свойство Если гибкие элементы расположены на гибкой линии так, что они не занимают всего пространства на этой строке, вы можете «развернуть» гибкие элементы так, чтобы они заполняли всю строку.Объем доступного пространства в строке можно распределить между элементами гибкости в соответствии с определенной пропорцией, которую можно указать с помощью свойства Например, вы можете распределить пространство между гибкими элементами так, чтобы один из этих элементов всегда занимал в два раза больше места, чем другие. Это можно сделать, установив для свойства Попробуйте ввести другие значения для свойства Обратите внимание, что свойство Свойство Свойство Если сумма основных размеров (см. Понятия и терминологию) всех гибких элементов больше, чем основной размер гибкого контейнера, вы можете указать, насколько вы хотите «сжать» гибкие элементы.Величина, на которую основные размеры гибких элементов превышают основной размер контейнера, является отрицательным пространством. Используя свойство Например, вы можете распределить пространство между гибкими элементами так, чтобы один из этих элементов всегда занимал в два раза больше отрицательного пространства, чем другие.Вы можете сделать это, установив для свойства Элементы в следующей демонстрации размещаются внутри контейнера, имеющего основной размер Обратите внимание, что свойство Свойство Свойство За исключением Если указанное значение Свойство В следующей демонстрации Свойство Когда элемент является гибким элементом, вместо основного свойства размера (свойства ширины или высоты, см. Концепции и терминологию) используется Начальное значение - Если значение Если свойство Если значение Начальные значения свойств Ниже приведены некоторые из распространенных значений Обратите внимание, что по умолчанию гибкие элементы не сжимаются ниже минимального размера содержимого (длины самого длинного слова или элемента фиксированного размера). Чтобы изменить это, установите свойство Измените значение свойства Flexbox предоставляет нам простые решения для некоторых из самых старых проблем и «святого Грааля» в веб-дизайне. Вертикальное центрирование долгое время было одним из самых востребованных решений CSS.С Flexbox центрировать элемент внутри контейнера становится проще простого. Вы начинаете с создания гибкого контейнера: Затем, используя свойство И это все! Независимо от размера элемента, он всегда будет центрирован внутри своего контейнера.Ниже приведена живая демонстрация приведенного выше примера кода. Одна из многих вещей, которые мы обычно пытаемся выполнить для наших проектов, но не имеем прямого способа сделать это в CSS, - это создать макет с несколькими столбцами (скажем, с двумя или тремя столбцами), в котором все столбцы имеют одинаковую высоту. независимо от того, сколько контента в каждом из них. Это типично для макетов блогов с двумя столбцами или макетов журналов с несколькими столбцами. Используя flexbox, создать столбцы одинаковой высоты так же просто, как 1 2 3. Мы будем использовать очень простую разметку для простого блога. Мы хотим, чтобы боковая панель имела ту же высоту, что и основной раздел, независимо от количества контента в каждом из них.Раньше мы использовали хакерский путь к этому, используя, среди прочего, такие методы, как искусственные столбцы. Используя Flexbox, мы можем достичь одинаковых высот вот так: Затем вы можете установить ширину и коэффициенты увеличения / уменьшения гибкости с помощью свойства Используя медиа-запросы, вы можете изменить макет двух столбцов и наложить их друг на друга на небольших экранах, используя свойство Как упоминалось ранее, вы также можете изменить порядок отображения элементов, используя свойство Прикрепить нижний колонтитул к нижней части страницы, даже если содержимое страницы над нижним колонтитулом меньше, чем область просмотра, - это то, что почти каждому из нас приходилось делать в какой-то момент. Некоторое время в сети было несколько методов, позволяющих это сделать, но все они полагаются на знание высоты нижнего колонтитула; без знания высоты нижнего колонтитула эти методы не сработают. Flexbox позволяет нам легко прикрепить нижний колонтитул к нижней части страницы (хотя и не исправлять). Вы начинаете с вертикальной укладки гибких элементов, используя CSS прост: Ниже приведена живая демонстрация, показывающая приведенный выше код в действии: Еще один способ помощи Flexbox - это размещение элементов навигации. До появления flexbox мы могли размещать элементы, используя встроенные, встроенные блочные или блочные дисплеи, либо размещая элементы рядом друг с другом. Итак, если навигация занимает все горизонтальное пространство, а элементы недостаточно широки (по тексту), чтобы заполнить это пространство, они будут сброшены либо вправо, либо влево, с большим пространством на Другая сторона.Если бы вы разложили их, чтобы заполнить пространство, вам нужно было бы установить указанную ширину и выполнить необходимые для этого вычисления, а затем добавить отступы и возможные поля для разнесения элементов. Как вы уже догадались, Flexbox значительно упрощает распространение элемента навигации. Используя Более того, вы можете превратить его в вертикальную навигацию с элементами, наложенными друг на друга на небольших экранах, также очень просто. Ниже представлена живая демонстрация вышеуказанного кода. Flexbox может намного больше. Филип Уолтон создал популярную страницу под названием «Решено с помощью Flexbox», которая демонстрирует «проблемы, которые когда-то было трудно или невозможно решить с помощью одного лишь CSS, а теперь решаются тривиально легко с помощью Flexbox». Зои Микли Гилленуотер также выступила с прекрасным докладом на SmashingConf под названием «Повышение уровня с помощью Flexbox». В ее презентации представлено множество практических примеров использования Flexbox, а также способы начать использовать Flexbox сегодня, не беспокоясь о старых браузерах, обеспечивая достойную альтернативу этим браузерам. content:
элементу :: after
-selected, он не решает проблему работы с Дополнительные ресурсы:
.class :: after {content: "";}
не помещает элементы после выбранного элемента. Вместо этого он помещает свой аргумент в анонимный элемент, который затем добавляется к существующему содержимому выбранного элемента.См. Этот сайт для описания тега :: after
и эту страницу для получения информации о фактическом поведении свойства content:
.
div.two :: after {content: "
";}
class = "two"
. Селектор :: after
применит стиль непосредственно к концу любого совпадающего содержимого элемента.В этом случае мы добавляем текст, разрыв строки (
) в это пространство после
content:
. Обратите внимание на кавычки вокруг разрыва строки "
; они гарантируют, что аргумент обрабатывается как строка.
" гибкая пленка | CSS-уловки
flex-wrap
— это подсвойство модуля Flexible Box Layout. flex-wrap
принимает 3 разных значения: nowrap
( по умолчанию ): однострочный, который может вызвать переполнение контейнера wrap
: многострочный, направление определяется flex-direction
wrap-reverse
: многострочный, противоположный направлению, заданному flex-direction
Синтаксис
гибкая пленка: nowrap | упаковка | обертка-реверс
.flex-container {
flex-wrap: обертка;
}
Демо
nowrap
обертка
с перемоткой назад
flex-direction
установлено значение по умолчанию: строка
. Сопутствующие объекты
Другие ресурсы
Поддержка браузера
Desktop
Chrome Firefox IE Edge Safari 21 * 28 11 12 11 12 Мобильный Android Chrome Android Firefox Android iOS Safari 92 90 4.4 7,0-7,1 * Освоение упаковки элементов Flex — CSS: каскадные таблицы стилей
flex-direction
— это строка
и новые столбцы, если flex-direction
— столбец
.В этом руководстве я объясню, как это работает, для чего он предназначен и в каких ситуациях действительно требуется CSS Grid Layout, а не flexbox. flex-wrap
— nowrap
. Это означает, что если у вас есть набор гибких элементов, которые слишком широки для своего контейнера, они переполнят его. Если вы хотите заставить их переноситься, когда они становятся слишком широкими, вы должны добавить свойство flex-wrap
со значением wrap
или использовать сокращенное обозначение flex-flow
со значениями переноса строк
или столбцов обертка
.
из 160 пикселей
и способностью увеличиваться и уменьшаться. Как только первая строка достигает точки, где недостаточно места для размещения другого элемента размером 160 пикселей, для элементов создается новая гибкая линия и так далее, пока не будут размещены все элементы. По мере того, как элементы могут расти, они будут увеличиваться более чем на 160 пикселей, чтобы полностью заполнить каждую строку. Если в последней строке есть только один элемент, он растянется, чтобы заполнить всю строку. flex-direction
. Если для flex-direction
установлено значение row-reverse
, то элементы будут начинаться с конечного края контейнера и располагаться в обратном порядке. flex-base
, либо добавляя ширину к самому элементу, оставляя значение flex-base
как auto
— вы можете получить впечатление двумерного макета. Вы можете увидеть это в приведенном ниже примере. flex-grow
и flex-shrink
до 0
, чтобы создать негибкие гибкие элементы, а затем я контролирую гибкость с помощью процентов, как мы это делали в макетах с плавающей запятой. row-gap
и column-gap
для flexbox, как мы это делаем для CSS Grid.В настоящее время для этого вам нужно будет использовать поля. visibility: collapse
. См. Документацию MDN для свойства visibility
. Спецификация описывает поведение следующим образом:: свернуть
, и поэтому гибкий контейнер сохраняет стойку высоты, необходимой для отображения этого элемента. Если вы удалите видимость : сверните
из CSS или измените значение на visible
, вы увидите, что элемент исчезнет, а пространство перераспределится между несвернутыми элементами; высота гибкого контейнера не должна изменяться. Разница между
visibility: hidden
и display: none
display: none
, чтобы скрыть его, элемент удаляется из структуры форматирования страницы. На практике это означает, что счетчики игнорируют это, и такие вещи, как переходы, не выполняются. Использование visibility: hidden
сохраняет прямоугольник в структуре форматирования, что полезно тем, что он по-прежнему ведет себя так, как если бы он был частью макета, даже если пользователь его не видит. Flexbox | Codrops
Сводка свойств Flexbox
flex-direction
гибкая пленка
гибкий поток
justify-content
align-items
align-content
заказ
align-self
гибкий рост
гибкая усадка
гибкая основа
гибкий
Создание гибкого макета: гибкий контейнер и элементы
display
элемента на flex
или inline-flex
.
.flex-container {
дисплей: гибкий;
}
/* или */
.flex-container {
дисплей: встроенный гибкий;
}
: flex
создает гибкий контейнер на уровне блоков; display: inline-flex
создает гибкий контейнер встроенного уровня. Гибкий контейнер становится гибким контекстом для своих прямых потомков. Понятия и терминология
Гибкие оси
width
или height
, в зависимости от того, какое из них находится в главном измерении. ширины
или высоты
, которое находится в поперечном измерении. Гибкие линии
flex-wrap
: flex-wrap
. Каждая строка содержит хотя бы один гибкий элемент, если только сам гибкий контейнер не является полностью пустым. Режимы записи
direction
, направление гибкой линии также изменится, изменив направление расположения гибких элементов. flex-flow
. direction
. Свойства Flexbox: Свойства контейнера Flex
Направление изгиба
Свойство
flex-direction: строка | ряд-обратный | столбец | столбец-обратный
flex-direction
определяет, как гибкие элементы размещаются в гибком контейнере, путем установки направления главной оси гибкого контейнера.Это определяет направление, в котором располагаются гибкие элементы. На направление осей влияет режим письма и направленность текста (продолжить чтение)., строка
, за исключением того, что направления main-start и main-end меняются местами. Основная ось гибкого контейнера имеет противоположную ориентацию по сравнению с текущим режимом записи. будет горизонтальным по отношению к языку.
, за исключением того, что направления main-start и main-end меняются местами. Writing-Mode
и direction
, они изменяют только направление потока.Порядок рисования, порядок речи и последовательные порядки навигации не затрагиваются. flex-direction
к гибкому контейнеру. rtl
(справа налево). Посмотрите, как это влияет на направление главной оси и, следовательно, на направление, в котором расположены элементы. flex-wrap
(см. Следующий раздел). Гибкая пленка
Свойство
flex-wrap: nowrap | упаковка | обертка-реверс
flex-wrap
управляет тем, является ли гибкий контейнер однострочным или многострочным, а также направлением поперечной оси, которое определяет направление, в котором новые линии уложены в дюймов. flex-direction
выше). flex-direction
выше). wrap
, за исключением того, что перекрестное начало и перекрестное направление меняются местами. Это означает, что дополнительные гибкие линии добавляются в направлении, противоположном поперечной оси. flex-wrap
к гибкому контейнеру.Обратите внимание, что для всех других свойств Flexbox установлены значения по умолчанию. flex-wrap
, вы можете изменить это и заставить их переноситься по нескольким строкам. Гибкий поток
Свойство
гибкий поток: <'гибкое направление'> <'гибкое обертывание'>
flex-direction
и flex-wrap
, которые вместе определяют основную и поперечную оси гибкого контейнера. flex-flow
представляет собой конкатенацию начальных значений свойств flex-direction
и flex-wrap
:
flex-flow: row nowrap;
flex-flow
к гибкому контейнеру. Примеры показывают результат применения значений строки
и столбца
свойства flex-direction
с различными значениями из свойства flex-wrap
.Попробуйте изменить значения свойства flex-flow
, включив в него значения row-reverse
и column-reverse
свойства flex-direction
, чтобы увидеть, как это меняет макет. flex-flow
чувствительны к режиму записи. В вертикальном японском языке, например, гибкий контейнер row размещает свое содержимое сверху вниз, как показано в этом примере: The
justify-content
Property
justify-content: flex-start | гибкий конец | центр | пространство между | пространство вокруг
justify-content
выравнивает гибкие элементы вдоль главной оси текущей строки гибкого контейнера. Это делается после того, как были разрешены любые гибкие длины и любые автоматические поля. Обычно это помогает распределить лишнее свободное пространство, оставшееся, когда либо все гибкие элементы в строке негибкие, либо гибкие, но достигли своего максимального размера.Он также дает некоторый контроль над выравниванием элементов, когда они выходят за пределы строки. flex-start
. В противном случае первый гибкий элемент в строке размещается на краю основного начала линии, последний гибкий элемент в строке находится на краю основного конца строки, а остальные гибкие элементы в строке распределяются таким образом что интервал между любыми двумя соседними элементами одинаков. center
. В противном случае гибкие элементы в строке распределяются таким образом, что расстояние между любыми двумя соседними гибкими элементами в строке является одинаковым, а расстояние между первым / последним гибкими элементами и краями гибкого контейнера составляет половину расстояния между гибкие элементы. justify-content
к гибкому контейнеру. Для других свойств Flexbox установлены значения по умолчанию. align-items
Property
align-items: flex-start | гибкий конец | центр | исходный уровень | потягиваться
align-items
аналогично свойству justify-content
, но вместо выравнивания гибких элементов по главной оси, align-items
используется для выравнивания гибких элементов по поперечной оси (перпендикулярно к главная ось).
/ минимальной шириной
/ максимальной высотой
/ максимальной шириной
.Обратите внимание, что если высота гибкого контейнера ограничена, это значение может вызвать переполнение содержимого гибких элементов. align-items
к гибкому контейнеру. Для других свойств Flexbox установлены значения по умолчанию. align-items
равно baseline
, обратите внимание, как базовая линия чисел в гибких элементах выровнена (появляется розовая линия). align-self
позволяет переопределить выравнивание, указанное в align-items
для отдельных гибких элементов. align-content
Свойство
align-content: flex-start | гибкий конец | центр | пространство между | космическое пространство | потягиваться
align-content
выравнивает линии гибкого контейнера внутри гибкого контейнера, когда есть дополнительное пространство на поперечной оси, аналогично тому, как justify-content
выравнивает отдельные элементы внутри главной оси.Это свойство не действует, если гибкий контейнер имеет только одну строку. flex-start
. В противном случае поперечный край первой строки в гибком контейнере помещается на поперечный край содержимого гибкого контейнера, поперечный край последней строки в гибком контейнере помещается на поперечное содержимое. край гибкого контейнера и оставшиеся линии гибкого контейнера распределяются таким образом, чтобы расстояние между любыми двумя соседними строками было одинаковым. flex-start
. В противном случае свободное пространство делится поровну между всеми линиями, увеличивая их поперечный размер. align-content
к гибкому контейнеру. Для всех свойств Flexbox установлены значения по умолчанию, за исключением того, что для свойства flex-wrap
установлено значение wrap
, чтобы элементы были распределены по нескольким строкам, поскольку, как упоминалось выше, только свойство align-content
работает с гибким контейнером, который является многострочным. Свойства Flexbox: Свойства элементов Flex
Заказ
Недвижимость
порядок: <целое число>
order
можно использовать для изменения этого порядка. order
управляет порядком, в котором гибкие элементы появляются в своем гибком контейнере, назначая их порядковым группам . Он принимает одно значение
, которое указывает, к какой порядковой группе принадлежит гибкий элемент. порядка
также может принимать отрицательные значения. order
. Порядок обхода по умолчанию для режимов последовательной навигации (например, циклический переход по ссылкам, например, с использованием nav-index
или tabindex
) также не изменяется (за исключением Firefox, который изменяет порядок обхода ссылок в зависимости от визуального порядка. ). Следовательно, вы должны использовать свойство order
только для визуального, а не логического изменения порядка содержимого. align-self
Свойство
выровнять себя: авто | гибкий старт | гибкий конец | центр | исходный уровень | потягиваться
justify-content
, но в перпендикулярном направлении. align-items
устанавливает выравнивание по умолчанию для всех элементов гибкого контейнера.Свойство align-self
позволяет переопределить это выравнивание по умолчанию для отдельных гибких элементов. Чтобы полностью понять значения и концепции, лежащие в основе этого свойства, см. Описание свойства align-items
. auto
вычисляется как значение align-items
в контейнере элемента или stretch
, если элемент не имеет родителя.Другими словами, элемент будет выровнен на основе значения по умолчанию или значения, указанного для свойства align-items
. min-height
/ min-width
/ max-height
/ max-width
. Обратите внимание: если высота гибкого контейнера ограничена, это значение может вызвать переполнение содержимого гибкого элемента. align-items
со значением center
.Любое значение, примененное к третьему элементу (с номером три) с использованием align-self
, переопределит значение, примененное с использованием align-items
. Измените значение свойства align-self
, чтобы увидеть, как это повлияет на выравнивание элемента. Модель
flex-grow
Свойство
flex-grow: <число>
flex-grow
устанавливает коэффициент роста flex гибкого элемента.Коэффициент роста гибкости равен <число>
, который определяет, насколько гибкий элемент будет расти относительно остальных гибких элементов в гибком контейнере при распределении положительного свободного пространства . Начальное значение - ноль (0), отрицательные числа недопустимы. flex-grow
. Чем выше значение flex-grow
, тем больше элемент может расти относительно других элементов. flex-grow
значение 2
(два).Элемент с flex-grow: 2
будет расти вдвое больше, чем элемент с flex-grow: 1
- он получит вдвое больше места, чем последний. Итак, на каждый пиксель, который получает второй элемент, первый увеличивается на два пикселя. flex-grow
в следующей демонстрации, чтобы увидеть, как растут элементы. flex-grow
можно анимировать, за исключением значений между нулевым (0) и другими значениями. flex-grow
обычно используется вместе со свойствами flex-shrink
и flex-base
в сокращенном свойстве flex
. Гибкая термоусадочная машина
Свойство
flex-shrink: <число>
flex-shrink
устанавливает коэффициент усадки гибкого элемента гибкого элемента.Коэффициент усадки гибкости равен <число>
, который определяет, насколько гибкий элемент будет сжиматься относительно остальных гибких элементов в гибком контейнере при распределении отрицательного свободного пространства . Коэффициент усадки при изгибе умножается на основу изгиба (см. flex-base
) при распределении отрицательного пространства. Начальное значение - ноль (1), что означает, что элементы не сжимаются по умолчанию, а отрицательные числа недопустимы. flex-shrink
, вы можете распределить это отрицательное пространство по гибким элементам. Отрицательное пространство распределяется пропорционально flex-base
, умноженному на flex-shrink
ratio, где гибкое основание является начальным основным размером гибкого элемента, до того, как свободное пространство распределяется в соответствии с коэффициентами гибкости. flex-shrink
значение 2
(два). Элемент с flex-shrink: 2
будет сжиматься вдвое больше, чем элемент с flex-shrink: 1
- он получает вдвое больше отрицательного пространства, чем последний. Таким образом, на каждый пиксель, на который сокращается второй элемент, первый элемент уменьшается на два пикселя. Чем выше значение flex-shrink
, тем больше элемент будет сжиматься по сравнению с другими элементами. 500 пикселей
.Каждый из четырех элементов имеет основную основу размера (или основу гибкости) 200 пикселей
. Предметы (вместе взятые), очевидно, имеют больший основной размер, чем контейнер. Поскольку это макет Flexbox, элементы автоматически сжимаются, чтобы поместиться в свой контейнер. Однако, используя свойство flex-shrink
, вы можете управлять коэффициентом сжатия элементов. Попробуйте ввести другие значения для свойства flex-shrink
в следующей демонстрации, чтобы увидеть, как сжимаются элементы. flex-shrink
можно анимировать, за исключением значений между нулевым (0) и другими значениями. flex-shrink
обычно используется вместе со свойствами flex-base
и flex-grow
в сокращенном свойстве flex
. Гибкая основа
Свойство
гибкая основа: авто | <'ширина'>
flex-base
принимает те же значения, что и свойство width
, и задает основу гибкости: исходный основной размер (см. Концепции и терминологию) гибкого элемента, прежде чем свободное пространство будет распределено в соответствии с гибкостью факторы (см. flex-shrink
и flex-grow
). auto
, flex-base
разрешается так же, как width
в горизонтальных режимах записи: процентные значения для свойства flex-base
устанавливаются относительно внутреннего основного размера гибкого контейнера. Кроме того, flex-base
определяет размер поля содержимого элемента, если иное не указано в свойстве box-sizing
. flex-base
равно auto
, то используемая основа гибкости - это значение свойства основного размера гибкого элемента.(Это может быть ключевое слово auto
, которое определяет размер гибкого элемента в зависимости от его содержимого.) flex-base
обычно используется вместе со свойствами flex-shrink
и flex-grow
в сокращенном свойстве flex
. flex-base
используется в сокращении flex
. Свойства flex-shrink
и flex-grow
настроены таким образом, что элементы не растут и не сжимаются.Значение, указанное с использованием гибкой основы
, определяет основной размер каждого элемента. Попробуйте изменить значения всех трех свойств в сокращении flex
, чтобы увидеть, как изменяется ширина элементов. Например, попробуйте использовать другое значение flex-grow
, чтобы увидеть, как изменится размер элемента после распределения положительного пространства. flex
свойство
гибкость: нет | [<'flex-grow'> <'flex-shrink'>? || <'гибкая основа'>]
flex
- это сокращенное свойство для установки свойств flex-grow
, flex-shrink
и flex-base
. flex
для определения основного размера элемента. Если элемент не является гибким элементом, flex
не действует. 0 1 авто
. Свойства flex-grow
и flex-shrink
не являются обязательными и могут быть опущены в декларации flex
. flex-grow
опущено, оно устанавливается на 1
. Обратите внимание, что 1
не является начальным значением свойства flex-grow
! Это только значение, используемое, когда flex-grow
опущено в сокращенном объявлении. flex-shrink
опущено, оно устанавливается на 1
. Обратите внимание, что коэффициент усадки при изгибе умножается на основу изгиба при распределении отрицательного пространства.(См. flex-shrink
) flex-base
опущено, оно устанавливается на 0%
. flex-grow
и flex-shrink
отличаются от значений по умолчанию, если они не указаны в сокращении flex
. Это сделано для того, чтобы стенография flex
лучше подходила для наиболее распространенных случаев. flex
и их значения: flex: 0 1 auto
, которое является начальным значением.Это значение определяет размер элемента на основе свойств width
/ height
. (Если свойство основного размера элемента равно , авто
, размер гибкого элемента будет зависеть от его содержимого.) Делает гибкий элемент негибким при наличии положительного свободного пространства, но позволяет ему уменьшаться до минимального размера при наличии недостаточно места. flex: 1 1 auto
. Это значение определяет размер элемента на основе свойств width
/ height
, но делает их полностью гибкими, так что они поглощают любое свободное пространство вдоль главной оси.Если все элементы либо flex: auto
, flex: initial
, либо flex: none
, любое положительное свободное пространство после изменения размеров элементов будет равномерно распределено между элементами с flex: auto
. flex: 0 0 auto
. Это значение определяет размер элемента в соответствии со свойствами width
/ height
, но делает гибкий элемент полностью негибким.Это похоже на исходное , за исключением того, что гибкие элементы не могут сжиматься даже в ситуациях переполнения.
flex:
. Это значение делает гибкий элемент гибким и устанавливает для гибкого базиса нулевое значение, в результате чего элемент получает указанную долю свободного пространства в гибком контейнере. Если все элементы в гибком контейнере используют этот шаблон, их размеры будут пропорциональны указанному коэффициенту гибкости. min-width
или min-height
. flex
в следующей демонстрации, чтобы увидеть, как оно влияет на гибкие элементы. Вы также можете использовать разные значения flex
для каждого элемента.Демонстрация настроена так, что элементы имеют гибкую основу 100px
, и не сжимаются и не растут. Поиграйте со значениями по своему вкусу, чтобы лучше понять, как свойство работает с разными значениями. Примеры
Вертикальное и горизонтальное центрирование
.container {
дисплей: гибкий;
}
justify-content
, вы центрируете элемент по главной оси (по горизонтали), а используя свойство align-items
, вы центрируете элемент по вертикали.
.container {
дисплей: гибкий;
align-items: center;
justify-content: center;
}
Макет «Святой Грааль» с несколькими столбцами одинаковой высоты
.container {
дисплей: гибкий;
align-items: stretch;
}
flex
для любых значений. Ниже приведена живая демонстрация, показывающая в действии столбцы одинаковой высоты.Ширина двух столбцов задается с помощью свойства flex-base
как части сокращения flex
вместе с коэффициентом роста гибкости. flex-direction
.
@media screen и (max-width: 500 пикселей) {
.container {
flex-direction: столбец;
}
}
order
. Итак, если у вас есть три столбца, например, и один из этих столбцов содержит рекламу, и вы хотите, чтобы эти объявления отображались вверху или внизу на маленьких экранах, или даже где-то посередине, вы можете управлять порядком появления один раз. столбцы накладываются друг на друга на экранах меньшего размера. липкий нижний колонтитул
flex-direction
. Затем у вас есть основной раздел содержимого для расширения / увеличения с помощью flex-grow
, тем самым сдвигая нижний колонтитул вниз до нижней части страницы. Однако высота страницы должна быть равна высоте области просмотра или больше.
тело {
дисплей: гибкий;
/ * убедитесь, что он не меньше окна просмотра * /
мин-высота: 100vh;
/ * раскладываем элементы по вертикали * /
flex-direction: столбец;
}
раздел.содержание {
flex-grow: 1;
}
Гибкая навигация
justify-content
, вы можете распределить элементы с промежутком между ними.
ul.navigation {
ширина: 100%;
дисплей: гибкий;
justify-content: пробел между;
}
@media screen и (max-width: 430px) {
.navigation {
flex-direction: столбец;
/ * другие общие стили при необходимости * /
}
}
И многое другое!