align-content 控制多行 Flex 项目在交叉轴上的行间分布,仅在 flex-wrap: wrap 且实际换行≥2行、容器有明确高度并存在剩余空间时生效;否则无效。
align-content 在多行 Flex 容器中起什么作用
align-content 控制的是**多行 flex 项目在交叉轴上的行间分布**,不是单个项目对齐,也不是容器内容整体居中。它只在 flex-wrap: wrap(或 wrap-reverse)且实际换行 ≥ 2 行时才生效。如果只有一行,align-content 完全没效果——这时候该用 align-items。
为什么设置了 align-content: center 却没居中
常见失效原因有这几个:
- 容器高度未设定,或设为
auto(浏览器无法计算剩余空间,align-content失去参照) - 子项总高度刚好填满容器(无剩余空间可分配)
- 忘了加
flex-wrap: wrap,导致强制单行,align-content被忽略 - 父容器使用了
min-height但未触发块级格式化上下文(如未清除浮动、未设overflow),影响高度计算
实现多行垂直居中的最小可靠写法
关键在于:固定容器高度 + 显式换行 + 剩余空间可用。示例:
.container {
display: flex;
flex-wrap: wrap;
height: 400px; /* 必须有明确高度 */
align-content: center; /* 行组在交叉轴居中 */
align-items: flex-start; /* 单行内项目顶部对齐(可按需改) */
}
.item {
flex: 0 0 120px; / 防止拉伸,控制换行 /
}
注意:align-content: center 居中的是“行盒子”整体,不是每个 .item。若想每行内部也居中,需配合 justify-content: center(主轴)和 align-items: center(单行交叉轴)。