布局 | flex属性
我们都知道,flex布局中的flex属性是以下三个属性的简写:
- flex-grow:项目的放大比例,默认为0,即如果存在剩余空间,也不放大
- flex-shrink:项目的缩小比例,默认为1,即如果空间不足,则会适当缩小
- flex-basis:在分配剩余空间之前,项目的主轴空间,相当于我们设置的width
flex参数缩写后三个属性分别对应的值为:
- flex:none // 0 0 auto —— 无宽度不可以均分,内容决定宽度
- flex:auto // 1 1 auto —— 无宽度不可以均分,内容决定宽度
- flex:1 // 1 1 0% —— 无宽度可以均分
对于flex:auto和flex:1来说,最主要的区别在于flex-basis这个属性上
在奇奇怪怪的auto这篇博客里有提到:auto可以用于自动计算宽度,而0%很显然就是宽度为0
看下面这个例子:
1 | <div class="parent"> |
主轴上父容器总尺寸为 600px
子元素的总基准值是:0% + auto + 200px = 300px,其中
1
2- 0% 即 0 宽度
- auto 对应取主尺寸即 100px故剩余空间为 600px - 300px = 300px
伸缩放大系数之和为: 2 + 2 + 1 = 5
剩余空间分配如下:
1
2- item-1 和 item-2 各分配 2/5,各得 120px
- item-3 分配 1/5,得 60px各项目最终宽度为:
1
2
3- item-1 = 0% + 120px = 120px
- item-2 = auto + 120px = 220px
- item-3 = 200px + 60px = 260px当 item-1 基准值取 0% 的时候,是把该项目视为零尺寸的,故即便声明其尺寸为 140px,也并没有什么用,形同虚设
而 item-2 基准值取
auto
的时候,根据规则基准值使用值是主尺寸值即 100px,故这 100px 不会纳入剩余空间
说明:从这个案例看,auto的这部分不会被纳入剩余空间,这是最关键的