惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
S
SegmentFault 最新的问题
博客园 - 叶小钗
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
U
Unit 42
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
CSS终于能做瀑布流了!三行代码搞定,告别JavaScript布局 - 少...
2026-01-14 · via 少数派

大家好,我是 Immerse,一名独立开发者、内容创作者、AGI 实践者。

关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)

个人网站:https://yaolifeng.com 也同步更新。

转载请在文章开头注明出处和版权信息。

我会在这里分享关于编程独立开发AI干货开源个人思考等内容。

如果本文对您有所帮助,欢迎动动小手指一键三连(点赞评论转发),给我一些支持和鼓励,谢谢!


之前做瀑布流布局,要么用 Masonry.js 这种库,要么自己写一堆 JavaScript 计算位置。

现在好了,CSS Grid Lanes 来了,三行代码就搞定。

Safari 技术预览版已经支持了,你现在就能试。

三行代码实现瀑布流

看最简单的用法。

.container {
    display: grid-lanes;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 16px;
}

就这样。

第一行设置 display: grid-lanes,告诉浏览器用 Grid Lanes 布局。

第二行定义列,至少 250px 宽,自动填充所有可用空间。浏览器会根据屏幕宽度决定显示几列。

第三行设置间距,列与列之间、卡片与卡片之间都是 16px。

不用写 JavaScript,不用算高度,不用考虑响应式。浏览器全帮你搞定了。

原理是什么?

把它想象成堵车的高速公路。

每辆车都想往前挤,哪条车道空就往哪条钻。每个新卡片也一样,浏览器会把它放在最靠上的位置。

这样布局出来的效果和 Masonry.js 一模一样,但性能好太多了。

如果你要做无限滚动加载更多内容,也不用 JavaScript 控制布局了。滚到底部加载新数据,浏览器自动把新卡片摆好。

列宽可以不一样

因为底层用的是 CSS Grid,你可以做各种花样。

比如奇数列窄,偶数列宽,最后一列始终是窄的:

.container {
    display: grid-lanes;
    grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr) minmax(16rem, 2fr)) minmax(8rem, 1fr);
}

这样布局出来就有节奏感了,不会显得太死板。

卡片可以跨列

既然是 Grid,那肯定能跨列。

article {
    grid-column: span 1;
}

article:nth-child(1) {
    grid-column: span 4;
}

article:nth-child(2),
article:nth-child(3) {
    grid-column: span 2;
}

第一张卡片占 4 列做头图,第 2 到第 3 张占 2 列做次要内容,其他的占 1 列。

这种布局以前只能用 JavaScript 计算,现在纯 CSS 就行。

报纸那种复杂版式也能做出来了。

固定位置也可以

你还能指定某个元素放在特定位置。

比如把 header 固定在最右边的两列:

main {
    display: grid-lanes;
    grid-template-columns: repeat(auto-fill, minmax(24ch, 1fr));
}

header {
    grid-column: -3 / -1;
}

不管屏幕多宽,header 都会出现在右边。其他内容该怎么排怎么排。

横向布局也能做

瀑布流是竖着流,Grid Lanes 也能横着流。

竖着流用 grid-template-columns 定义列:

.container {
    display: grid-lanes;
    grid-template-columns: 1fr 1fr 1fr 1fr;
}

横着流就用 grid-template-rows 定义行:

.container {
    display: grid-lanes;
    grid-template-rows: 1fr 1fr 1fr;
}

浏览器会根据你定义的是列还是行,自动判断流的方向。

不用额外设置什么属性,它自己就知道。

容错度控制

有个新概念叫容错度。

假设第一列的卡片高度是 100px,第四列是 99px。下一张卡片应该放哪?

如果追求绝对精确,应该放第四列,因为它矮 1px。

但这 1px 根本看不出来,而且会导致卡片顺序很乱。用户 Tab 切换时会跳来跳去。

所以 Grid Lanes 有个默认容错度 1em。只有高度差超过 1em,浏览器才会认为它们不一样。

小于 1em 的差异会被忽略,卡片会更倾向于从左到右排列。

你可以调整这个值:

.container {
    item-tolerance: 2em;
}

设大一点,布局更规整,但可能浪费空间。设小一点,空间利用率高,但顺序会更乱。

根据你的内容大小和内容差异来调。

注意这个属性名字可能还会改,正式发布前留意一下。

现在就能试

Safari 技术预览版 234 已经支持了。

你可以下载来试试,官方 Demo 网站也更新了新语法。

除了图片瀑布流,还有其他用法。

比如做 Mega Menu 的底部链接区域。每组链接高度不同,用 Grid Lanes 排起来非常整齐:

.container {
    display: grid-lanes;
    grid-template-columns: repeat(auto-fill, minmax(max-content, 24ch));
    column-gap: 4lh;
}

各组链接紧密排列,不会浪费空间。

接下来呢

CSS 工作组还有几个细节在讨论,但整体语法已经确定了。

现在可以学起来,可以做 Demo 玩玩,可以给反馈。

WebKit 团队从 2022 年中开始做这个功能,现在终于能用了。

我估计其他浏览器也会很快跟进,毕竟这需求太常见了。

以后做瀑布流,再也不用引 JavaScript 库了。

参考资料: