Sibling Index Playground

交互式体验 CSS sibling-index()sibling-count() 函数,学习如何使用兄弟元素索引创建动态样式效果。

浏览器支持
  • Chrome 138+ · 完全支持
  • Edge 138+ · 完全支持
  • Safari 26.2+ · 完全支持
  • Firefox · 暂不支持

此组件使用 CSS sibling-index()sibling-count() 函数。如使用不支持此功能的浏览器,部分效果可能无法正常显示。

什么是 sibling-index() 和 sibling-count()?

这两个 CSS 函数让你能够基于元素在兄弟元素中的位置和总数来动态计算样式值:

  • sibling-index(): 返回元素在兄弟元素中的索引(从 1 开始)
  • sibling-count(): 返回兄弟元素的总数(包括自身)

通过这两个函数,你可以实现很多以前需要 JavaScript 或手动编写 :nth-child() 选择器才能完成的效果。

示例演示

1. 交错动画 (Stagger Animation)

使用 sibling-index() 为每个元素设置递增的延迟时间,创建波浪式动画效果。Hover 卡片可翻转查看背面,点击「播放动画」重新触发动画。

预览
stagger-animation.demo.tsx
stagger-animation.less
1
2
3
4
5
6
7
8
9
10
11
12
参数配置
ms
deg
💡 原理说明

使用 sibling-index() 为每个卡片计算独立的 transition-delay,实现交错入场效果。结合 @starting-style 定义元素的初始状态(透明度为 0、向下偏移 20px、缩放 0.8、根据索引旋转),配合 transition 属性实现平滑过渡动画。3D 翻转效果通过 perspective + preserve-3d + rotateY(180deg) 实现,Hover 时卡片正反面翻转。


2. 渐变文字效果 (Gradient Text)

结合 oklch() 颜色函数,根据元素索引自动生成渐变色文字和柱状图效果。

预览
gradient-text.demo.tsx
gradient-text.less
S
I
B
L
I
N
G
I
N
D
E
X
M
A
G
I
C
参数配置
💡 原理说明

使用 sibling-index() 为每个字符计算索引值,结合 oklch() 色彩空间,通过 calc((var(--char-index) - 1) * var(--hue-step)) 计算色相值,实现基于位置的渐变色效果。oklch() 相比 hsl() 颜色过渡更自然均匀。文字渐变通过 background-clip: text + -webkit-text-fill-color: transparent 实现。柱状图的高度同样基于 sibling-index() 计算,配合 @starting-style 实现从底部升起的动画效果。


3. 卡牌扇形布局 (Deck of Cards)

使用 sibling-index()sibling-count() 计算每张卡片的旋转角度,实现手札般的扇形排列。删除卡片后,剩余卡片会自动重新计算位置。

预览
deck-of-cards.demo.tsx
deck-of-cards.less
1
CARD #1
2
CARD #2
3
CARD #3
4
CARD #4
5
CARD #5
6
CARD #6
7
CARD #7
Hover 卡片查看删除按钮,点击可删除,观察剩余卡片自动重排
参数配置
deg
💡 原理说明

使用 sibling-index()sibling-count() 计算每张卡片的旋转角度。

公式: (sibling-index() - (sibling-count() + 1) / 2) * 角度

中央卡片旋转 0°,左右对称展开,卡片数量变化时自动重新计算。例如 7 张卡片时:中央位置为第 4 张 = (7+1)/2,第 1 张旋转 -60deg,第 4 张旋转 0deg,第 7 张旋转 60deg。通过设置 transform-origin: center bottom 使卡片以底部中心为旋转轴,实现扇形展开效果。


参考资料