前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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-row grid-column二维定位
CSSGrid 布局

Grid 如何同时用行和列把元素放到指定位置?

Grid 把页面划成行和列。给项目同时设置 grid-row 与 grid-column,就能指定它从哪条线开始、在哪条线结束,形成一个二维区域。

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

两组网格线确定一个区域

  1. grid-row指定起止行线
  2. grid-column指定起止列线
  3. span从起点起跨指定数量的轨道

三列网格有四条列线;1 / 3 占的是前两列。

核心回答

先记住这个答案

给网格容器定义行和列后,项目用 grid-row 选择纵向范围,用 grid-column 选择横向范围,两者一起就确定了一个矩形区域。数值指网格线,不是“第几个格子”:三列有四条列线,grid-column: 1 / 3 会跨前两列。没有显式定位的项目仍按自动放置规则找空位;显式位置冲突时,项目甚至可能重叠。

  • 行列位置由网格线而非单元格编号指定
  • grid-row 控制纵向占位
  • grid-column 控制横向占位
  • span 2 表示跨两条轨道

用网格线框出主内容

假设布局有三列两行,左边导航占两行,正文占右边两列。先定义轨道,再给项目写起止线,比用固定像素偏移更稳。

导航与正文的二维位置CSS
.layout { display: grid; grid-template-columns: 180px 1fr 1fr; grid-template-rows: auto auto; }
.nav { grid-row: 1 / 3; grid-column: 1 / 2; }
.main { grid-row: 1 / 3; grid-column: 2 / 4; }

.nav 从第一条行线到第三条,覆盖两行;.main 从第二条列线到第四条,覆盖右侧两列。页面有三列,却存在第四条列线,因为线位于轨道边界。 也可以写 grid-column: 2 / span 2,表示从第二条列线起跨两列。前者明确结束线,后者明确跨度;当轨道数量变化时,选哪个要看布局意图。

显式项目与自动放置共存

只给重点卡片指定两轴位置,其余项目可以继续自动排列。浏览器会为自动项目寻找可用区域,而不会把所有项目都强制塞进第一行。若显式指定的两个项目落在同一区域,Grid 不会替你报错或移动其中一个,它们可能相互覆盖。

开发时打开浏览器的 Grid 线条叠加层,核对线号和轨道数量。响应式断点改列数后,原先写死的结束线可能创建意外的隐式轨道;这时应同步调整定位规则,或使用命名区域提高可读性。

线号还会受响应式轨道变化影响。例如桌面有三列时,正文写 grid-column: 2 / 4 恰好到最右边;手机只剩一列后,这条规则仍然要求第四条列线,浏览器可能补出隐式列,导致横向溢出。切换轨道数时,同时把定位改为 1 / -1 或单列对应范围,并在 Grid 调试工具里检查是否出现了隐式列。

回答前,多想一步

容易答错的地方

把线号当成格子号
1 / 2 只占第一条轨道,1 / 3 才占两条。画出轨道两侧的线可以避免多算或少算。
认为 Grid 会自动避开所有冲突
显式定位的项目可以占同一块区域,形成重叠;自动放置只负责那些没有完整位置的项目。
试着用自己的话回答

面试官还会怎么问?

grid-area 能代替两条属性吗?

可以用四个网格线值的简写,也可以配合命名区域使用;读写复杂布局时命名区域通常更直观。

没有定义 grid-template-rows 可以写 grid-row 吗?

可以。定位或内容可能创建隐式行,尺寸由 grid-auto-rows 或内容决定,但需要检查是否符合预期。

负线号有什么用?

负数从显式网格的末端往前数,-1 常表示最后一条显式网格线,适合让项目跨到边界。

从一道题,走向一组知识

把知识连起来

Grid 布局

什么时候该用 Grid 的二维布局,而不是 Flexbox?

二维定位是 Grid 相比 Flexbox 处理行列对齐的主要能力。

响应式设计

背景图怎样做响应式,为什么不能总用它代替 img?

响应式图片要与最终网格区域尺寸配合选择资源。

参考资料

  • CSS:Grid 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 用网格线框出主内容
  3. 显式项目与自动放置共存
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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