# Flex 布局
# 设为弹性布局
设置元素样式 display:flex
或者 display:inline-flex
,该元素就变成了弹性盒子。设置 FlexBox 相关的属性进行弹性布局。
# flex 容器相关属性
# flex-direction
设置弹性盒子中主轴的方向,默认方向是水平从左到右
.direction {
// 默认值,主轴为水平方向,主轴开始位置在左端
flex-direction: row;
// 主轴为水平方向,主轴开发位置在右端
flex-direction: row-reverse;
// 主轴为垂直方向,主轴开始位置在顶端
flex-direction: column;
// 主轴为垂直方法,主轴开始位置在低端
flex-direction: column-reverse;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
flex-direction:
# flex-wrap
设置弹性盒子中子元素是否换行显示,默认不换行。当弹性盒子width
不够时,默认会缩小子元素的width
来使之在一行中显示。下方每个正方形被设置为120x120
,但是弹性盒子默认是不换行的,因此每个正方形width
小于 120。
.wrap {
// 默认值,子元素都在一行显示,因此会自动调整每个子元素的宽度,即使子元素设置了 width
flex-wrap: nowrap;
// 自动换行,第一行在顶部
flex-wrap: wrap;
// 自动换行,第一行在底部
flex-wrap: wrap-reverse;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10
flex-wrap:
# flex-flow
是 flex-direction 和 flex-wrap 的缩写,默认值为 row nowrap 。
# justify-content
设置子元素在弹性盒子中主轴方向上的对齐方式。
.justifyContent {
// 默认值,左对齐
justify-content: flex-start;
// 右对齐
justify-content: flex-end;
// 居中
justify-content: center;
// 两端对齐,子元素之间的间隔都相等
justify-content: space-between;
// 每个子元素两侧的间隔相等。所以,子元素之间的间隔比子元素与边界的间隔大一倍
justify-content: space-around;
// 子元素之间的间隔相等,包括子元素到边界的间隔也与子元素之间的间隔相等。
justify-content: space-evenly;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
justify-content:
# align-items
设置子元素在弹性盒子中交叉轴方向上的对齐方式。
.alignItems {
// 默认值,自动调整子元素大小以达到填满弹性盒子的效果
// 若子元素设置了高度,那么不会改变其大小,因此不一定会填满弹性盒子
// 若子元不设置高度或者高度为 auto,那么会填满弹性盒子容器
align-items: stretch;
// 交叉轴起点对齐
align-items: flex-start;
// 交叉轴终点对齐
align-items: flex-end;
// 交叉轴中点对齐
align-items: center;
// 以子元素的第一行文字的基线对齐
align-items: baseline;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
height:
align-items:
# align-content
设置多行子元素的对齐方式。若子元素都显示在一行,那么该属性不起作用。即:需要与flex-wrap:wrap
一起使用
.alignContent {
// 默认值,若没有设置高度或者高度 auto 时,会在交叉轴方向上填满弹性盒子
align-content: stretch;
// 交叉轴起点对齐
align-content: flex-start;
// 交叉轴终点对齐
align-content: flex-end;
// 交叉轴中点对齐
align-content: center;
// 与交叉轴两端对齐,行与行之间的间隔平均分布
align-content: space-between;
// 每行两侧的间隔都相等。所以,行与行之间的间隔比每行到边框的间隔大一倍
align-content: space-around;
// 每行的间隔都相等
align-content: space-evenly;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
flex-wrap:
height:
align-content:
# flex 子元素相关属性
下面的属性都是使用在弹性盒子中每个子元素上面。
# order
设置弹性盒子中子元素的显示顺序,默认按照每个子元素在代码中的顺序排列。
.order {
// 默认值为 0,值越小子元素越靠前
order: 2;
}
1
2
3
4
2
3
4
1
2
3
4
5
order:
# flex-grow
设置子元素的放大比例。即每个子元素分配的剩余空间都是成比例关系。
.flexGrow {
// 默认值为 0,即如果存在剩余空间,也不放大。注意:不支持负数
// 子元素目最终的占据的空间 = 子元素目自身大小 + 分配的剩余空间大小
flex-grow: 2;
}
1
2
3
4
5
2
3
4
5
1
2
3
4
5
flex-grow:
# flex-shrink
设置子元素的缩小比例。
.flexShrink {
// 默认值为 1,即如果剩余空间不足时,子元素会缩小。注意:不支持负数
// 设置为 0 时,子元素不缩小
flex-shrink: 1;
}
1
2
3
4
5
2
3
4
5
1
2
3
4
5
6
7
8
9
10
flex-shrink:
# flex-basis
设置子元素在不伸缩时的固定大小。当主轴为水平方向时,该属性设置宽度;当主轴在垂直方向时,该属性设置高度
.flexBasis {
// 默认值为 auto,即 子元素本身大小。若设置了数值后,子元素自身的 width 或 height 不起作用了
// 若子元素设置了 flex-grow 或 flex-shrink,那么 flex-basis 不起作用。
flex-basis: auto | “num px”;
}
1
2
3
4
5
2
3
4
5
1
2
3
4
5
flex-basis:
flex-grow:
# flex
flex-grow、flex-shrink、flex-basis 三者组合的简写,其中 flex-shrink 和 flex-basis 可选
- 默认值:0 1 auto
- 两个快捷值:auto(1 1 auto)和 none(0 0 auto)
# align-self
设置单个子元素和其他子元素不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch
.alignSelf {
align-self: auto | flex-start | flex-end | center | baseline | stretch
}
1
2
3
2
3
1
2
3
4
5
align-self: