前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 grid-auto-flow属性row column dense
CSSGrid 布局

grid-auto-flow 的 row、column 和 dense 分别怎么排项目?

grid-auto-flow: row 沿行逐个安放自动定位的项目,column 改为沿列推进。追加 dense 后,后来的较小项目可回头填前面留下的洞;视觉顺序因此可能与 DOM 顺序不同。

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

自动放置的两个决策

  1. 流向row 或 column 确定扫描轴
  2. 稀疏模式默认不会为后续项目回头找洞
  3. 密集模式dense 可让后续项目填旧空位

dense 只改变视觉放置,不改变 DOM、键盘焦点或读屏顺序。

核心回答

先记住这个答案

grid-auto-flow 控制没有明确位置的项目怎样进入网格。默认 row 按行推进;column 按列推进。若一个跨两列的大卡片塞不进当前行,稀疏模式会跳到后面,留下空格;加 dense 后,后续较小卡片可能回到前面的空格。它只负责摆放顺序,不会改变项目在文档里的先后。

  • row 默认沿行推进
  • column 改为沿列推进
  • dense 会尝试回填空格
  • 回填可能打乱视觉阅读顺序

为什么会留下空格

假设容器有三列,第一张卡片占两列,第二张也占两列。第二张无法放进第一行剩下的一列,所以移到下一行,第一行尾部留下空格。默认自动放置游标继续向前走;即使第三张只占一列,也通常不会回填那个洞。

开启密集回填CSS
.gallery {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-auto-flow: row dense;
  gap: 12px;
}
.gallery .wide { grid-column: span 2; }
/* 后来的窄卡片可能回填早先空出的单列 */

dense 会重新寻找较早的可用位置,却不能保证消除所有空白。项目跨度、显式定位和可用轨道都限制它。它也不是瀑布流算法:普通 Grid 的同一行仍共享行高,卡片高度不同留下的纵向空隙不会自动像瀑布流那样填满。

列方向与顺序风险

column 的自动放置游标优先沿列推进,适合已给定行数、希望先填满第一列再去下一列的布局。若没有合适的显式行,浏览器还会按需要建立隐式轨道;不要仅凭 column 一词猜最终有多少列。

商品列表或文章目录通常要求视觉顺序、键盘导航和读屏顺序一致。dense 可能把后面的项目移到视觉上的前面,但 Tab 仍按 DOM 顺序走。用户眼睛看到第三张,焦点却从第二张跳到更靠后的格子,这种界面应避免密集回填。

可以手算三列例子:第一张宽卡占第 1、2 列,第二张宽卡只好到下一行,第 1 行第 3 列留下洞。默认稀疏模式中,第三张窄卡接在第二张后面;row dense 则可把它放回第一行第 3 列。这样“第三张”视觉上可能出现在“第二张”上方,但读屏仍先读第二张。dense 只是寻找可用网格单元,不会重新排列数据,也不能按卡片高度寻找最短列。

dense 对内容排序敏感:新增或删除前面的卡片,后续项目可能重新填入不同的空位。布局虽然更紧凑,视觉位置却可能跳动。图片墙若只是展示内容,这或许能接受;带编号步骤、价格顺序或可键盘操作的目录,就要优先保持视觉和文档顺序一致。

回答前,多想一步

容易答错的地方

认为 dense 会改 DOM 顺序
它只在布局阶段回填格子,不会重新排列节点。复制文本、辅助技术和键盘导航仍受文档顺序影响。
以为 column 一定是竖排三列
它定义优先扫描方向,实际列数还依赖显式行、项目跨度以及隐式轨道的生成。
试着用自己的话回答

面试官还会怎么问?

什么时候不建议用 dense?

项目有明确阅读顺序、序号或键盘操作流程时,回填会让视觉位置与交互顺序脱节。

显式定位的项目也受 grid-auto-flow 控制吗?

已确定位置的项目优先按自己的线或区域放置;自动放置规则主要处理仍有未指定轴的项目。

row dense 能做真正瀑布流吗?

不能。普通 Grid 的行轨仍按整行内容定高,dense 只填网格单元的洞。

从一道题,走向一组知识

把知识连起来

Grid 布局

minmax(0, 1fr) 与 minmax(auto, 1fr) 差在哪?

自动放置先决定项目在哪条轨道;轨道的 minmax() 尺寸计算是下一步。

Grid 布局

怎样用 Grid 把两个项目叠在同一个区域?

显式定位造成的空位和重叠,会影响自动放置后续项目的位置。

参考资料

  • grid-auto-flow CSS property

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

本题目录
  1. 先记住这个答案
  2. 为什么会留下空格
  3. 列方向与顺序风险
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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