定义项目的放大比例,默认值为0,就算存在剩余空间,也不会放大。
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。
B的计算公式:120+(110/3)*1
C的计算公式:130+(110/3)*2
定义项目的缩小比例,默认值为1,注意前提是空间不足的情况下。
这里A,B,C的宽度分别是155,200,50,(注意这里的宽度用flex-basis代替的,和width的作用是一样的)。父级宽度是300,计算超出的空间就是-105,这样超出的105px就要被A,B,C消化掉,比例是2:1:1。
如何消化?首先是每个项目的width值乘以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无效。