参考文章:
深入理解Flex属性
flex弹性布局教程-05-项目属性flex-shrink
flex:flex-grow flex-shrink flex-basis
flex:0 1 0
如何计算flex布局,有flex-shrink和flex-grow的情况下,每个元素的大小
flex-grow生效公式如下:
可用空间 = 父元素width - 子元素flex-basis总和
单位扩展空间 = 可用空间/子元素flex-grow总和
元素的实际大小 = flex-basis + flex-grow*单位扩展空间
flex-shrink生效公式如下:
理想空间 = 所有子元素的(flex-basisflex-shrink)之和
溢出空间 = 父元素容器的宽度 - 所有子元素的(flex-basis)之和
每个元素的收缩因子= (flex-basis * flex-shrink) / 理想空间
元素的实际大小 = flex-basis + 收缩因子溢出空间
1、flex-basis
flex-basis是伸缩的基准值,也就是它来决定我们元素的宽度。
flex-basis的默认值是0,如果值为auto的话,将会是我们设置的宽度大小,它的优先级高于我们设置的width属性
flex-basis也决定着flex-grow和flex-shrink的生效情况:
- 当所有子元素的flex-basis之和大于父元素容器的宽度的时候,flex-shrink生效
- 当所有子元素的flex-basis之和小于父元素容器的宽度的时候,flex-grow生效
2、flex-shrink
flex-shrink是收缩比例,当子元素flex-basis之和大于父元素容器宽度的时候生效
flex-shrink的默认值是1,当值为0的时候,元素将不会收缩
3、flex-grow
flex-grow是伸张比例,也是每个元素占据盒子宽度的比例,当子元素flex-basis之和小于父元素容器宽度的时候生效
flex-grow的默认值是0,因此当没有设置这个属性的时候,其实其他元素都是和他一样的比例,占比同等大小