CSS布局-弹性盒子
Flexbox 是CSS 弹性盒子布局模块(Flexible Box Layout Module)的缩写,可以快速实现元素的对齐、分布和空间分配:
弹性盒子核心:
-
父控子(亲父子)
父盒子控制子盒子如何排列布局 父盒子称为容器,子盒子称为项目
-
主轴和交叉轴(侧轴)
轴默认水平方向,交叉轴默认垂直方向,可以更改
容器(父盒子)属性
| 属性 | 作用 | 示例 |
|---|---|---|
display | 定义元素为 Flex 容器 | .container {display: flex; } |
flex-wrap | 控制是否换行 | .container (flex-wrap: wrap; } |
flex-direction | 定义主轴方向(项目排列方向) | .container (flex-direction: row; } |
justify-content | 定义主轴上的对齐方式(整体分布) | .container [justify-content: center; } |
align-items | 定义交叉轴上的对齐方式(单行时整体对齐) | .container (align-items: center; } |
align-content | 定义多行时交叉轴上的对齐方式 (仅当 flex-wrap: wrap 且内容换行时生效) | .container (align-content: space-between; } |
容器(父盒子)设置 display:flex; 可以让子盒子按照主轴方式排列。
- 如果子元素有大小,则按照给定大小来显示。
- 如果子元素没有大小,则拉伸充满父容器。
- 若子元素总宽度超过容器宽度,默认会压缩子元素。
控制换行
flex-wrap 控制是否换行
| 属性值 | 描述 |
|---|---|
nowrap | 不换行 ABCDEFGH(全部横向排列,可能被压缩) |
wrap | 换行(第一行上方,第二行下方) ABCD EFGH |
wrap-reverse | 翻转(了解即可) |
主轴对齐方式
justify-content 定义主轴上的对齐方式
| 属性值 | 描述 | 示例 |
|---|---|---|
flex-start | 左对齐(默认) | 子元素靠左排列 |
flex-end | 右对齐 | 子元素靠右排列 |
center | 居中对齐 | 子元素居中 |
space-between | 两端对齐 | 首个子元素放置于起点,末尾元素放置于终点 |
space-around | 项目两侧间隔相等 | 每个子元素周围分配相同的空间 |
space-evenly | 项目间隔均匀分布 | 每个子元素之间的间隔相等 |

主轴方向
flex-direction 定义主轴方向(改变主轴方向)
| 属性值 | 描述 |
|---|---|
row | 默认值。子元素沿水平主轴(从左到右)挂列。 |
row-reverse | 子元素沿水平主轴反向排列(从右到左)。 |
column | 子元素沿垂直主轴(从上到下)排列。 |
column-reverse | 子元素沿垂直主轴反向排列(从下到上)。 |

交叉轴对齐方式(单行)
align-items 定义交叉轴上的对齐方式(单行时整体对齐)
| 属性值 | 描述 |
|---|---|
flex-start | 项目在交叉抽起点对齐(默认值) |
flex-end | 项目在交叉轴终点对齐 |
center | 项目在交叉轴居中对齐 |
stretch | 项目拉伸填充整个容器高度(需子项目无固定高度) |

交叉轴对齐方式(多行)
align-content 定义多行时交叉轴上的对齐方式(仅当 flex-wrap: wrap 且内容换行时生效)
开发中大部分情况下,该属性使用较少,大部分子元素顺序排列即可。
| 属性值 | 描述 | 示例 |
|---|---|---|
flex-start | 上对齐 | 子元素靠上排列 |
flex-end | 下对齐 | 子元素靠下排列 |
center | 居中对齐 | 子元素居中 |
space-between | 两端对齐 | 首个子元素放置于起点,末尾元素放置于终点 |
space-around | 项目两侧间隔相等 | 每个子元素周围分配相同的空间 |
space-evenly | 项目间隔均匀分布 | 每个子元素之间的间隔相等 |

间距
gap 简写属性用于设置行与列之间的间隙(间距)
/* 行和列之间保持20像素间隙。 */
gap: 20px;
/* 行间距是20像素,列间距是30像素。 */
gap: 20px 30px;项目(子盒子)属性
子元素的属性用于控制自身的尺寸、顺序或对齐方式
| 属性 | 描述 | 示例` |
|---|---|---|
flex-grow | 定义子元素剩余空间分配放大比例 (默认 0,即不放大) | .item (flex-grow: 1;} |
flex-shrink | 定义子元素剩余空间分配缩小比例 (默认1,空间不足时等比缩小,0为不缩小) | .item (flex-shrink: 0; ) |
flex-basis | 定义项目在轴方向上的初始大小 (默认auto,优先级高于 width/height) | .item (flex-basis: 200px; } |
flex | flex-grow, flex-shrink, flex-basis 的简写flex: 1,1 1 0%(等比放大/收缩,初始无基准尺寸)flex: 2,2 1 0%(等比放大/收缩,初始无基准尺寸) | .item (flex: 1;) |
| align-self | 覆盖容器的 align-items,单独定义某个项目的交叉轴对齐方式 | .item ( align-self: center; } |
| order | 定义项目的排列顺序(默认 0,数值越小越靠前) | .item (order: - 1; } |
Last updated on