前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 repeat()函数生成轨道模式
CSSGrid 布局

Grid 的 repeat() 怎样生成重复轨道,auto-fit 又有什么用?

repeat() 是给 grid-template-columns 或 grid-template-rows 写重复轨道的简写。它可重复固定次数,也能配合 auto-fit 与 minmax() 按容器宽度生成列。

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

重复的是轨道列表

  1. 固定次数把同一轨道模式重复指定次数
  2. auto-fit容器容得下多少列就生成多少并折叠空列
  3. minmax()为每条轨道指定可伸缩的上下界

repeat() 不会复制网格项目,也不会保证已有项目恰好填满每一列。

核心回答

先记住这个答案

repeat() 把轨道模式展开成一串列或行,例如 repeat(3, 1fr) 就是三条等宽列;repeat(2, 100px 1fr) 会把“固定列加弹性列”重复两遍。卡片数量和容器宽度不固定时,可用 repeat(auto-fit, minmax(200px, 1fr)):能放几列就放几列,剩余空间由各列分摊。它只定义轨道,不负责生成内容。

  • repeat(3, 1fr) 生成三条等宽列
  • 第二个参数可以是一组轨道
  • auto-fit 会折叠空轨道
  • minmax() 可限制列的最小尺寸

固定重复与模式重复

先看最常见的三列卡片。三条 1fr 轨道会分摊网格容器可用空间;如果容器设了 gap,会先扣掉间距再分配。第二个参数也可写多条轨道,于是奇偶列就能形成固定的节奏。

两种轨道模式CSS
.three { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.pattern { display: grid; grid-template-columns: repeat(2, 120px 1fr); }

.three 生成三列;.pattern 实际生成四列,依次是 120px 1fr 120px 1fr。这里的 minmax(0, 1fr) 允许列收缩,避免长单词或大图片把弹性列撑破。 固定列数适合设计稿明确给出列数的区域。窗口缩小时还要配合断点,否则三列即便很窄也不会自动变成两列。

卡片数量变化时用自动重复

商品列表的容器可能在主内容区,也可能在窄侧栏,固定写三列很难复用。auto-fit 根据容器可容纳的轨道数生成列;与 minmax() 一起使用时,每列先保证可读的下限,再把多余宽度分掉。

auto-fill 也会尽量生成能装下的轨道,但即使没有项目填入,空轨道也会保留。auto-fit 会折叠这些空轨道,因此少量卡片时已有卡片能伸展。二者在项目足够多、轨道都占满时看起来往往一样。

自动重复有个实用边界:repeat(auto-fit, minmax(200px, 1fr)) 的 200px 是每列的最低目标,不是“容器再窄也不会溢出”的保证。如果组件本身只有 180px 宽,最小列仍会比容器宽。需要允许特别窄的嵌入位置时,可以把下限写成 min(100%, 200px) 再交给 minmax();同时检查图片和长链接是否也能缩小。

回答前,多想一步

容易答错的地方

以为 repeat() 会重复卡片
它只改网格容器的轨道定义。DOM 里有几张卡仍由 HTML 或数据决定;项目多于显式轨道时会出现隐式行。
认为 1fr 一定不会溢出
轨道的自动最小尺寸可能受长内容影响。需要可收缩列时可写 minmax(0, 1fr),项目内部也可能需要 min-width: 0。
试着用自己的话回答

面试官还会怎么问?

auto-fill 和 auto-fit 何时看出差异?

容器够宽而项目数量很少时最明显。auto-fill 留着空列,auto-fit 折叠空列并让有内容的列伸展。

能在 repeat(auto-fit, ...) 里直接用 1fr 吗?

自动重复需要可确定的轨道尺寸来算容纳数量,通常写 minmax(某个长度, 1fr),给列一个明确下限。

多出来的卡片放哪儿?

列轨道固定后,自动放置会继续创建隐式行。行高由 grid-auto-rows 或内容决定。

从一道题,走向一组知识

把知识连起来

Grid 布局

Grid 能把页面内容顺序和视觉布局分开吗?

网格轨道确定后,内容仍按自动放置或显式定位规则进入单元格。

Grid 布局

为什么只写 subgrid,却没设置 display: grid 时不会生效?

子网格继承父级轨道,不能把子网格当作重新 repeat() 的独立列。

参考资料

  • CSS:Grid 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 固定重复与模式重复
  3. 卡片数量变化时用自动重复
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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