假设flex容器为.box,子元素为.item。
旧语法篇
定义容器的display属性
|
|
容器属性
1.box-pack属性
box-pack定义子元素主轴对齐方式。
|
|
box-pack属性总共有4个值:
|
|
2.box-align属性
box-align定义子元素交叉轴对齐方式。
|
|
box-align属性总共有5个值:
|
|
3.box-direction属性
box-direction定义子元素的显示方向。
|
|
box-direction属性总共有3个值:
|
|
4.box-orient属性
box-orient定义子元素是否应水平或垂直排列。
|
|
box-orient属性总共有5个值:
|
|
5.box-lines属性
box-lines定义当元素超出了容器是否允许子元素换行。
|
|
box-lines属性总共有2个值:
|
|
子元素属性
1.box-flex属性
box-flex定义是否允许当前子元素伸缩。
|
|
box-flex属性使用一个浮点值:
|
|
2.box-ordinal-group属性
box-ordinal-group定义子元素的显示次序,数值越小越排前。
|
|
box-direction属性使用一个整数值:
|
|
新版语法
定义容器的display属性
|
|
容器样式
|
|
子元素属性
|
|
兼容写法
首先是定义容器的diplay属性:
|
|
由于旧版语法并没有列入W3C标准,所以这里不用写 display:box ,下面的语法也是一样的。
这里还要注意的是,如果子元素是行内元素,在很多情况下都要使用 display:block 或 display:inline-block 把行内子元素变成块元素(例如使用 box-flex 属性),这也是旧版语法和新版语法的区别之一。
子元素主轴对齐方式
|
|
这里的参数除了写法不同,其实是功能是一样的:
|
|
子元素的显示方向
子元素的显示方向可通过 box-direction + box-orient + flex-direction 实现,下面请看实例:
左到右
|
|
右到左
|
|
这里补充说明一点: box 写法的 box-direction 只是改变了子元素的排序,并没有改变对齐方式,需要新增一个 box-pack 来改变对齐方式。
上到下
|
|
下到上
|
|
是否允许子元素伸缩
|
|
|
|
上面是允许放大,box语法中 box-flex 如果不是0就表示该子元素允许伸缩,而flex是分开的,上面 flex-grow 是允许放大(默认不允许),下面的 flex-shrink 是允许缩小(默认允许)。box-flex 默认值为0,也就是说,在默认的情况下,在两个浏览器中的表现是不一样的:
这里还有一点,就是新旧语法的算法是不一样的,假设 box-flex 的值不等于0,旧语法中,如果有多余的空间,box-flex 的值越大,说明空白部分的占比越多,反之亦然:
而新版的语法中,放大的比例是直接按 flex-grow 的值来分配的,flex-grow 的缩放会覆盖 flex-shrink:0,看例子:
参数:
|
|
子元素的显示次序
|
|
