前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库align-content multi-line flex
CSSFlex 布局

align-content 和 align-items 到底怎么分工?

align-content 控制多条 flex line 之间的交叉轴空间怎么分配,align-items 控制每条 line 内部子项怎么对齐。两者是不同层级的概念。align-content 必须配合 flex-wrap: wrap 才生效,因为 nowrap 时只有一条 line,没有行间距可分。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#Flex 布局#容器化#Flexbox
先看核心答案读代码示例
理解线索

两层对齐机制

  1. align-content把多条 flex line 当作整体,决定它们在容器交叉轴上的分布方式
  2. align-items在每条 flex line 内部,决定子项是靠上、居中还是拉伸
  3. flex-wrap设为 wrap 后子项才会换行,产生多条 line

align-content 优先级更高。如果它把行高压缩了,align-items 的效果就不明显了。

核心回答

先记住这个答案

align-content 和 align-items 都作用在交叉轴上,但层级不同。align-content 把多条 flex line 当作整体来分配空间,比如让所有行居中、等间距排列或拉伸填满。align-items 则是在每条 line 内部,决定子项是靠上、靠下、居中还是拉伸。两者同时生效时,先由 align-content 决定每行的位置和高度,再由 align-items 决定行内子项的对齐。

  • align-content 管行与行之间
  • align-items 管行内子项
  • 必须搭配 flex-wrap: wrap
  • 单行时 align-content 无效

什么时候有多条 flex line

默认 flex-wrap: nowrap 时,不管放多少子项都只有一条 flex line,所有子项挤在一行里,最多溢出。只有设了 flex-wrap: wrap,子项排不下时才会换到下一行,每行就是一条 flex line。

所以要让 align-content 起作用,两个条件缺一不可:一是容器设了 flex-wrap: wrap,二是子项确实换了行。光写 wrap 但子项总宽度没超过容器,还是只有一行,align-content 仍然不生效。

两层对齐的代码对比CSS
.container {
  display: flex;
  flex-wrap: wrap;
  height: 400px;
  align-content: space-between; /* 行间距平分 */
  align-items: center;          /* 每行内子项垂直居中 */
}
.item {
  width: 45%;  /* 一行放两个,第三个换行 */
  height: 60px;
}

这段代码的效果是:第一行贴顶、最后一行贴底、行间距平分(这是 align-content 干的),同时每行里的子项在行内垂直居中(这是 align-items 干的)。

align-content 会「压制」align-items

当 align-content 不是 stretch(默认值)时,它会重新计算每条 line 的高度。比如 align-content: flex-start 会让所有行紧挨着贴在顶部,每行的高度就等于最高子项的高度,没有多余空间。这时候 align-items: center 和 align-items: flex-start 看起来差不多,因为行内已经没有额外的交叉轴空间给子项移动了。

只有 align-content: stretch 时,行会被拉伸到平分容器交叉轴空间,行内才会有足够的空间让 align-items 的效果明显。

回答前,多想一步

容易答错的地方

以为 align-content 和 align-items 是互斥的
它们同时生效,不是二选一。align-content 决定行在容器里怎么放,align-items 决定子项在行里怎么放。
只加了 flex-wrap: wrap 以为就够了
wrap 只是允许换行,但如果子项总宽度没超过容器,还是不会换行。align-content 的效果取决于实际有没有产生多行,而不是有没有写 wrap。
试着用自己的话回答

面试官还会怎么问?

align-content 在 Grid 布局里也是这样工作的吗?

大致相同,但 Grid 的 align-content 对单行也有效,不需要像 Flexbox 一样必须有多行。Grid 里它分配的是行轨道之间的空间。

align-content: stretch 和不写有什么区别?

stretch 就是默认值,不写等于写了 stretch。效果是多余的交叉轴空间平均分配给每条 line,让行高拉伸填满容器。

align-self 和 align-content 冲突时谁优先?

align-content 先确定每行的位置和高度,align-self 只能在这个已经确定的行高范围内调整单个子项的位置。所以 align-content 设定了行的空间上限,align-self 在这个范围内生效。

从一道题,走向一组知识

把知识连起来

Flex 布局

flex-direction 改成 column 后 align-items 对齐的是哪个方向?

了解 align-items 的各个取值效果,和 align-content 放在一起对比更清楚。

Flex 布局

align-items 默认值 stretch 在什么条件下才会拉伸子项?

align-items: stretch 是默认值,它和 align-content: stretch 同时生效时行为容易搞混。

参考资料

  • CSS:Flex 布局参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 什么时候有多条 flex line
  3. align-content 会「压制」align-items
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑