# 弹性布局 flex
# 特性
任何容器都可以使用 flex 布局
行内元素也可以使用 flex
# 概念
- 使用 Flex 布局的元素 称为 Flex
容器
,它所有的成员称为 Flex项目
(item)
# 容器
属性
flex-direction
决定主轴的方向 即项目
的排列方向
.box {
flex-direction: row | row-reverse | column | column-reverse;
}
1
2
3
2
3
TIP
row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
flex-wrap
默认 项目 排在一条轴线上,该属性定义如果一条轴线排不下如何换行
.box{
flex-wrap: nowrap | wrap | wrap-reverse;
}
1
2
3
2
3
flex-flow
flex-direction 属性和 flex-wrap 属性的简写形式
.box {
flex-flow: <flex-direction> || <flex-wrap>;
}
1
2
3
2
3
justify-content
项目
在主轴上的对其方式
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
1
2
3
2
3
align-items
项目
在交叉轴上的对齐方式
.box {
align-items: flex-start | flex-end | center | baseline | stretch;
}
1
2
3
2
3
align-content
定义多条轴线的对齐方式,只有一条轴线则不起作用
.box {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
1
2
3
2
3
# 项目
属性
TIP
order
flex-grow
flex-shrink
flex-basis
flex
align-self
order
定义项目排列顺序 数值越小 排列越靠前 默认为 0
<div class='flex'>
<div class='box mr20' style='order: 1'>111</div>
<div class='box mr20' style='order: 0'>222</div>
</div>
1
2
3
4
2
3
4
111
222
flex-grow
定义项目
的放大比例 默认 0 (即使有剩余空间 也不放大)
.item {
flex-grow: <number>; /* default 0 */
}
1
2
3
2
3
TIP
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
<div class='flex'>
<div class='box mr20 flex-grow-1'>111</div>
<div class='box mr20 flex-grow-2'>222</div>
<div class='box flex-grow-1'>111</div>
</div>
1
2
3
4
5
2
3
4
5
111
222
111
flex-shrink
定义项目
的缩小比例 默认为1,即如果空间不足,该项目将缩小
.item {
flex-shrink: <number>; /* default 1 */
}
1
2
3
2
3
TIP
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
flex-basis
定义在分配多余空间之前项目
占据的主轴空间(main-size 宽高)
.item {
flex-basis: <length> | auto; /* default auto */
}
1
2
3
2
3
TIP
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
flex
是flex-grow
flex-shrink
flex-basis
的缩写,默认为0 1 auto
TIP
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)
align-self
允许单个项目与其他项目不一样的对齐方式,可覆盖align-items
属性
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
1
2
3
2
3
<div class='flex align-item-center'>
<div class='box mr20 '>111</div>
<div class='box mr20 align-self-end'>222</div>
<div class='box'>333</div>
</div>
1
2
3
4
5
2
3
4
5
111
222
333