火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

用 subgrid 让子项对齐父网格列

发布于 1周前
5

卡片内部要与外层网格的列对齐,常规做法是让卡片再写一遍 grid-template-columns,列宽一改就要同步两处。subgrid 让子网格直接沿用父级的轨道定义。

坐在桌边使用笔记本电脑的人
子网格的列定义可以交给父级统一管理

没有 subgrid 时的写法

.list { display: grid; grid-template-columns: 120px 1fr 80px; }
.card { display: grid; grid-template-columns: 120px 1fr 80px; }

两处列定义保持一致才能对齐。父级改成 minmax 或加入新列时,卡片内部要跟着改,维护成本随层级增长。

改用 subgrid

.list { display: grid; grid-template-columns: 120px 1fr 80px; gap: 12px; }
.card {
  display: grid;
  grid-column: 1 / -1;
  grid-template-columns: subgrid;
}

卡片先横跨整行,再把列定义交给父级。此后只改一处轨道,卡片内部自动跟随。

两个方向分别设置

grid-template-columns: subgrid 只作用于列方向,行方向仍是独立的网格。两个方向都要继承时写成 grid-template: subgrid / subgrid,或单独声明行方向。

间距的处理

子网格默认沿用父级的 gap。需要单独控制时,在子网格上重写 column-gap 与 row-gap,不写则与父级一致。

适用与不适用

场景 判断
卡片内部需要与外层列对齐 适用
卡片内部是独立的信息分组 不适用,普通网格即可
需要跨多行保持行高一致 适用,配合行方向继承
布局需要脱离父级轨道 不适用

兼容性处理

用 @supports 做特性检测,不支持时退回显式的列定义。

.card { grid-template-columns: 120px 1fr 80px; }
@supports (grid-template-columns: subgrid) {
  .card { grid-template-columns: subgrid; }
}

常见问题(FAQ)

设置了 subgrid 却没有对齐?
子网格必须先用 grid-column 横跨父级的对应轨道,没有跨列范围时无从继承。
行方向怎么一起继承?
写成 grid-template: subgrid / subgrid,或单独声明 grid-template-rows: subgrid。
卡片内部的间距变了怎么调?
在子网格上重写 column-gap 与 row-gap,不写则沿用父级的间距。
老浏览器怎么处理?
用 @supports 做特性检测,不支持时回退到显式列定义。
subgrid 会影响父级的行排布吗?
会,子网格占用父级的实际行数,父级按内容自动排布轨道。
CSS Gridsubgrid列宽对齐子网格网格继承
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1