现代 CSS 布局:Grid、Subgrid 与 masonry
从 Grid 的二维布局,到 Subgrid 的嵌套对齐,再到原生 masonry 瀑布流,梳理现代 CSS 布局能力。
CSS 布局的演进,是把「过去需要 JS 或 hack 才能实现」的效果逐步变成声明式能力。本文聚焦 Grid 家族的三项关键能力。
Grid:二维布局的基石
Grid 让「行列同时布局」成为可能,grid-template-columns 配合 fr 单位能优雅地分配空间:
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
auto-fill + minmax 能实现自适应的卡片网格,无需媒体查询。
Subgrid:让嵌套对齐
Grid 的痛点是嵌套网格无法与父网格对齐。Subgrid 让子元素继承父网格的轨道:
.card {
display: grid;
grid-template-rows: subgrid; /* 继承父级行轨道 */
}
这样卡片里的标题、内容、按钮能跨卡片对齐,是设计系统里梦寐以求的能力。
原生 Masonry 瀑布流
瀑布流布局(Pinterest 式)过去要靠 JS 计算。CSS 正在提供原生的 masonry 能力:
.masonry {
display: grid;
grid-template-rows: masonry;
}
虽然规范仍在演进、浏览器支持渐进推进,但方向已明确:瀑布流终将成为纯 CSS 能力。
实践建议
- 首选 Grid 做整体布局,Flexbox 做单轴对齐;
- 用 Subgrid 解决卡片对齐的经典痛点;
- 对瀑布流,先用
columns或 JS 方案,关注原生支持进展。
结语
现代 CSS 布局已足够强大,强大到许多 JS 布局库失去了存在的必要。先查查 CSS 能不能做,再决定是否引入脚本。