CSS 与布局 / CSS Animation · 能力速览 待审核 22 页

CSS Animation · 能力速览

一组可交互的 CSS 动画能力演示,覆盖从最核心的八个 animation-* 子属性与 animation-composition,到 scroll-driven 与 view-driven 滚动驱动动画、@starting-style、多条动画合成与 offset 运动路径,以及动画事件与 Web Animations API;另有一页讲「怎样才算好动画」的七条设计准则,一页番外盘点 CSS 之外的动画技术 (动图格式、video、Lottie、SMIL、canvas)。每页都能直接查看效果并动手交互,顶部有「暂停全部动画」开关。

只需基础的 CSS 选择器与盒模型知识即可阅读,建议从核心属性一页开始;涉及自定义属性动画的部分,可先看 CSS 自定义属性系列@property 讲解。部分能力 (scroll 与 view timeline、object-view-boxanimation-composition 等) 较新,各自进度并不同步,页内均已标注核对日期,建议用最新 Chromium 内核浏览。

起步 · 把一段动画跑起来

先让动画动起来并能控制: 八个 animation-* 子属性与 @keyframes, 缓动怎么写 (含把弹簧物理烘焙成 linear()), 逐帧雪碧图, 以及 display: none → block 这种离散值也要能过渡。

滚动驱动 · 时间线不再是时间

把动画的进度从时钟换成滚动位置: animation-timeline 接滚动条 (scroll)、接元素进出视口 (view), 以及「滚到某处只触发一次」的 scroll-triggered。

综合应用 · 六个成品

前两组的能力组合成能直接用的东西 —— 轮播、词轮播、字变形、文本撑满宽度、扫光、单值驱动的错开动画。每页都是一个完整效果, 而不是一个属性。

综合应用 · scroll-snap + view()

Scroll-Snap Rotator:「hello ___」滚动轮播

把一段 GSAP 滚动轮播纯 CSS 复刻:position: sticky 钉住、scroll-snap 吸附到正中、居中项用 animation-timeline: view() 点亮。

综合应用 · @counter-style + @property <integer>

Word Rotator:@counter-style 做纯 CSS 词轮播

把一组待轮播的词当成 @counter-style 的符号表,再用一个注册成 <integer> 的索引取第几个词;让索引沿时间轴走,词便逐个翻,全程零 JS。

综合应用 · 逐字 transition + 每字一条 delay

Text Morph:让一个词「变形」成另一个词

月份轮播里字不是整块换掉,而是每个字各自搬家、就地换脸:量出逐字位置、把两串对齐成一组槽位,再各给一条交错的过渡延迟。

综合应用 · view(inline) + scroll-snap

Fit-to-Width:纯 CSS 让文本撑满宽度

view(inline) 反用成在样式层读尺寸比例的工具:entry-crossing 区间的进度恰等于容器宽与文本宽之比,拿它驱动 scale()

综合应用 · background-clip: text + WAAPI

文字扫光:让一条亮带扫过字形

background-clip: text 把渐变灌进字形,再平移 background-position 让亮带扫过文字。含对称亮带渐变与自适应 spread 的设计分析。

综合应用 · @function + sibling-index()

Scrubbable Stagger:单个进度值驱动错开动画

把错开动画的延迟从时间维度改写成进度维度的偏移,整组只由一个标量驱动,因而可任意 scrub:接滑块、接滚动都行。

进阶控制 · 多条动画与 JS 接管

一个元素身上跑多条动画、沿任意路径运动, 以及用 Web Animations API 拿到句柄: 监听事件、seek、暂停、改变速度、平滑启停无限动画。

取舍与延伸 · 性能、a11y 与手感

该用 CSS 还是 JS、怎样尊重「减少动态效果」、什么样的动画算好, 以及 CSS 之外还有哪些做法 (动图 / video / Lottie / SMIL / canvas)。

相关文档 / 链接

📐 规范 / 文档

延伸阅读