当前位置: 首页 > Web前端 > CSS

flex-shrink是如何计算的冷知识

时间:2023-03-30 23:44:36 CSS

先回顾一下flex-grow。假设有一个div包含三个子div1、div2、div3,每个子的宽度都是200px。对于flex-grow的剩余空间分配比例的计算,相信大家已经对flex布局非常熟悉了。这里有一个简单的计算公式:假设div1、div2、div3的flex-grow分别设置为1、2、3。现在假设外层div的宽度是800px,那么剩下的800px-3*200px=200px三个子div怎么分配呢?三个div分配的额外空间如下:div1:1/(1+2+3)200px=1/6200pxdiv2:2/(1+2+3)200px=2/6200pxdiv3:3/(1+2+3)200px=3/6200px很重要,flex-shink是怎么计算的?flex-shink属性主要是当外层div宽度不够时,收缩sub-div的一定空间来弥补宽度不足。比如现在三个sub-div的宽度都是600px,但是我把外面的div的宽度设置为500px,那么对于600-500px不够显示的sub-div应该怎么缩小100px呢?这时候flex-shrink就派上用场了,那么怎么计算呢?有人说这个属性类似于flex-grow,计算方法也差不多(其实是有区别的)。但是怎么计算,很多人都说不清楚,包括一个MDN,W3CShcool也没有给出具体的公式。另外,我发现很多点赞多的文章都给出了错误的计算公式。这就是我要写这篇文章的原因。好了,说说收缩空间的计算方法吧!先贴出例子的代码:html部分:1

2
3
css部分:.outer{width:500px;显示:flex;}.outerdiv{height:80px;}.div1{flex:11100px;背景:红色;}。div2{flex:12200px;背景:黄色;}.div3{弹性:13300px;background:green;}首先计算总权重TW=100px1(flex-shrink)+200px2(flex-shrink)+300px*3(flex-shrink)=1400px是每个div的宽度乘以屈缩系数。每个div的收缩空间为:divwidthflex-shrinkcoefficient/totalweightTWtotalwidthtobeshrinked(600px-500px=100pxinourexample),所以最终每个div的宽度计算公式如下:div1Width=100px-100*1/1400*100px=92.86pxdiv2finalwidth=200px-200*2/1400*100px=171.42pxdiv3finalwidth=300px-300*3/1400*100px=235.72px演示地址:https://jsfiddle.net/lingzhen...截图如下:Tips:看到别人文章里的一些公式,千万不要偷懒,自己写个例子验证一下,不然会被误导,但你会喜欢它并保存它。毕竟,实践带来真知!BTW:相对于flex-grow,这个属性很少用到,所以很多人都没研究过它是怎么计算的。