CSS 网格是一款非常强大的布局引擎,但在父级网格上创建的行和列轨道只能用于定位网格容器的直接子项。任何作者定义了已命名的网格区域,并且
数据线在
直接子级。借助 subgrid
,可以共享航迹大小、模板和名称
嵌套网格。本文介绍了其工作原理。
在子网格之前,内容通常需要手动调整,以避免出现此类不整齐的布局。
subgrid 之后,可以对齐大小可变的内容。
浏览器支持
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
subgrid 基础知识
下面是一个简单的用例,介绍了 CSS subgrid
的基础知识。网格由两个命名列定义,第一个列的宽度为 20ch
,第二个列是空间 1fr
的“其余部分”。列名称不是必需的,但非常适合用于说明和教育目的。
.grid {
display: grid;
gap: 1rem;
grid-template-columns: [column-1] 20ch [column-2] 1fr;
}
然后,该网格的子级跨越这两列,并设置为网格容器,
并通过将 grid-template-columns
设置为
subgrid
。
.grid > .subgrid {
grid-column: span 2;
display: grid;
grid-template-columns: subgrid; /* 20ch 1fr */
}
<ph type="x-smartling-placeholder">
至此,父网格的列已有效传递到子网格下一级。此 subgrid 现在可以将子网格分配给这两个列中的任何一个。
挑战!重复同一个演示,但针对 grid-template-rows
执行此操作。
共享网页级“宏”网格
设计师通常使用共享网格,在整个设计中绘制线条, 将所需的任何元素与它对齐现在,网络开发者也可以做到了!这与 以及许多其他功能。
通过实现最常见的设计人员网格工作流,
深入了解 subgrid
的功能、工作流程和潜力。
下面是从 Chrome DevTools 中截取的移动页面布局宏网格的屏幕截图。这些线条具有名称,并且有明确的组件放置区域。
以下 CSS 会创建此网格,并为设备布局提供命名行和列。每行和每列都有一个大小。
.device {
display: grid;
grid-template-rows:
[system-status] 3.5rem
[primary-nav] 3rem
[primary-header] 4rem
[main] auto
[footer] 4rem
[system-gestures] 2rem
;
grid-template-columns: [fullbleed-start] 1rem [main-start] auto [main-end] 1rem [fullbleed-end];
}
一些其他样式提供了以下设计。
在此父元素内,包含各种嵌套元素。该设计要求使用完整的
宽度图片。最左边和最右边的列
行名称为 fullbleed-start
和 fullbleed-end
。以这种方式命名网格线
可以让子元素通过展示位置同时对齐每个元素
简写
共 fullbleed
个。您很快就会看到它非常方便。
在使用漂亮的命名行和列创建整体设备布局后,使用
subgrid
,用于将名称良好的行和列传递给嵌套网格布局。这个
那是subgrid
的神奇时刻。设备布局会传递已命名的行和
传递给应用容器,后者随后又将其传递给应用容器的
子女。
.device > .app,
.app > * {
display: grid;
grid: subgrid / subgrid;
/* same as */
grid-template-rows: subgrid;
grid-template-columns: subgrid;
}
CSS subgrid 是一个用于替代网格轨迹列表的值。行和
元素与父项所跨列的列现在是相同的行,
数据列。这会使 .device
网格中的线条名称可用
分配给 .app
的子项,而不是仅应用于 .app
。“.app
”中的元素原为
无法引用在 subgrid 之前由 .device
创建的网格轨迹。
定义完这些内容后,嵌套图片现在可以借助 subgrid
在布局中全页显示。没有负值或技巧,而是一行代码就足以说明“我的布局从 fullbleed-start
延伸到 fullbleed-end
”。
.app > main img {
grid-area: fullbleed;
}
<ph type="x-smartling-placeholder">
就是这样,设计人员使用的宏网格是在 CSS 中实现的。这个 概念可以随着您的需要而扩展和发展。
检查支持情况
通过 CSS 和 subgrid 进行渐进式增强十分熟悉,并且简单明了。
使用 @supports
,并在括号内询问浏览器是否可以理解
subgrid 作为模板列或行的值。以下示例检查
grid-template-columns
属性支持 subgrid
关键字,如果
如果为 true,
@supports (grid-template-columns: subgrid) {
/* safe to enhance to */
}
Devtools
Chrome、Edge、Firefox 和 Safari 都有很棒的 CSS 网格开发者工具,而 Chrome, Edge 和 Firefox 提供了一些特定工具来帮助处理 subgrid。公布 Chrome 他们的工具 115,同时 Firefox 已经使用了一年或更长时间。
子网格标记的运作方式与网格标记类似,但可直观区分哪些网格是子网格,哪些不是。
资源
此列表汇集了 subgrid 文章、演示和总体灵感 入门指导。如果您想了解子电网的下一步举措 祝您有愉快的一天!探索所有这些优质资源!
- MDN
- Rachel Andrew 搭配对齐的字幕
- Rachel Andrew 的 10 个精彩示例
- Rachel Andrew 和包含示例的网站
- Ahmad Shaded 撰写的文章
- Michelle Barker 出席 2022 年 CSS 日活动
- 纸牌
- Chris Coyier 介绍表单
- 使用表单对齐功能的 Faacundo Corradini
- Chris Coyier 使用对齐列表项标记
- Michelle Barker 弹出容器以与父网格对齐
- Miriam Suzanne 展示已命名的线条名称和 subgrid 交互
- Kevin Powell 讲解已命名区域的基础知识
- Kevin Powell 列有一致的清单
- Shannon Moeller 给出了相符的清单
- Kevin Powell,将页面级网格向下传递到组件
- 具有开发者工具叠加层和后备功能的 Elad Shechter
- Aaron Iker 很好地利用了 subgrid 进行基线对齐,采用了很好的排版方式 脚注
- Adam Argyle 文章中的全出血图片