[Знаете, почему] Изучение «гибкости» Flex Box

CSS

задний план

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

определение

Flex — это аббревиатура от Flexible Box, что переводится на китайский язык как «гибкая коробка», что используется для обеспечения максимальной гибкости коробчатой ​​модели. Любой контейнер можно указать в качестве макета Flex.

основная концепция

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

По умолчанию в контейнере две оси: главная ось в горизонтальном направлении и поперечная ось в вертикальном направлении.Элементы по умолчанию расположены в соответствии с основными осями. (Поэтому направление макета Flex по умолчанию — строка)

  • main start/main end: начальное/конечное положение шпинделя;
  • cross start/cross end: начальное/конечное положение поперечной оси;
  • основной размер/поперечный размер: один элемент занимает пространство основной/поперечной оси;

图片

Атрибуты

6 свойств в контейнере 6 свойств проекта
flex-direction order
flex-wrap flex-grow
flex-flow flex-shrink
justify-content flex-basis
align-items flex
align-content align-self

Тема: Как вычисляется flex свойства элемента?

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

Связанные концепции

  • оставшееся место:Когда сумма размеров всех flex-элементов меньше, чем flex-контейнер, flex-контейнер будет иметь избыточное пространство, которое не заполнено, тогда это пространство называется оставшимся пространством flex-контейнера (Positive Free Space).
    图片
  • Недостаток места:Когда сумма размеров всех flex-элементов больше, чем flex-контейнер, flex-контейнеру не хватает места для размещения всех flex-элементов, а дополнительное пространство называется отрицательным пространством (отрицательное свободное пространство).
    图片

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

/* Specify <'width'> */
flex-basis: 10em;     
flex-basis: 3px;
flex-basis: auto;

/* Intrinsic sizing keywords */
flex-basis: fill;
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;

/* Automatically size based on the flex item’s content */
flex-basis: content;

/* Global values */
flex-basis: inherit;
flex-basis: initial;
flex-basis: unset;

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

Давайте еще раз посмотрим на значения ширины, такие как max/min-content, fit-content и fill-available.

описывать

  • max-content:Предполагая, что наш контейнер имеет достаточную ширину и достаточно места, в настоящее время занятая ширина — это размер, представленный max-content.
  • min-content:Ширина элемента с наибольшим значением минимальной ширины внутреннего элемента используется в качестве ширины конечного контейнера.
  • fit-content:Уменьшать до размеров
  • fill-available:Автоматически заполнять оставшееся пространство

Эффекты — 1 максимальное содержание

图片

Эффекты — 2 минуты контента

图片

Эффект — 3 фит-контента

图片

Эффекты — 4 доступных заливки

图片

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

  • flex-basis значение по умолчанию — auto
  • Если значение ширины flex-элемента задано явно, а flex-basis имеет значение auto, ширина flex-элемента рассчитывается в соответствии с шириной.Если ширина не задана явно, она рассчитывается в соответствии с шириной содержимого элемента. гибкий элемент
  • Если flex-элемент явно устанавливает значение ширины и конкретное значение flex-basis, flex-элемент игнорирует значение ширины и вычисляет flex-элемент в соответствии с flex-basis.Когда оставшегося места во flex-контейнере недостаточно, flex-элемент фактическая ширина элемента не рассчитывается в соответствии с flex-basis, и соответствующее пространство выделяется для flex-элемента в соответствии со значениями, установленными flex-grow и flex-shrink
  • Если flex-элемент явно устанавливает значение min-width или max-width, когда значение, рассчитанное flex-basis, меньше, чем min-width, ширина flex-элемента устанавливается в соответствии со значением min-width, в противном случае рассчитанное значение больше, чем значение max-width, установите ширину элемента Flex в соответствии со значением max-width

flex-grow

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

flex-shrink

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

Пример:

Предположение: есть 2 элемента Flex под контейнером Flex шириной 837 пикселей, как показано на рисунке:

图片

Как расти?

  // Flex 项目1
  height: 100px;
  background-color: red;
  flex-grow: 5;
  flex-shrink: 5;
  flex-basis: 200px;
  // Flex 项目2
  height: 100px;
  background-color: blue;
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 200px;

图片

图片

расчет роста:

容器 宽度 837px - flex-basis[1] - flex-basis[2] > 0 即 有剩余空间
剩余空间 = 容器 宽度 837px - flex-basis[1] - flex-basis[2]  = 837px - 200px -200px = 437px
flex-grow 发挥作用如下:
flex-grow [1] * x + flex-grow[2] * x = 437px 
5x  +  1x = 437 
x= 72.83px 
所以 
Flex 项目1 的总宽度  =  flex-basis[1]  + flex-grow[1] * x  = 200px + 72.83px * 5  =  564.17px
Flex 项目2 的总宽度  =  flex-basis[2]  + flex-grow[2] * x  = 200px +  72.83px * 1 =  272.83px 

Как уменьшить?

  // Flex 项目1
  height: 100px;
  background-color: red;
  flex-grow: 5;
  flex-shrink: 5;
  flex-basis: 800px;
  // Flex 项目2
  height: 100px;
  background-color: blue;
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 800px;

图片
图片

Расчет усадки:

容器 宽度 837px - flex-basis[1] - flex-basis[2] < 0 即 有不足空间
不足空间 = 容器 宽度 837px - flex-basis[1] - flex-basis[2]  = 837px - 800px -800px = -763px
flex-shrink 发挥作用如下:
flex-shrink [1] * x + flex-shrink[2] * x = 763px 
5x  +  1x = 763px 
x = 127.17px
所以
Flex 项目1 的总宽度  =  flex-basis[1]  - flex-shrink[1] * x  = 800px - 127.17px * 5  =  164.17px
Flex 项目2 的总宽度  =  flex-basis[2]  + flex-shrink[2] * x  = 800px -  127.17px * 1 =  672.83px 

гибкий алгоритм увеличения и уменьшения

图片

Суммировать

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

图片

насчет нас

Передовая команда Kuaigou Taxi занимается обменом передовыми технологиями и регулярно публикует высококачественные статьи. Добро пожаловать, обратите внимание и лайкните.

Ссылка на ссылку:
[1]: Woohoo. Я 3 с prussian.com/CSS/flex-IT…
[2]: IT и LP.IT home.com Тайвань/статьи/10…