Subgrid 是显式委托父网格轨道控制权而非继承,要求父容器为显式定义轨道的网格容器且子元素必须是其网格项;仅支持 grid-column/grid-row,用于对齐多层表单列宽等场景。
Subgrid 不是“继承父级轨道”的快捷键,而是显式委托轨道控制权
很多人以为
是让
子网
格自动“抄”父网格的列/行定义,其实不是。它只是把父网格容器中已声明的
或
的**轨道引用权**交给子元素——前提是父容器本身必须是网格容器且明确定义了轨道。
常见错误现象:
的父容器下,子元素设
却没效果——因为子元素没被放进父网格的某个网格项里(即没用
或
/
显式定位)。
必须先让子元素成为父网格的一个**网格项**(例如通过
或
)
父容器的
必须是**显式定义**的(不能是
或仅靠
推导)
只能用于
或
,不能用于
本身(即子元素不能自己再写
)
用
对齐多层表单字段的列宽
这是 Subgrid 最实用的场景:表单里一组
+
嵌套在多个卡片内,又需要所有 label 宽度一致、所有 input 对齐——不用 JS 计算,也不用全局 CSS 变量硬编码。
关键点在于把表单区域设为网格容器,用
定义两列(label + input),然后每个卡片内部用
复用同一套列轨道:
立即学习
“
前端免费学习笔记(深入)
”;
注意:如果
没有
这类定位,它就不是 form 的网格项,
直接失效。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
Firefox 和 Chrome 都支持了,但 Safari 16.4+ 才开始支持
目前(2024 年中)
在 Chromium 111+ 和 Firefox 71+ 已稳定支持,Safari 直到 16.4 才加入。不支持时,
会被忽略,子元素退化为普通块级元素——这通常导致布局塌陷,而不是静默降级。
不能只靠
包裹整个规则——要确保 fallback 布局可用(比如加一层
+ 手动重复列定义)
避免在
上叠加
:父网格的
不会穿透到子网格;子网格自己的
会生效,但轨道对齐仍以父为准
不支持
继承——area 名称不会跨层级传递
嵌套太深时,Subgrid 不会“链式继承”,只认直接父网格
如果 A 是网格容器,B 是 A 的网格项并设了
,那么 C 是 B 的子元素、即使也设
,它也不会去继承 A 的轨道——因为 B 本身不是网格容器(除非你额外给 B 加
),更不是 A 的“轨道提供者”。
换句话说:
只向上查一级,且要求那一级既是网格容器,又是当前元素的**直接父元素**,同时该父元素必须是**父网格容器的网格项**(即被父网格托管着)。
容易被忽略的是:当你在组件库中封装一个带
的子组件时,必须确保它的父元素不仅用了
,还明确把它放入了某一行/列轨道中——否则这个子组件在不同上下文里可能一半时间有效、一半时间失效。
subgridgrid-template-columnsgrid-template-rowsdisplay: grid; grid-template-columns: repeat(4, 1fr);display: grid; grid-column: subgrid;grid-areagrid-columngrid-rowgrid-column: 1 / -1grid-areagrid-template-columnsgrid-auto-columnsgrid-template-areassubgridgrid-columngrid-rowgrid-template-columnsgrid-template-columns: subgridgrid-column: subgridlabelinputgrid-template-columnsgrid-column: subgridform {
display: grid;
grid-template-columns: 120px 1fr; /* 显式定义 */
}
.card {
display: grid;
grid-column: 1 / -1; /* 先占满整行 */
}
.card > * {
grid-column: subgrid; /* 复用 form 的两列轨道 */
}.cardgrid-column: 1 / -1subgridsubgridsubgridgrid-column: subgrid@supports (grid-column: subgrid)display: gridsubgridgrid-gapgapgapsubgridgrid-template-areasgrid-column: subgridgrid-column: subgriddisplay: gridsubgridsubgriddisplay: grid