利用postcss进行css代码的向后兼容时,display:flex兼容后的代码常会带有display:-webkit-box。
部分移动端内核较低,只支持老版本的box布局,不支持flex布局。
box布局是flex布局的前身,与float不一样,float超出边界时会自动换行,box和flex不会。css
注:四、5中是相对于主轴和侧轴,并不是固定是X轴仍是y轴 web
基本概念可参考一劳永逸的搞定 flex 布局,大部分属性规则都不复杂,参考下图使用便可。须要注意的属性是flex-grow和flex-shrink。布局
flex-grow的做用: 当主轴方向存在富余空间时,将富余空间赋予对应item
flex-grow默认值: 0
flex-grow触发条件: 主轴方向存在富余空间
flex-grow对于富余空间计算: 富余空间根据flex-grow数值进行分配
例:
假设content宽度为600px,flex布局,其内部有4个item,item初始宽度分别为50px、100px、150px、200px。
第1个item的flex-grow:4;
第4个item的flex-grow:1;
Q:求4个item的宽度分别为多少?
解:post
富余 = 600px - (50+100+150+200)px = 100px
单位flex-grow宽度 = 富余/(flex-grow总和) = 100px/(4+1) =20px
第1个item宽度 = 初始宽度 + 单位flex-grow宽度*flex值 = 50px + 20px*4 = 130px
第4个item宽度 = 初始宽度 + 单位flex-grow宽度*flex值 = 200px + 20px*1 = 220px
所以,4个item宽度分别为130px、100px、150px、220px。可查看实例flex
flex-shrink的做用: 当容器flex-wrap为nowrap,且item初始宽度之和大于容器宽度时,容器会对其中的item进行压缩,flex-shrink决定压缩时的规则。
flex-shrink默认值: 1
flex-shrink触发条件:容器宽度不够,须要压缩内容显示
flex-shrink计算方式:spa
注:当item中有内容时,item被压缩的最小宽度为内容宽度3d
例:假设content宽度为300px,flex布局,其内部有4个item,item初始宽度分别为50px、100px、150px、200px。
Q1:4个item实际显示的宽度为多少?
item1的flex-shrink设为10;
item4的flex-shrink设为5;
Q2: 4个item的宽度分别为多少?
解:
Q1:code
压缩 = (50+100+150+200)px - 300px = 200px
4个item宽度比为1:2:3:4,初始flex-shrink为1
单位权重宽度 = 200px/(1*1+2*1+3*1+4*1) = 20px
第1个item宽度 = 初始宽度 - 单位权重宽度*权重 = 50px - 20px*1*1 = 30px
第2个item宽度 = 初始宽度 - 单位权重宽度*权重 = 100px - 20px*2*1 = 60px
第3个item宽度 = 初始宽度 - 单位权重宽度*权重 = 150px - 20px*3*1 = 90px
第4个item宽度 = 初始宽度 - 单位权重宽度*权重 = 200px - 20px*4*1 = 120px
因为步骤2计算的item宽度都大于等于0,所以不须要从新计算
所以,4个item宽度分别为 30px、60px、90px、120px。orm
Q2:blog
压缩 = (50+100+150+200)px - 300px = 200px
4个item宽度比为1:2:3:4,item一、item4的flex-shrink分别为十、5,其他flex-shrink为1
单位权重宽度 = 200px/(1*10+2*1+3*1+4*5) = 40/7px
第1个item宽度 = 初始宽度 - 单位权重宽度*权重 = 50px - 40/7px*1*10 = -7.14px
因为第1个item计算后的宽度为-7.14px<0,所以须要从新分配压缩空间
因为上一步中item1宽度小于0,将item1宽度看成0,从新计算压缩空间宽度
压缩 = (100+150+200)px - 300px = 150px
单位权重宽度 = 150px/(2*1+3*1+4*5) = 6px
第1个item宽度 = 0
第2个item宽度 = 初始宽度 - 单位权重宽度*权重 = 100px - 6px*2*1 = 88px
第3个item宽度 = 初始宽度 - 单位权重宽度*权重 = 150px - 6px*3*1 = 132px
第4个item宽度 = 初始宽度 - 单位权重宽度*权重 = 200px - 6px*4*5 = 80px
因为步骤5计算的宽度都大于等于0,所以不须要从新计算
所以,4个item宽度分别为 0、88px、132px、80px。可查看实例注意:给item添加文字后,宽度没法压缩为0,压缩空间计算将更为复杂。