关于 accessible-motion
一项将 Disney 的 12 条动画原则用于无障碍设计的技能,面向对运动敏感或有前庭、认知障碍的用户。它提供减少动画伤害的替代方案与检查清单,确保界面在无动画时仍清晰可用。
主要功能
- 0112 条动画原则的无障碍替代方案
- 02减少动态效果的 CSS 与 JavaScript 指引
- 03安全及潜在有害的动态效果模式
- 04WCAG 动态效果准则
- 05实施与测试清单
适用场景
- 01为运动敏感用户设计界面
- 02为减少动态效果偏好提供替代方案
- 03按无障碍检查项审查动画
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill accessible-motion安装后在 Claude Code 中输入/accessible-motion确认已加载。
详细介绍
无障碍动作设计
运用迪士尼的 12 条动画原则,同时确保前庭障碍、动作敏感和认知障碍用户也能无障碍使用。
快速参考
| 原则 | 无障碍实现方式 |
|---|---|
| 挤压与拉伸 | 改用不透明度/颜色变化 |
| 预备动作 | 不依赖动作来指示状态变化 |
| 演出布局 | 管理焦点,而非依赖动作 |
| 直线动画/姿势对姿势 | 即时状态变化 |
| 跟随动作/重叠动作 | 移除或仅使用最短淡入淡出 |
| 慢入/慢出 | 即时变化或非常柔和的缓动 |
| 弧线 | 直线移动或不移动 |
| 次要动作 | 减少或移除 |
| 节奏 | 即时(0ms)或延长时长 |
| 夸张 | 完全移除 |
| 扎实绘图 | 保持静态视觉清晰度 |
| 吸引力 | 清晰度优先于个性 |
核心原则
动画应帮助用户理解,绝不能造成阻碍。如果动作会造成伤害,应提供不影响功能的替代方式。
尊重用户偏好
CSS 媒体查询
/* Default: Full animation */
.element {
transition: transform 300ms ease-out;
}
/* Reduced motion preference */
@media (prefers-reduced-motion: reduce) {
.element {
transition: opacity 200ms ease-out;
/* Or no transition at all */
transition: none;
}
}
JavaScript 检测
const prefersReducedMotion = window.matchMedia(
'(prefers-reduced-motion: reduce)'
).matches;
if (prefersReducedMotion) {
// Use instant transitions or subtle fades
} else {
// Use full animations
}
原则调整
挤压与拉伸 → 改用不透明度或颜色变化。按钮按下时可变暗,而非压缩。加载指示器可改变不透明度来实现脉动,而非上下跳动。
预备动作 → 使用静态指示。立即显示加载状态,而非播放动画来做准备。悬停状态立即改变颜色,而非缩放。
演出布局 → 使用焦点管理和视觉层次。滚动到内容,而非通过动画展示内容。使用静态高亮,而非通过动作吸引注意。
动作类型 → 用即时状态变化取代过渡效果。切换开关立即切换位置。模态框立即出现。菜单立即显示。
跟随动作 → 移除。元素立即到达最终状态。不要使用稳定、弹跳或过冲效果。
缓动 → 使用即时变化(0ms),或非常柔和且时长较长(500ms+)的效果,并尽量缩短移动距离。如果使用动作,应缓慢且轻微。
弧线/路径 → 如果需要移动,只进行直线移动。优先使用不透明度过渡,而非位置变化。不要使用圆周或复杂的移动路径。
次要动作 → 大幅减少或移除。每次交互只提供单一、清晰的反馈。不要使用连续或交错动画。
节奏 → 有两种方式:使用即时变化(0ms)提供迅速反馈,或使用较长时长(500ms+)让变化更柔和。避免使用 150-400ms 的时长——这种速度足以让人察觉,又可能引发症状。
夸张 → 完全移除。只提供字面且合乎比例的视觉反馈。不要使用过冲、弹跳或戏剧性效果。
扎实绘图 → 确保静态状态下的视觉清晰度。设计必须在没有任何动画时也能正常使用。保持强烈对比度和清晰层次。
吸引力 → 通过清晰度而非个性来吸引用户。交互应简洁且可预测,让用户确信界面稳定。
安全的动作模式
通常安全
- 不透明度渐变(保持轻微)
- 颜色过渡
- 小幅度缩放(<5%)
- 非常缓慢的移动(500ms+)
- 不重复的动画
可能有害
- 视差滚动
- 背景移动
- 缩放动画
- 旋转元素
- 快速重复的动画
- 大面积移动(>视口的 1/4)
始终避免
- 自动播放的视频背景
- 无限循环动画
- 会引发前庭不适的模式
- 闪烁(有癫痫风险)
- 快速放大/缩小
WCAG 指南
WCAG 2.1 成功准则
2.3.3 由交互触发的动画(AAA) 除非动作不可或缺,否则应允许禁用由交互触发的动作。
2.2.2 暂停、停止、隐藏(A) 持续时间超过 5 秒的移动内容必须可暂停。
2.3.1 三次闪烁(A) 内容每秒闪烁不得超过 3 次。
实现检查清单
- 全局遵循
prefers-reduced-motion设置 - 所有动画都有减少动态效果或无动态效果的替代方案
- 不自动播放超过 5 秒的动态效果
- 用户可以暂停或停止任何动画
- 内容闪烁频率不超过每秒 3 次
- 无动画时核心功能仍可正常使用
- 无动态效果时焦点状态仍清晰可见
- 无动画时加载状态仍可正常显示
- 无动态效果时错误状态仍清晰可见
- 表单验证适用于静态界面
测试
- 在操作系统设置中启用减少动态效果
- 验证所有功能均可正常使用
- 检查所有状态是否传达清晰
- 确保不再保留需要减少的动态效果
- 与屏幕阅读器用户一起测试
- 如有可能,请眩晕障碍用户参与验证