Давайте сначала рассмотрим flex-grow
Предположим, есть div, содержащий три sub-div1, div2, div3, шириной 200px. Я полагаю, что те, кто использовал гибкую компоновку, хорошо знакомы с расчетом коэффициента распределения оставшегося пространства flex-grow. Вот простая формула расчета: Предположим, что flex-grow div1, div2 и div3 установлены соответственно на 1, 2 и 3. Теперь предположим, что ширина внешнего div составляет 800 пикселей, как назначить оставшиеся 800 пикселей - 3 * 200 пикселей = 200 пикселей трем дочерние дивы? Дополнительное пространство, выделенное для трех элементов div, выглядит следующим образом:
раздел 1:1 / (1 + 2 + 3) * 200px = 1/6 * 200px
раздел2:2 / (1 + 2 + 3) * 200px = 2/6 * 200px
раздел 3:3 / (1 + 2 + 3) * 200px = 3/6 * 200px
Дело в том, как рассчитывается flex-shrink?
Свойство flex-shink в основном используется, когда ширины внешнего div недостаточно, дочерний div сжимает определенное пространство, чтобы компенсировать недостаточную ширину. Например, ширина трех дочерних div теперь составляет 600 пикселей, но я установил ширину внешнего div на 500 пикселей, поэтому как дочерние элементы должны уменьшиться на 100 пикселей, если 600-500 пикселей недостаточно для отображения. В этот раз пригодится flex-shrink, как его рассчитать? Некоторые говорят, что это свойство похоже на flex-grow, и метод расчета аналогичен (на самом деле отличия есть). А вот как его рассчитать, многие не подскажут, в том числе и MDN, W3CShcool конкретной формулы не дал. Кроме того, я обнаружил, что многие статьи с большим количеством лайков давали неправильную формулу расчета. Вот почему я хочу написать эту статью.
Хорошо, давайте поговорим о том, как рассчитать место усадки без продажи! Сначала опубликуйте пример кода: html часть:
<div class="outer">
<div class='div1'>1</div>
<div class='div2'>2</div>
<div class="div3">3</div>
</div>
css-часть:
.outer {
width: 500px;
display: flex;
}
.outer div {
height: 80px;
}
.div1 {
flex: 1 1 100px;
background: red;
}
.div2 {
flex: 1 2 200px;
background: yellow;
}
.div3 {
flex: 1 3 300px;
background: green;
}
Сначала рассчитайте общий вес TW = 100px * 1 (flex-shrink) + 200px *2 (flex-shrink) + 300px *3 (flex-shrink) = 1400px. Это сумма ширины каждого div, умноженная на коэффициент flex-shrink.
Пространство для сжатия каждого div: ширина div * коэффициент гибкости / общий вес TW * общая ширина для сжатия (в нашем случае 600px - 500px = 100px)
Таким образом, окончательная формула расчета ширины каждого div выглядит следующим образом:
div1最后的宽度 = 100px - 100*1/1400 * 100px = 92.86px
div2最后的宽度 = 200px - 200*2/1400 * 100px = 171.42px
div3最后的宽度 = 300px - 300*3/1400 * 100px = 235.72px
демонстрационный адрес:JS fiddle.net/Ling Zhen/Китай…
Скриншот ниже:
Советы: Увидев какие-то формулы в чужих статьях, не поленитесь, напишите пример для проверки сами, иначе вас введут в заблуждение, но вам понравится. Ведь практика приносит истинные знания!
Кстати: это свойство действительно редко используется по сравнению с flex-grow, поэтому многие люди не изучали, как оно рассчитывается.