前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 space-between rows
CSSFlex 布局

align-content 设成 space-between 后行间距是怎么分的?

align-content: space-between 把第一行贴在交叉轴起点,最后一行贴在终点,剩下的空间平均分给各行之间的间隔。如果只有一行,效果和 flex-start 一样,行贴在顶部。

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

`space-between` 的分配逻辑

  1. 首尾行第一行贴交叉轴起点,最后一行贴终点,两头没有额外间距
  2. 中间行剩余空间 / (行数 - 1),均匀填在行与行之间
  3. 单行退化只有一行时没有间隔可分,表现和 flex-start 相同

space-between 分的是行间距,行内子项的对齐仍由 align-items 控制,两者互不干扰。

核心回答

先记住这个答案

align-content: space-between 的效果是:把第一行推到交叉轴起点(通常是顶部),把最后一行推到交叉轴终点(通常是底部),中间剩余的空间平均分给相邻行之间的间隔。如果容器里只有一行,没有间隔可分,效果就和 flex-start 一样——行贴在顶部。

  • 首行贴顶、末行贴底
  • 剩余空间等分给行间隔
  • 只有一行时等同于 flex-start
  • 前提是 flex-wrap: wrap 且实际换行

多行时的空间分配过程

浏览器先算出每行的高度,再用容器的交叉轴尺寸减去所有行的高度总和,得到剩余空间。然后把剩余空间除以「行数减一」,得到每个间隔的大小。

比如容器高 400px,三行各高 60px,剩余空间是 400 - 180 = 220px,两个间隔各分 110px。

三行的 space-between 效果CSS
.container {
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
  height: 400px;
  width: 200px;
}
.item {
  width: 80px;
  height: 60px;
}
/* 假设每行放 2 个 item,共 6 个 item = 3 行 */
/* 第一行贴顶,第三行贴底,中间行居中 */

这种布局在卡片列表里很常见:顶部和底部对齐容器边缘,中间自动等距排列。

只有一行时的退化行为

space-between 的计算公式里有「行数减一」。只有一行时行数是 1,没有间隔要分配,唯一的那一行停在交叉轴起点,视觉上和 flex-start 没区别。

这也是为什么只有一行时 space-between、space-around、flex-start 看起来都一样。想看到差别,至少需要两行。

和 space-around、space-evenly 的区别

space-around 给每行的上下两侧各加一份间距,相邻行之间的间隔是两端的两倍。space-evenly 则让所有间隔(包括第一行上方和最后一行下方)都相等。space-between 两头没有间距,空间全分给中间。

实际项目中 space-between 用得最多,因为视觉上贴边的效果更紧凑。

回答前,多想一步

容易答错的地方

忘了 flex-wrap: wrap
align-content 要在多行容器里才有效。如果只加了 align-content: space-between 但没有 flex-wrap: wrap,子项不会换行,只有一条 flex line,设什么都看不到效果。
把 align-content 当成 justify-content 用
justify-content: space-between 是在主轴上给子项之间分配空间。align-content: space-between 是在交叉轴上给行之间分配空间。两者方向不同、作用对象也不同。
试着用自己的话回答

面试官还会怎么问?

align-content: space-between 和 gap 能一起用吗?

可以。gap(或 row-gap)设的是行之间的最小间距,space-between 分配的间距会叠加在 gap 之上。如果剩余空间不够,gap 优先保证,space-between 的额外间距可能为零。

容器高度不够放下所有行会怎样?

行会溢出容器。space-between 只在有剩余空间时才分配间距,如果行的总高度已经超过容器高度,行之间的间隔变成零,所有行紧紧挤在一起甚至溢出。

怎么让两行之间的间距固定而不是自动计算?

用 row-gap 属性。row-gap: 20px 会在每两行之间固定留出 20px 间距,不受容器高度变化的影响。space-between 是弹性的、gap 是固定的。

从一道题,走向一组知识

把知识连起来

Flex 布局

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

align-content 必须配合 flex-wrap: wrap 才生效,这篇讲两者的搭配关系。

Flex 布局

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

align-content 管行间距,align-items 管行内对齐,放在一起对比更容易记。

参考资料

  • CSS:Flex 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 多行时的空间分配过程
  3. 只有一行时的退化行为
  4. 和 space-around、space-evenly 的区别
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

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

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