配了三年动画,每次加个元素都要回头改 nth-child 的 delay——今天 sibling-index() 把这件事彻底原生化了
写过 CSS 动画的人都知道这个坑:给一组卡片做错位进场的 stagger 效果,要用 nth-child(1)、nth-child(2)、nth-child(3)…… 手动写每一条 delay。一旦产品往列表里塞了一个新卡片,所有序号全乱了,你得回头把整个 CSS 改一遍。这个问题拖了三年,今天 sibling-count() 和 sibling-index() 把这件事从浏览器底层原生化了。
它们能做什么
sibling-count() 返回当前元素所在父容器下的「兄弟节点总数」,sibling-index() 返回当前元素是第几个(从 1 开始)。CSS 终于能自己算出来「我在这一堆里排第几」。
实战:5 行 CSS 替换 9 行 nth-child
九宫格场景,每个卡片宽度均分父容器:
.grid {
display: flex;
flex-wrap: wrap;
}
.card {
width: calc(100% / sibling-count());
animation: fade-in calc((sibling-index() - 1) * 80ms) both;
}
@keyframes fade-in {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
不用改 HTML,不用 JS,删掉一个卡片,动画自动重新排。
浏览器支持:August 2026 达 Baseline
sibling-count() 和 sibling-index() 在 Firefox 154(2026-08-18)发布后,正式成为 Baseline Newly Available。三大引擎全覆盖:
- Chrome 138+(2025-06)
- Safari 26.2+(2025-12)
- Firefox 154+(2026-08)
下一个可以动手的地方
如果你现在还在用 nth-child 硬编码序号,找一个列表动画组件,把 nth-child(n) 的 delay 全换成 sibling-index()。实测一个 8 项列表,CSS 从 11 行缩到 5 行,新加元素时再也不用动样式文件。
评论区
0 条评论
登录后可评论。