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

flex-grow 为 0 时子项还会增长吗?

flex-grow: 0 是默认值,意味着子项不参与剩余空间的分配,宽度停在 flex-basis 的尺寸。如果 flex-basis 是 auto,就是内容或 width 决定的宽度。想让子项填满容器,要显式设 flex-grow: 1。

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

`flex-grow: 0` 的含义

  1. 不分配子项不参与剩余空间的分配,容器里可能留有空白
  2. 保持基础尺寸子项宽度等于 flex-basis 的值(默认是 auto,即内容宽度)
  3. flex 缩写的作用flex: 1 把 flex-grow 设成 1,子项会增长来填满空间

虽然 flex-grow: 0 不会增长,但 flex-shrink 默认是 1,子项在空间不够时还是会被压缩。

核心回答

先记住这个答案

flex-grow: 0 是默认值。它的意思是:容器里有剩余空间时,这个子项不去要,不增长。子项的宽度就停在 flex-basis 决定的大小上。这就是为什么 flex 子项默认不会自动填满容器——你需要显式设 flex-grow: 1 或者用 flex: 1 缩写才能让子项增长。

  • flex-grow: 0 是默认值
  • 子项不会增长来填满空间
  • 宽度由 flex-basis 决定
  • flex: 1 让子项填满剩余空间

为什么 flex 子项默认不填满容器

很多刚学 flex 的人觉得奇怪:用了 display: flex 之后,子项怎么没有自动撑满?这是因为 flex-grow 默认是 0,子项不参与剩余空间的分配。容器右边(或下方)会留一片空白。

默认行为 vs 加了 flex-growCSS
.container {
  display: flex;
  width: 600px;
}

/* 默认行为:flex-grow: 0 */
.item { width: 100px; }
/* 三个 item 占 300px,右边空 300px */

/* 加了 flex-grow: 1 */
.item-grow { flex-grow: 1; width: 100px; }
/* 三个 item 平分 300px 剩余空间,各变成 200px */

flex-grow: 0 时容器有 300px 空白,设成 1 后空白被三个子项平分。

flex-grow: 0 但 flex-shrink 默认是 1

虽然 flex-grow: 0 不会增长,但 flex-shrink 默认是 1。这意味着空间不够时,子项会被压缩。这个行为有时候让人困惑:明明没让子项增长,怎么宽度变了?是因为被缩小了,不是增长了。

如果不想被压缩,可以设 flex-shrink: 0 或者用 flex: 0 0 auto,子项就完全保持固定尺寸。

flex: none 和 flex: auto 的区别

flex: none 展开为 flex: 0 0 auto——不增长、不缩小、基础尺寸按内容来。子项是完全刚性的。

flex: auto 展开为 flex: 1 1 auto——可以增长也可以缩小,基础尺寸按内容来。子项是完全弹性的。

flex: 1 展开为 flex: 1 1 0%——可以增长也可以缩小,基础尺寸为 0,所有空间按比例分。子项会平分空间。

这三个缩写覆盖了最常见的场景,比手写三个属性更常用。

回答前,多想一步

容易答错的地方

以为 display: flex 后子项就自动等分
display: flex 只是开启了弹性布局,flex-grow 默认是 0,子项不会自动填满。要等分需要每个子项都设 flex: 1。
以为 flex-grow: 0 等于 flex: 0
flex: 0 展开为 flex: 0 1 0%,flex-basis 是 0%,子项基础尺寸为 0。而 flex-grow: 0 只设了 grow,flex-basis 还是默认的 auto。两者基础尺寸不同。
试着用自己的话回答

面试官还会怎么问?

只有一个子项设了 flex-grow: 1,其他都是 0,会怎样?

那个子项独占所有剩余空间,其他子项保持 flex-basis 尺寸不变。这是 flex 布局里常见的模式:侧边栏固定宽度,主内容区 flex-grow: 1 自适应。

flex-grow 设成很大的数字(比如 999)有什么特别的?

没有特别的。flex-grow 是按比例分配的,999 相对于其他子项的 grow 值来说只是比例更大。如果只有一个子项有 grow 值,不管是 1 还是 999 效果一样——它独占所有剩余空间。

子项设了 min-width 会影响 flex-grow: 0 的行为吗?

flex-grow: 0 时子项宽度就是 flex-basis。如果 flex-basis 算出来比 min-width 小,子项宽度会被提升到 min-width。min-width 始终是硬限制,不管 grow 是多少。

从一道题,走向一组知识

把知识连起来

Flex 布局

flex-shrink 的收缩量是怎么算出来的?

flex-shrink 控制负空间收缩,增长因子为零并不阻止收缩。

Flex 布局

为什么调大 flex-shrink,长文本还是把布局撑开?

自动最小宽度可能卡住收缩,即使项目允许收缩。

参考资料

  • CSS:Flex 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 为什么 flex 子项默认不填满容器
  3. flex-grow: 0 但 flex-shrink 默认是 1
  4. flex: none 和 flex: auto 的区别
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

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

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