Flexbox伸缩布局新旧版本语法比较

课后整理 2020-12-9

简单比较Flexbox版本如下:

具体说明如下:

浏览器支持状况

各主流浏览器对Flexbox规范不同版本的支持如表1所示。

表1 浏览器对规范版本的支持

规范版本 IE Opera Firefox Chrome Safari
新版本(标准版) 11 12.10+ * 22 29+、21–28 (-webkit-)
混合版 10 (-ms-)
老版本 3–21 (-moz-) <21 (-webkit-) 3–6 (-webkit-)

开启Flexbox

不同Flexbox版本定义一个元素为伸缩容器的方法比较如表2所示。

表2 比较启动Flexbox

规范版本 属性名称 块伸缩容器 内联伸缩容器
新版本(标准版) display flex inline-flex
混合版 display flexbox inline-flexbox
老版本 display box inline-box

主轴对齐方式

不同Flexbox版本指定伸缩项目沿主轴对齐方式的取值比较如表3所示。

表3 比较主轴对齐方式

规范版本 属性名称 start center end justify distribute
新版本
(标准版)
justify-content flex-start center flex-end space-between space-around
混合版 flex-pack start center end justify distribute
老版本 box-pack start center end justify N/A

【提示】

侧轴对齐方式

不同Flexbox版本指定伸缩项目沿侧轴对齐方式的取值比较如表4所示。

表4 比较侧轴对齐方式

规范版本 属性名称 start center end baseline stretch
新版本
(标准版)
align-items flex-start center flex-end baseline stretch
混合版 flex-align start center end baseline stretch
老版本 box-align start center end baseline stretch

【提示】

单个伸缩项目侧轴对齐方式

不同Flexbox版本指定单个伸缩项目沿侧轴对齐方式的取值比较如表5所示。

表5 比较单个伸缩项目侧轴对齐方式

规范版本 属性名称 auto start center end baseline stretch
新版本
(标准版)
align-self auto flex-start center flex-end baseline stretch
混合版 flex-item-align auto start center end baseline stretch
老版本 N/A

伸缩项目行对齐方式

不同Flexbox版本指定伸缩项目行在侧轴的对齐方式的取值比较如表6所示。

表5 比较伸缩项目行对齐方式

规范版本 属性名称 start center end justify distribute stretch
新版本
(标准版)
align-content flex-start center flex-end space-between space-around stretch
混合版 flex-line-pack start center end justify distribute stretch
老版本 N/A

【注意】

只有伸缩项目有多行时才生效,这种情况只有伸缩容器设置了flex-wrap为wrap时,并且没有足够的空间把伸缩项目放在同一行中。这个将对每一行起作用而不是每一个伸缩项目。

显示顺序

不同Flexbox版本指定伸缩项目的显示顺序的取值比较如表7所示。

表7 比较显示顺序

规范版本 属性名称 属性值
新版本(标准版) order <number>
混合版 flex-order <number>
老版本 box-ordinal-group <integer>

伸缩性

不同Flexbox版本指定伸缩项目如何伸缩尺寸比较如表8所示。

表8 比较伸缩性

规范版本 属性名称 属性值
新版本(标准版) flex none | [ <flex-grow> <flex-shrink>? || <flex-basis>]
混合版 flex none | [ [ <pos-flex> <neg-flex>? ] || <preferred-size> ]
老版本 box-flex <number>

flex属性在微软的草案与新标准或多或少不一样。主要区别在于:它们都转换成标准缩写版本,属性值为flex-grow、flex-shrink和flex-basis,值使用相同的方式在速记。然而,flex-shrink(以前称为负flex)的默认值为1。这意味着伸缩项目默认不能收缩。以前,空间不足使用flex-shrink比例来收缩伸缩项目,但现在可以在flex-basis的基础上配合flex-shrink来收缩伸缩项目。

伸缩流

不同Flexbox版本指定伸缩容器主轴的伸缩流方向比较如表9所示。

表9 比较伸缩流

规范版本 属性名称 Horizontal Reversed horizontal Vertical Reversed vertical
新版本
(标准版)
flex-direction row row-reverse column column-reverse
混合版 flex-direction row row-reverse column column-reverse
老版本 box-orient
box-direction
horizontal
normal
horizontal
reverse
vertical
normal
vertical
reverse

在旧版本规范中,使用box-direction属性设置为reverse和在新版本中设置row-reverse或column-reverse得到的效果相同。如果想要的效果是row或column,可以省略不设置,因为normal是默认的初始值。

当设置direction为reverse,主轴就翻转。例如,当使用“ltr”书写模式,指定row-reverse时,所有伸缩项目会从右向左排列。类似的,column-reverse将会使所有伸缩项目从下向上排列,来代替从上往下排列。

在老版本中,需要使用box-orient来设置书写模式的方向。当使用“ltr”模式时,horizontal可用在inline-axis,vertical可用在block-axis。如果使用的是一个自上而下的书写模式,如东亚传统的书写模式,这些值就会翻转。

换行

不同Flexbox版本指定伸缩项目是否沿着侧轴排列比较如表9所示。

表9 比较换行

规范版本 属性名称 No wrapping Wrapping Reversed wrap
新版本
(标准版)
flex-wrap nowrap wrap wrap-reverse
混合版 flex-wrap nowrap wrap wrap-reverse
老版本 box-lines single multiple N/A

wrap-reverse让伸缩项目在侧轴上进行start和end翻转,所以,如果伸缩项目在水平排列,伸缩项目翻转不会到一个新的线下面,它会翻转到一个新的线上面。简单理解就是伸缩项目只是上下或前后翻转顺序。