Skip to content
返回设计中心

动画曲线与时间

感自然的缓动曲线与时长 — 及保持一致的令牌。

视觉设计进阶

为什么

线性缓动感机械;ease-in-out 端感慢。真物体非对称减速。命名缓动令牌(standard、emphasized、exit)使每动画感同产品。

何时使用

任何 3+ 动画转换的应用。即使几个 hover 状态也受益于共享曲线 — 每组件临时 cubic-bezier 感脱节。

如何做

1. standard — 入元素 ease-out(下拉、工具提示):起快、稳 — 感响应", 2. emphasized — 状态变化 ease-in-out(展开/折叠):慢、引注意", 3. exit — 离元素 ease-in(模态关):起慢、离快 — 感被解雇", 4. 时长 — --dur-fast: 150ms(hover)、--dur-standard: 250ms(切换)、--dur-slow: 400ms(页)", 5. spring — 拖/掷(framer-motion spring);CSS 不能真 spring,cubic-bezier 近似", 6. 距离缩放 — 更远距离 = 更长时长;200px 滑 250ms、20px 滑 150ms", 7. 减弱动效 — 这些全经 prefers-reduced-motion 守卫塌缩到 0.01ms

示例

:root { /* 缓动曲线 — 按意图命名,非 bezier 数 */ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1); /* 入:ease-out 向 */ --ease-emphasized: cubic-bezier(0.45, 0, 0.55, 1); /* 状态变化:ease-in-out */ --ease-exit: cubic-bezier(0.4, 0, 1, 1); /* 离:ease-in 向 */ /* 时长 — 按规模命名 */ --dur-fast: 150ms; /* hover、focus */ --dur-standard: 250ms; /* 切换、下拉 */ --dur-slow: 400ms; /* 页转换、模态 */ } /* 用法 — 意图可读 */ .dropdown { transition: opacity var(--dur-standard) var(--ease-standard); } .modal { transition: transform var(--dur-slow) var(--ease-emphasized); } .toast { transition: opacity var(--dur-fast) var(--ease-exit); } /* 距离缩放 — 更长滑、更长时长 */ .slide-200 { transition: transform 250ms var(--ease-standard); } .slide-20 { transition: transform 150ms var(--ease-standard); } /* 减弱动效 — 全塌缩 */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } }

常见问题

  • ⚠处处线性缓动 — 感机械、无重量或动量感
  • ⚠20px hover 和 200px 滑同时长 — 小动感迟、大动感感即时
  • ⚠无减弱动效守卫 — 前庭敏感用户全速受每动画

最佳实践

  • ✓按意图命名曲线(standard/emphasized/exit)— 可读、跨产品一致
  • ✓时长随距离缩放 — 20px hover 150ms、200px 滑 250ms;小动保敏
  • ✓始终含减弱动效守卫 — 每时长塌缩到 0.01ms

常见问题解答