flex
有三个属性值,分别是 flex-grow
, flex-shrink
, flex-basis
,默认值是 0 1 auto
。 发现网上详细介绍他们的文章比较少, 今天就详细说说他们,先一个一个看。git
定义项目的放大
比例,默认值为0
,就算存在剩余空间,也不会放大。单单几句话确定不能表达出意思,来看个DEMO。github
flex-grow
的默认值为0
,若是没有定义该属性,是不会拥有分配剩余空间
的权利的。A, B, C, D, E
的宽度分别是 100, 120, 130, 100, 100
,父级的宽度是660
,父级宽减去子级的所有宽度,这样剩余空间
就是110
。例子中B, C
定义了flex-grow
,分别是1,2
,那剩余空间分红3份,B1
份,C2
份,比例就是1:2
,分配计算出来的值就是B :36.666666666666664
, C:73.33333333333333
。这个时候剩余空间
就被计算出来了,相加后的结果就是B:156.66666666666666
,C:203.33333333333331
。flex
B的计算公式:120 + (110 / 3) * 1
.net
C的计算公式: 130 + (110 / 3) * 2
code
定义项目的缩小
比例,默认值为1
,注意前提是空间不足的状况下,看例子。get
这里 A, B, C
的宽度分别是155, 200, 50
,(注意这里的宽度我是用flex-basis
代替的,在这个例子中和width
的做用是同样的)。 父级宽度是300
,计算超出的空间就是 -105
,这样超出的 105px
就要被 A, B, C
消化掉,比例是2:1:1
。io
如何消化 ? 首先是每一个项目的wdith
值乘以flex-shrink
值求积,总结
A:(155 * 2) = 310
B:(200 * 1) = 200
C:(50 * 1) = 50
。
而后再求和全部项目的乘积。
(310 + 200 + 50) = 560
获得求占比以后还要乘以要腾出的空间。
A:(310 / 560) * 105
= 58.125
B:(200 / 560) * 105
= 37.5
C:(50 / 560) * 105
= 9.375
获得每一项要腾出的空间後然後
A:(155 - 58.125) = 96.875
B:(200 - 37.5) = 162.5
C:(50 - 9.375) = 40.625
好了,这样就得出计算后的宽度了。
和width
同样,他的默认值为auto
,把上面几个例子换成width
也是同样的。固然工做中最好用flex-basis
,更符合规范。
若是父级的空间足够:flex-grow
有效,flex-shrink
无效。
若是父级的空间不够:flex-shrink
有效,flex-grow
无效。
若是你有疑问欢迎讨论,一块儿学习。