用途:为按钮、链接、卡片等界面元素设计悬停、聚焦、按压反馈,并编排弹窗、提示、列表等入场与退场动画。核心围绕四个原语:显式缓动曲线、仅合成器属性(transform、opacity、filter)、prefers-reduced-motion 降级、以及 @starting-style 配合 transition-behavior: allow-discrete 实现离散属性过渡。
主要能力:提供时长令牌(--motion-instant 100ms 至 --motion-slow 300ms,避免超过 400ms)与缓动曲线(Material 标准 cubic-bezier(0.2, 0, 0, 1)、平滑弹出 cubic-bezier(0.16, 1, 0.3, 1)、linear、带过冲的弹簧近似)。给出决策树:标准反馈用 Material 标准,入场用平滑弹出,机械式固定距离用 linear,俏皮效果用 @keyframes 过冲但禁用于破坏性操作。交错动画用 transition-delay: calc(var(--index) * 50ms),总时长控制在约 400ms 内。
使用方式:以 CSS 为主,框架无关。示例模式包括按钮按压(:active 时 scale(0.97))、卡片悬停配合 :has() 父级响应、交错列表入场(加 .is-revealed 触发,可用 IntersectionObserver)、display: none 到可见的过渡(@starting-style 必须写在目标规则之后)、悬停与 :focus-visible 成对出现、OKLCH 颜色动画。JS 检测用 window.matchMedia('(prefers-reduced-motion: reduce)').matches。
适用场景:需要精细动效反馈的 Web 界面组件。
限制:不涵盖滚动驱动动画与 View Transitions API、GPU 性能规则、Web Animations API 及 Framer Motion、GSAP 等框架动画库。硬性规则要求:禁用裸 ease 关键字与 transition: all,不动画布局属性,必须提供 reduced-motion 覆盖,悬停样式须有 :focus-visible 对等,破坏性操作禁用弹簧缓动。