前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 subgrid子项相对父轨道定位
CSSGrid 布局

子网格里的项目怎么对准父网格的轨道?

子网格先作为父 Grid 的项目占据一段轨道,再把这段轨道交给自己的子项。子项使用的是这段范围内的本地网格线,不能跳到子网格范围外。

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

父级范围映射到本地线

  1. 父网格定位决定子网格占据哪些行列
  2. subgrid把所占范围内的轨道交给子项
  3. 局部线号子项从子网格起点编号定位

父级第 4 条线可能在子网格内部是第 1 条线,线号不能机械照搬。

核心回答

先记住这个答案

先把子网格元素放进父 Grid,并用 grid-row 或 grid-column 指定它跨越的轨道;然后在该轴写 subgrid。它的孩子会对齐父网格对应的轨道线,但定位时从子网格自己的起点编号。比如卡片跨父网格第 2 到第 5 条行线,它内部只有三行、四条本地线;孩子无法用一个线号直接跳到父网格范围外。

  • 先确定子网格在父级跨越的范围
  • 子项用局部线号定位
  • span 决定项目跨过几条轨道
  • 子项不能越界占用父级其他轨道

先圈定父级轨道范围

把卡片看作从父网格裁下来的一块区域更容易理解。它跨过三条父级行轨道,内部子网格就获得三条对应的行轨道;父级其他行不属于这张卡。

跨三行的卡片CSS
.board { display: grid; grid-template-rows: 60px 1fr 48px; }
.card { display: grid; grid-row: 1 / span 3; grid-template-rows: subgrid; }
.card__title { grid-row: 1; }
.card__action { grid-row: 3; }

标题占子网格第一行,操作区占第三行,两者沿用父级对应行的尺寸。span 3 说的是跨三条轨道,不是跨三条网格线;三条轨道的两端一共有四条线。 如果卡片在父网格中从第二行开始,内部标题仍可用本地第一行定位。把父级绝对行号直接写给子项,往往会落到意料之外的位置。

双轴定位要分别看范围

行方向可以设成子网格,列方向继续让卡片独立布局。这时内部的 grid-row 对着父级行轨道,grid-column 对着卡片自有列轨道。两个坐标系可以同时存在,不要因为行已经共享就以为列也共享。

调试嵌套布局时,先标出父级的行列线,再写出子网格项目实际占的范围,最后才判断子项的线号。父级缩小或卡片换位置时,局部线号仍相对卡片起点,适合复用组件。

还有一个容易忽略的场景:子网格内部某项内容很长,把共享的 auto 轨道撑高,父网格那条轨道也会跟着变高。子网格并非把父级尺寸“复制一份”后各自计算;它把内部内容的尺寸需求带回同一组轨道。因此跨卡片对齐通常会成功,但整行卡片也可能因为一张长标题而变高。要控制高度,就要先处理文本换行或轨道上限。

回答前,多想一步

容易答错的地方

把 span 3 理解为跨三条线
span 3 指三条轨道。若从第 1 条线开始,结束线是第 4 条。
让子项直接定位到父级范围外
子项仍是子网格的网格项目,定位发生在子网格提供的轨道范围内;需要更大范围先调整父级对子网格的分配。
试着用自己的话回答

面试官还会怎么问?

子网格只跨一行有用吗?

可以生效,但在该轴只有一条轨道,可供内部项目对齐的线很有限。跨多条轨道时共享效果更明显。

父网格的命名线能在子网格里使用吗?

继承轨道时相关线名可以传入子网格范围,但仍应核对局部范围和命名冲突,不能借名字越过所占区域。

能同时继承行和列吗?

可以两个轴都设 subgrid,前提是父网格在两个轴上都给子网格分配了相应轨道范围。

从一道题,走向一组知识

把知识连起来

Grid 布局

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

grid-row 和 grid-column 是确定父级跨越范围的基础。

Grid 布局

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

Grid 的二维定位能同时指定子项所在行与列。

参考资料

  • CSS:Grid 布局参考资料

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

本题目录
  1. 先记住这个答案
  2. 先圈定父级轨道范围
  3. 双轴定位要分别看范围
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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