Web页面布局的发展经历了表格布局
->定位布局
->浮动布局
->Flexbox布局
的演变,每种布局都反映了当时的对布局需要。本文主要对CSS3中的Flexbox的原理、语法和使用进行探讨。
介绍
采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
注意: float
、clear
和vertical-align
属性将会失效。
容器属性
flex-direction
flex-direction
该属性通过定义flex容器的主轴方向来决定felx子项在flex容器中的位置,默认值row
值 | 描述 |
---|---|
row | 默认值,主轴与行内轴方向作为默认的书写模式。即横向从左到右排列(左对齐) |
column | 对齐方式与row相反 |
row-reverse | 主轴与块轴方向作为默认的书写模式。即纵向从上往下排列(顶对齐)。 |
column-reverse | 对齐方式与column相反。 |
运行结果
flex-wrap
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行,默认值nowrap
。
|
|
注意: 在Android4.4一下版本及较老版本的浏览器对于该属性不支持。
flex-flow
flex-flow
这个属性是flex-direction
和flex-wrap
属性的简写,默认值row nowrap
。
|
|
justify-content
justify-content
属性用来指定flex项目在flex容器沿着主轴在当前行的对齐方式,默认值flex-start
。
|
|
值 | 描述 |
---|---|
flex-start | 默认值,左对齐 |
flex-end | 右对齐 |
center | 居中对齐 |
space-between | 两端对齐 |
space-around | 每两个项目间的间距一样,项目间的间距是项目和容器间距的2倍 |
align-items
|
|
值 | 描述 |
---|---|
flex-start | 左对齐 |
flex-end | 右对齐 |
center | 居中对齐 |
baseline | |
stretch | 默认值,每两个项目间的间距一样 |
align-content
align-content
属性将flex容器内的行在flex容器中侧轴排列方式,类似于justify-content
在主轴方向的单个Flex项目对齐方式。
Flex项目在flex容器中多行显示行,其多行在flex容器的侧轴方向对齐方式。
注意: 单轴线的情况下该属性不起作用
|
|
项目属性
order
order
定义项目的排列顺序,数值越小,越靠前,默认值为0
。
注意: 值可以为负数
|
|
flex-grow
flex-grow
属性定义项目的放大比例,默认为0
,即如果存在剩余空间,也不放大。
注意: 负数是非法的
|
|
如果所有项目的
flex-grow
值相同,则他们等分剩余的空间。
如果项目的flex-grow
不同,则按比例分剩余的空间,比如一个项目的flex-grow
的值为2
,其他的为1
,则前者分得的空间是其他项目的2倍。
注意: 这个值是指剩余空间的分配比例,如果没有剩余空间的情况下,该属性没有效果。
flex-shrink
flex-shrink
属性定义了项目的缩小比例,默认为1
,即如果空间不足,该项目将缩小。
注意: 负数是非法的
|
|
当
flex-shrink
为0
时,保持项目的原有尺寸不变。
flex-basis
flex-basis
属性和width
和height
属性相同,用来指定flex项目的大小,默认值auto
。
|
|
flex
flex
是一个复合属性,包括flex-grow
、flex-shrink
和flex-basis
,默认值为0 1 auto
|
|
align-self
align-self
可以项目在单独设置交叉轴的对齐属性。默认值为auto
,表示与父元素的align-items
的值一直,如果父元素没有设置align-items
,则等于stretch
。
其他值的含义和容器的align-items
一致。
|
|
兼容性
Flexbox布局有三个版本:
- old : 最老版本(2009),
display: box
- tweener : 过渡版本(2011),
display: flexbox
- new : 最新版本,
display: flex
浏览器 | 支持情况 |
---|---|
Chrome | 20- (old) 21+ (new) |
Safari | 3.1+ (old) 6.1+ (new) |
Firefox | 2-21 (old) 22+ (new) |
Opera | 12.1+ (new) |
IE | 10 (tweener) 11+ (new) |
Android | 2.1+ (old) 4.4+ (new) |
iOS | 3.2+ (old) 7.1+ (new) |
在css书写时要注意兼容不同浏览器及版本的差异,如下:
可以采用Autoprefixer书写最新的flex样式,会自动补齐兼容部分,如下Sass代码
参考
- W3C css flexbox
- Flex 布局教程:语法篇
- Flex 布局教程:实例篇
- A Visual Guide to CSS3 Flexbox Properties
- A Complete Guide to Flexbox
- 学习布局
- mdn - Web technology for developers - css - display
- Understanding CSS3 Flexbox for Responsive Design
- 图解CSS3 Flexbox属性
- 移动端开发小记 - Flexbox
- 浅谈CSS3中display属性的Flex布局
- CSS3 display:flex和display:box有什么区别?
- css参考手册 - display
- Flex布局新旧混合写法详解(兼容微信)