CSS3 flex 布局 (转:阮一峰)
新版本
新版本的 Flexbox 模型于 2012 年 9 月提出。
新版本弹性伸缩盒的display
属性值:
属性值 | 说明 |
---|---|
flex | 将容器盒模型作为块级弹性伸缩盒显示 |
inline-flex | 将容器盒模型作为内联级弹性伸缩盒显示 |
div { display: flex; }
注意:设为 Flex 布局以后,flex
容器子元素的float
、clear
和vertical-align
属性将失效。
浏览器兼容性
IE | Firefox | Chrome | Opera | Safari |
---|---|---|---|---|
10+ | 22+ | 21+ | 12.1+ | 6.1+ |
基本概念
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称:容器
容器的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称:项目
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。
- 主轴的开始位置(与边框的交叉点)叫做
main start
- 主轴结束位置(与边框的交叉点)叫做
main end
- 交叉轴的开始位置叫做
cross start
- 交叉轴的结束位置叫做
cross end
项目默认沿主轴排列。
- 单个项目占据的主轴空间叫做
main size
- 单个项目占据的交叉轴空间叫做
cross size
属性详解
容器属性
flex-direction
flex-direction
属性用于设置项目排列的依据(主轴或交叉轴)
flex-direction: row | column | row-reverse | column-reverse;
- 默认值:
row
属性值 | 说明 |
---|---|
row | 依据主轴排列,起点在左端 |
column | 依据交叉轴排列,起点在右端 |
row-reverse | 依据交叉轴排列,起点在上沿 |
column-reverse | 依据交叉轴排列,起点在下沿 |
flex-wrap
flex-wrap
属性定义,如果项目在一条轴线排不下,如何换行。
flex-wrap: nowrap | wrap | wrap-reverse;
- 默认值:
nowrap
属性值 | 说明 |
---|---|
nowrap | 不换行,都在一行显示 |
wrap | 自动换行,第一行在上方 |
wrap-reverse | 自动换行,第一行在下方 |
nowrap
:不换行
wrap
:换行,第一行在上方
wrap-reverse
:换行,第一行在下方
flex-flow
flex-flow
属性是flex-direction
(排列方向)和flex-wrap
(控制换行)的简写形式。
flex-flow: <flex-direction> || <flex-wrap>;
- 默认值:
row nowrap
justify-content
justify-content
属性用于设置项目在主轴的对齐方式。
justify-content: flex-start | flex-end | center | space-between | space-around;
- 默认值:
flex-start
属性值 | 说明 |
---|---|
flex-start | 项目以主轴左侧对齐 |
flex-end | 项目以主轴右侧对齐 |
center | 项目以主轴中心居中对齐 |
space-between | 项目两端对齐,项目之间的间隔都相等 |
space-around | 项目两端对齐,每个项目两侧的间隔相等 |
align-items
align-items
属性用于设置项目在交叉轴的对齐方式。
align-items: stretch | flex-start | flex-end | center | baseline;
- 默认值:
stretch
属性值 | 说明 |
---|---|
stretch | 如果项目未设置高度或设为auto ,将占满整个容器的高度 |
flex-start | 项目以交叉轴起点对齐 |
flex-end | 项目以交叉轴终点对齐 |
center | 项目以交叉轴的中点对齐 |
baseline | 项目以第一行文字的基线对齐 |
align-content
align-content
属性用于设置多根轴线的对齐方式。
注意:如果项目只有一根轴线,该属性不起作用。
align-content: stretch | flex-start | flex-end | center | space-between | space-around;
- 默认值:
stretch
属性值 | 说明 |
---|---|
stretch | 轴线占满整个交叉轴 |
flex-start | 以交叉轴起点对齐 |
flex-end | 以交叉轴的终点对齐 |
center | 以交叉轴的中点对齐 |
space-between | 以交叉轴两端对齐,轴线之间的间隔平均分布 |
space-around | 以交叉轴两端对齐,每根轴线两侧的间隔都相等 |
项目属性
order
order
属性设置项目出现的顺序。
order: <integer>;
- 默认值:
0
flex-grow
flex-grow
属性用于设置项目的放大比例(分配剩余空间)
flex-grow: <number>;
- 默认值:
0
- 如果所有项目的
flex-grow
属性都为1
,则它们将等分剩余空间 - 如果一个项目的
flex-grow
属性为2
,其他项目都为1
,则前者占据的剩余空间将比其他项多一倍。
flex-shrink
flex-shrink
属性用于设置项目的缩小比例(处理溢出空间)
flex-shrink: <number>;
- 默认值:
1
- 如果所有项目的
flex-shrink
属性都为1
,则当空间不足时,都将等比例缩小。 - 如果一个项目的
flex-shrink
属性为0
,则空间不足时,该项目不缩小。
flex-basis
flex-basis
属性定义了分配多余空间之前,项目占据的主轴空间
flex-basis: auto | <length>;
- 默认值:
auto
- 浏览器根据这个属性,计算主轴是否有多余空间。
flex-basis
属性设置固定值(例如:350px
),则项目将占据固定空间。
flex
flex
属性是flex-grow
, flex-shrink
和 flex-basis
的简写
flex: none | [ <flex-grow> <flex-shrink> || <flex-basis> ]
- 默认值:
0 1 auto
属性值 | 说明 |
---|---|
auto | (1 1 auto) |
none | (0 0 auto) |
align-self
align-self
用于单独设置某个项目在交叉轴的对齐方式,可覆盖align-items
属性。
align-self: auto | stretch | flex-start | flex-end | center | baseline;
- 默认值:
auto
属性值 | 说明 |
---|---|
auto | 表示继承父元素的align-items 属性 |
stretch | 如果项目未设置高度或设为auto ,将占满整个容器的高度 |
flex-start | 项目以交叉轴起点对齐 |
flex-end | 项目以交叉轴终点对齐 |
center | 项目以交叉轴的中点对齐 |
baseline | 项目以第一行文字的基线对齐 |