前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 自动放置避开显式定位项目
CSSGrid 布局

Grid 自动放置会避开手动定位的项目吗?

会在正常自动放置流程中避开已经占用的网格单元。浏览器先处理有显式行列位置的项目,再把自动定位项目按 grid-auto-flow 的方向寻找可用位置。需要注意,显式定位的两个项目本身可以重叠;自动放置也不会主动改变开发者指定的重叠位置。

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

自动游标寻找空闲网格单元

  1. 显式定位已指定位置的项目先占用目标网格单元
  2. 自动游标按流向为未定位项目寻找可容纳的空位
  3. dense后续项目可回填早先留下的可用单元

自动项目会避开已占用格子;两个都明确指定同一区域的项目仍可重叠。

核心回答

先记住这个答案

总览卡片手动占住第一行两列后,普通卡片不会被默认自动放置叠在这两格上,而是由自动放置游标继续找可容纳它们的空闲区域。跨列卡片要整块区域都有空位,不能只看起点一格。dense 允许后续小卡片回填早先留下的洞,但可能让视觉顺序偏离 DOM;两个手动定位到同一区域的项目仍可重叠。

  • 自动项目避开已占用格子
  • 跨列项目需要连续空位
  • dense 可回填前面的洞
  • 显式定位项目仍可能重叠

总览卡片占两列后的排布

仪表盘中把“总览”卡片固定在第一行第一列,并让它跨两列,其他卡片自动排列。自动项目会绕开它占用的格子,继续寻找可放下自己的空位。若用 grid-auto-flow: row dense,后面的较小项目可能回填之前留下的洞,视觉顺序因此与 DOM 顺序不完全一致;交互卡片要核对键盘顺序。

观察总览卡片占位后的落点CSS
.dashboard {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: row;
  gap: 12px;
}
.summary { grid-column: 1 / span 2; grid-row: 1; }
/* 其余未定位项目会找未占用的格子 */

总览卡片占住第一行前两格,其余自动项目会寻找空闲网格单元。

自动游标寻找空闲网格单元

自动放置使用游标沿指定方向扫描可用网格单元。项目若跨多个轨道,算法需要找到整个占用区域都空着的位置,而不只是起点空着。dense 允许游标回头填洞,能提高密度,但会改变视觉排列。显式项目若超出定义好的轨道,还会生成隐式轨道;如果两个显式项目指向同一个区域,Grid 允许它们层叠,自动放置算法不会替你消除这个冲突。

还要区分“只指定了一个轴”和“两个轴都指定了”。例如一个项目固定在第二列、没有写行号,它仍要沿着第二列找可用行;不能把它当成完全自动的项目从第一列开始扫。反过来,两个项目若都写死 grid-row: 1 和 grid-column: 1,它们就是明确重叠,grid-auto-flow 无权把第二个挪走。实际调试时先给显式定位项目画出占位,再按 DOM 顺序模拟剩余项目的游标,通常比猜“Grid 会自动避让”更可靠。

在三列网格里给总览卡片写 grid-column: 1 / span 2,再放三张普通卡片,逐格标出它们的落点。把总览卡片改成同时指定第二行后,普通卡片的放置顺序会重新受已占用单元影响。这个实验比只看最终截图更能分清显式定位与自动放置。

回答前,多想一步

容易答错的地方

说 Grid 永远不会重叠
自动放置会寻找空位,但显式放在同一网格区域的项目可以重叠。
以为 dense 不影响顺序
它可能让后面的项目视觉上跑到前面的空位,DOM 顺序仍没变。
试着用自己的话回答

面试官还会怎么问?

跨两列的自动项目会怎样找位置?

它要找到连续且未被占用的两个列轨道,当前行装不下就继续扫描。

显式定位超出模板列数怎么办?

Grid 会按需要创建隐式轨道,尺寸由 grid-auto-columns 或默认规则决定。

为什么不建议对交互控件随意用 dense?

视觉顺序可能和阅读、焦点顺序分离,键盘访问容易跳跃。

从一道题,走向一组知识

把知识连起来

Grid 布局

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

自动项目落入哪些列,会受 fr 轨道与百分比轨道的实际宽度影响。

Grid 布局

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

自动放置新增行后,行轨道的高度仍由所放项目的内容贡献决定。

参考资料

  • CSS:Grid 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 总览卡片占两列后的排布
  3. 自动游标寻找空闲网格单元
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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