前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库CSS Grid fr单位与百分比轨道尺寸区别
CSSGrid 布局

Grid 列宽用 1fr 和百分比,差别在哪里?

百分比轨道相对网格容器的尺寸求值,fr 单位则在轨道尺寸计算后分享剩余空间。容器宽度确定时,50% 50% 已占满容器,再加 gap 可能横向溢出;1fr 1fr 会先扣除间距,再把可分配的空间分给两列。fr 轨道还可能受项目的自动最小尺寸影响,不保证长内容一定能压窄。

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

`fr` 分余量,百分比取容器比例

  1. 百分比轨道按容器对应尺寸求值,沟槽另占空间
  2. fr 轨道参与剩余空间分配,并受最小内容约束
  3. gap在轨道尺寸计算中占位,不属于百分比轨道内部

fr 分的是剩余可分配空间,百分比取的是容器比例;有间距时差别尤其明显。

核心回答

先记住这个答案

一个 600px 的容器分两列还设了 20px 间距:50% 50% 两列各按容器宽度取 300px,再加间距就可能超过容器;1fr 1fr 会在轨道计算中扣除间距后分配剩余宽度。前提还要看列内容的自动最小尺寸,长得不能断开的内容可能让 fr 列拒绝继续变窄。遇到溢出时别只看比例数字。

  • 百分比轨道按容器尺寸求值
  • fr 分享扣除间距后的余量
  • 50% 50% 加间距可能溢出
  • 长内容可抬高 1fr 的下限

两等分卡片加间距为何溢出

页面要做两等分卡片,中间留 24px 间隔。容器宽 600px 时,50% 50% 给两列各 300px,再加间距得到 624px。改成 1fr 1fr,轨道各分享扣除间距后的 576px,通常各得 288px。若其中一列有不可断开的长代码,1fr 的默认最小行为仍可能导致溢出;可按设计使用 minmax(0, 1fr) 并处理内部内容。

对比间距如何影响两种轨道CSS
.cards {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px; /* 先扣间距,再分两份剩余空间 */
}
.cards > * { min-width: 0; }

间距先占 24px,剩下的宽度再由两个弹性轨道平分。

fr 分余量,百分比取容器比例

fr 是弹性轨道单位,参与分配轨道尺寸算法里的可用空间;百分比先从容器尺寸取得对应长度。容器在该轴上的尺寸不确定时,百分比轨道的求值规则更复杂,不能总按一个已知像素宽来口算。1fr 也不等于无条件压成一半,轨道最小尺寸和项目的固有贡献会影响结果。minmax(0, 1fr) 把弹性轨道下限明确设为零,适合要严格平分又能处理内部溢出的两列布局。

不要把 fr 理解成“容器宽度的百分比”。假设容器内容宽 600px,两列之间 gap: 20px,没有其他限制时,两个 1fr 分的是扣掉沟槽后的 580px,各占约 290px;两个 50% 则先各得 300px,加上 20px 沟槽后总宽约 620px。这个手算只适合已知容器尺寸、项目不会抬高轨道最小值的简化情形。实际页面若有长代码或图片,还要检查自动最小尺寸;可试 minmax(0, 1fr) 与内容滚动策略。

回答前,多想一步

容易答错的地方

把 1fr 当成 100%
fr 分的是剩余可分配空间,百分比取的是容器比例;有间距时差别尤其明显。
认为 1fr 1fr 永远等宽
长内容的最小尺寸可能抬高其中一列的下限;要严格等分时检查 minmax(0, 1fr) 与内部溢出。
试着用自己的话回答

面试官还会怎么问?

为什么 50% 50% 加 gap 会溢出?

两个百分比轨道已经合计容器宽度的全部,gap 另外占空间。

minmax(0, 1fr) 解决什么?

显式将轨道最小值设为零,避免内容自动下限阻碍弹性轨道缩小。

容器宽度不确定时还能直接口算百分比吗?

不能。百分比轨道在不确定尺寸下会按 Grid 轨道尺寸规则处理,应看具体布局上下文。

从一道题,走向一组知识

把知识连起来

Grid 布局

Grid 容器没设高度,行轨道会怎么长?

列轨道按余量计算后,行轨道还会独立按内容贡献增长。

Grid 布局

Grid 轨道的 fit-content() 和 auto 有什么区别?

fit-content() 可约束内容列的增长,与 fr 分配剩余宽度形成配合。

参考资料

  • CSS:Grid 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 两等分卡片加间距为何溢出
  3. fr 分余量,百分比取容器比例
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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