前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库flex-wrap wrap flex line
CSSFlex 布局

flex-wrap: wrap 什么时候换行?每一行又怎么排?

flex-wrap: wrap 允许 Flex 项分成多条线。排线时会按项目顺序和外部假设主尺寸判断下一项是否还能放进当前行;放不下就开新行。随后每一行分别执行主轴弹性分配,justify-content 也在各行独立生效,所以第二行不会自动沿用第一行的列宽。

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

每条 Flex 线分别伸缩

  1. flex-wrap: wrap按项目外部假设尺寸先分配到多条线
  2. 单条 Flex 线每条线独立计算增长、收缩与主轴余量
  3. justify-content只分配本线的余量,不统一跨线列宽

Flex 的每一行独立计算宽度,最后一行可能被拉宽。需要跨行列轨严格对齐时,Grid 通常更合适。

核心回答

先记住这个答案

卡片加了 flex-wrap: wrap 后,第二排只有一张卡片却铺得很宽,这是 Flex 的正常表现。浏览器先把项目分到各条线上,然后在每条线内部单独计算 flex-grow、flex-shrink 与 justify-content。它不会沿用第一排的列宽;如果产品要求每行形成严格对齐的网格,通常应改用 Grid。

  • wrap 允许项目分配到多条线
  • 排线要计入尺寸与间距
  • 每条线独立分配剩余空间
  • 末行项目可能被单独拉宽

卡片从一行变成多行

卡片容器宽度缩小时,四张卡片从一行变成两行。项目的 flex-basis、外边距和 gap 会一起影响能否放下;只盯住卡片的 width 容易算错临界点。比如三个 100px 卡片与两段 16px 间距至少需要 332px,容器比它窄就可能把第三张放到下一行。最终宽度还可能因每行自己的 flex-grow 改变。

让卡片在宽度不足时换到下一行CSS
.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  flex: 1 1 180px; /* 以 180px 为排线基准 */
  min-width: 0;
}

卡片的 180px 基准尺寸用于排线;最后一行能否拉满取决于各项 flex-grow。

每条 Flex 线分别伸缩

Flex 换行不是把整行排完后才统一缩小,它先决定哪些项目同属一条 Flex 线,再在每条线内部处理增长和收缩。因此 flex: 1 1 180px 的卡片到了只有一张的末行,可能独自长满整行。交叉轴上,行与行的分布由 align-content 管;单行内部项目在交叉轴的对齐由 align-items 管。容器交叉尺寸没有多余空间时,align-content 的空间分布也可能看不出变化。

换行判断看的是项目的外部假设主尺寸,而不是等每个项目缩到零才换行。比如卡片基础宽度 220px、容器宽度 500px、gap: 20px,两张卡片能进同一行,第三张需要另起一行。若卡片写了 flex-grow: 1,第一行的两张会分享该行余量,第二行孤单的一张可能撑满整行。想得到固定三列且上下严格对齐的卡片阵列,Grid 的列轨道更直接。

回答前,多想一步

容易答错的地方

以为 wrap 会保持严格网格列对齐
Flex 的每一行独立计算宽度,最后一行可能被拉宽。需要跨行列轨严格对齐时,Grid 通常更合适。
忽略 gap 和外边距
它们都占空间,卡片宽度总和刚好等于容器宽度时,间距仍可能迫使换行。
试着用自己的话回答

面试官还会怎么问?

一张卡片比容器还宽怎么办?

Flex 可以在它前面断行,却不能把单张项目拆成多行。要允许项目自身收缩、让内容断词,或处理横向溢出。

align-content 和 align-items 分别管什么?

前者分配多条 Flex 线在交叉轴上的空间,后者对齐每条线里的项目。只有一条线时前者通常没有可分配的线间空间。

为什么末行只有一张卡片时会铺满?

它所在的行独立计算正向剩余空间;如果项目有 flex-grow: 1,这张卡片就能拿到整行余量。

从一道题,走向一组知识

把知识连起来

Flex 布局

order 改了 Flex 项的显示顺序,键盘顺序也会变吗?

换行按视觉排序后的项目逐个排线,order 会改变哪些项目落在同一行。

Flex 布局

flex-start 和 flex-end 在不同 flex-direction 和 RTL 下分别把元素推向哪边?

每条线会独立分配剩余空间,flex-start 和 flex-end 决定该行的起止对齐。

参考资料

  • CSS:Flex 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 卡片从一行变成多行
  3. 每条 Flex 线分别伸缩
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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