嵌套 grid 中子容器的 grid-template-areas 不会失效,但必须显式声明 display: grid 才生效;其区域名、线号、对齐规则均仅作用于当前容器,不跨层级继承或透传。
grid-template-areas 会失效?不会失效,但容易被忽略:嵌套的子 grid 容器必须显式声明 display: grid,否则其内部的 grid-template-areas、grid-column 等规则完全不生效——浏览器把它当普通块元素处理。
常见错误是只给顶层容器设 display: grid,内层区块用 div 包着就以为能继承布局能力。实际上每层需要独立启用网格上下文。
display: grid 或 display: inline-grid
grid-template-areas 只在当前容器作用域内解析,不能跨嵌套层级引用父级定义的区域名grid-column/grid-row 是相对于父网格的轨道(track),不是像素值,这点和 flex 嵌套不同靠 grid-column 和 grid-row 的跨轨语法,而不是靠子容器自身设宽高。父容器划分好轨道后,子容器用 span 或起止线号明确占位。
例如父容器定义了 grid-template-columns: 1fr 2fr 1fr,你想让中间的子网格横跨第 2~3 列,写法是:
.child {
grid-column: 2 / -1;
}注意:-1 指向隐式最后一根线(即第 4 条线),不是“最后一列”,所以它能安全适配列数变化;若写 2 / 4,则硬编码依赖列数,后续增删列易出错。
span N 或 start / end(含负索引)方式,避免写死数字线号grid-template-columns 不影响父轨道计算,它只决定自己内部子项怎么排overflow,可能撑开父轨道——这是默认行为,不是 bugalign-items 和 justify-items 的作用范围是什么?它们只控制**当前容器直接子项**在交叉轴/主轴上的对齐,对孙子级无透传效果。也就是说,父 grid 的 justify-items: center 不会让孙元素居中,只影响子容器这个“盒子”的对齐位置。
如果你发现嵌套后内容没按预期对齐,大概率是因为你改错了层级的对齐属性。
justify-items: center
justify-items: center,或给子容器加 justify-self: center
align-content 在单行/单列网格中无效,只有多行/多列且有剩余空间时才起作用不要在每一层都写完整媒体查询。优先用 minmax()、clamp() 和自动折行(grid-auto-flow: dense + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)))来减少断点数量。
真正需要媒体查询时,只在最外层容器统一控制,通过 CSS 自定义属性向下传递断点状态:
:root {
--grid-cols: 1;
}
@media (min-width: 768px) {
:root { --grid-cols: 2; }
}
.layout {
display: grid;
grid-template-columns: repeat(var(--grid-cols), 1fr);
}
.layout > .section {
display: grid;
grid-template-columns: 1fr 2fr; / 子网格结构固定,不随外层变 /
}
这样既保持嵌套结构稳定,又避免子网格重复响应逻辑。
minmax(200px, 1fr) 配合 grid-auto-columns,容易导致不可预测的列数膨胀嵌套 gr

display: grid 容器之内。