关于 web-motion-design
面向前端设计与开发的动画设计技能,将 Disney 的 12 条动画原则转化为 CSS、JavaScript 和前端框架中的实现建议。涵盖交互动画、时序与性能规则。
主要功能
- 01将动画原则用于 Web 动效
- 02提供 CSS 与 JavaScript 实现模式
- 03给出交互动画时序建议
- 04列出动效性能规则
适用场景
- 01设计按钮按压与悬停动画
- 02制作下拉菜单展开效果
- 03优化界面动效的性能
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill web-motion-design安装后在 Claude Code 中输入/web-motion-design确认已加载。
详细介绍
Web Motion Design
将迪士尼的 12 条动画原则应用于 CSS、JavaScript 和前端框架。
快速参考
| 原则 | Web 实现方式 |
|---|---|
| 挤压与拉伸 | 在交互状态下使用 transform: scale() |
| 预备动作 | 动作开始前稍微反向移动 |
| 演出布局 | 通过动作层级聚焦用户注意力 |
| 连续动作 / 关键帧动作 | JS 逐帧动画 vs CSS 关键帧 |
| 跟随动作 / 重叠动作 | 子元素错开动画、弹性缓动 |
| 慢入 / 慢出 | ease-in-out、cubic-bezier 曲线 |
| 弧线运动 | 使用 motion-path 或贝塞尔曲线平移变换 |
| 次要动作 | 阴影、光晕随主要动作变化 |
| 时间控制 | 时长:微交互 100-200ms,标准 200-400ms |
| 夸张 | 缩放超过 1.0、过冲动画 |
| 扎实绘图 | 保持 transform-origin 一致、使用 3D 透视 |
| 吸引力 | 流畅的 60fps、有目的的动作设计 |
原则应用
挤压与拉伸:按下按钮时使用 scaleY 压缩,悬停时使用 scaleX 拉伸。保持体积不变——如果沿 Y 轴压缩,就稍微扩展 X 轴。
预备动作:展开下拉菜单前,先将其缩小 2-3%。将内容向左滑动前,先向右移动 5px。
演出布局:模态窗口聚焦时调暗背景元素。使用动作引导视线流动——先为重要元素添加动画。
连续动作 vs 关键帧动作:使用 CSS @keyframes 实现可预测、可重复的动画(关键帧动作)。使用 JavaScript/GSAP 实现动态、基于物理的运动(连续动作)。
跟随动作与重叠动作:父元素停止后,子元素应继续完成移动。使用递减的 animation-delay 值,形成自然的错开效果。
慢入 / 慢出:UI 动效切勿使用 linear。标准缓动:cubic-bezier(0.4, 0, 0.2, 1)。进入:cubic-bezier(0, 0, 0.2, 1)。退出:cubic-bezier(0.4, 0, 1, 1)。
弧线运动:自然界中的元素沿弧线而非直线移动。使用 offset-path,或组合使用带有不同缓动效果的 X/Y 轴变换。
次要动作:悬停时按钮阴影扩大并变模糊。按钮缩放时,按钮内的图标旋转。背景粒子随主要元素变化。
时间控制:微交互:100-200ms。标准过渡:200-400ms。复杂序列:400-700ms。页面过渡:300-500ms。
夸张:悬停状态缩放至 1.05-1.1,而非 1.01。错误提示抖动移动 10-20px,而非 2px。让动作足够明显,但不要令人不适。
扎实绘图:保持 transform-origin 一致。使用 perspective 营造 3D 深度。避免相互冲突的变换,以免出现视觉故障。
吸引力:以 60fps 为目标——尽可能仅使用 transform 和 opacity。通过自定义缓动曲线增添微妙的个性。动作应让人感觉自然且有意为之。
代码模式
/* Elastic button with squash/stretch */
.button:active {
transform: scale(0.95, 1.05);
transition: transform 100ms cubic-bezier(0.4, 0, 0.2, 1);
}
/* Anticipation before expansion */
.dropdown-enter {
animation: dropdown-open 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes dropdown-open {
0% { transform: scaleY(0.98); opacity: 0; }
100% { transform: scaleY(1); opacity: 1; }
}
性能规则
- 仅为
transform和opacity添加动画,以启用 GPU 加速 - 谨慎使用
will-change,并在动画结束后移除 - 动画可预测时,优先使用 CSS 而非 JavaScript
- 在低性能设备上进行测试