Flex 基本概念

在 flex 容器中默认存在两条轴,水平主轴(main axis) 和垂直的交叉轴(cross axis),这是默认的设置,当然你可以通过修改使垂直方向变为主轴,水平方向变为交叉轴

Flex 容器

实现 flex 布局需要先指定一个容器,任何一个容器都可以被指定为 flex 布局,这样容器内部的元素就可以使用 flex 来进行布局。如果你使用块元素如 div,你就可以使用 flex,而如果你使用行内元素,你可以使用 inline-flex。

需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。

Flex属性

1. flex-direction

决定主轴的方向(即项目的排列方向)

1
2
3
4
5
6
7
.container {
flex-direction: row | row-reverse | column | column-reverse;
}
row,主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端
column:主轴为垂直方向,起点在上沿
column-reverse:主轴为垂直方向,起点在下沿

2. flex-wrap:

决定容器内项目是否可换行

1
2
3
4
5
6
7
8
9
10
11
.container {
flex-wrap: nowrap | wrap | wrap-reverse;
}

默认值:nowrap 不换行,即当主轴尺寸固定时,当空间不足时,项目尺寸会随之调整而并不会挤到下一行。


wrap:项目主轴总尺寸超出容器时换行,第一行在上方;


wrap-reverse:换行,第一行在下方

3. flex-flow:

flex-direction 和 flex-wrap 的简写形式

1
2
3
4
5
6

.container {
flex-flow: <flex-direction> || <flex-wrap>;}


默认值为: row nowrap,感觉没什么卵用,老老实实分开写就好了。这样就不用记住这个属性了。

4. justify-content:

定义了项目在主轴的对齐方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
.container {
justify-content: flex-start | flex-end | center | space-between | space-around;}


默认值: flex-start 左对齐

flex-end:右对齐

center:居中

space-between:两端对齐,项目之间的间隔相等,即剩余空间等分成间隙。

space-around:每个项目两侧的间隔相等,所以项目之间的间隔比项目与边缘的间隔大一倍。

5. align-items:

定义了项目在交叉轴上的对齐方式

1
2
3
4
5
6
7
8
9
10
11
.container {
align-items: flex-start | flex-end | center | baseline | stretch;}

flex-start:交叉轴的起点对齐

flex-end:交叉轴的终点对齐

center:交叉轴的中点对齐

baseline: 项目的第一行文字的基线对齐

6. align-content:

定义了多根轴线的对齐方式,如果项目只有一根轴线,那么该属性将不起作用

1
2
3
4
5
6
7
8
9
10
11
12
13
.container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;}

flex-start:轴线全部在交叉轴上的起点对齐

flex-end:轴线全部在交叉轴上的终点对齐

center:轴线全部在交叉轴上的中间对齐

space-between:轴线两端对齐,之间的间隔相等,即剩余空间等分成间隙。

space-around:每个轴线两侧的间隔相等,所以轴线之间的间隔比轴线与边缘的间隔大一倍。