12-principles-of-animation

12 Principles of Animation

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "12-principles-of-animation" with this command: npx skills add raphaelsalaja/userinterface-wiki/raphaelsalaja-userinterface-wiki-12-principles-of-animation

12 Principles of Animation

Review animation code for compliance with Disney's 12 principles adapted for web interfaces.

How It Works

  • Read the specified files (or prompt user for files/pattern)

  • Check against all rules below

  • Output findings in file:line format

Rule Categories

Priority Category Prefix

1 Timing timing-

2 Easing easing-

3 Physics physics-

4 Staging staging-

Rules

Timing Rules

timing-under-300ms

User-initiated animations must complete within 300ms.

Fail:

.button { transition: transform 400ms; }

Pass:

.button { transition: transform 200ms; }

timing-consistent

Similar elements must use identical timing values.

Fail:

.button-primary { transition: 200ms; } .button-secondary { transition: 150ms; }

Pass:

.button-primary { transition: 200ms; } .button-secondary { transition: 200ms; }

timing-no-entrance-context-menu

Context menus should not animate on entrance (exit only).

Fail:

<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} />

Pass:

<motion.div exit={{ opacity: 0 }} />

Easing Rules

easing-entrance-ease-out

Entrances must use ease-out (arrive fast, settle gently).

Fail:

.modal-enter { animation-timing-function: ease-in; }

Pass:

.modal-enter { animation-timing-function: ease-out; }

easing-exit-ease-in

Exits must use ease-in (build momentum before departure).

Fail:

.modal-exit { animation-timing-function: ease-out; }

Pass:

.modal-exit { animation-timing-function: ease-in; }

easing-no-linear-motion

Linear easing should only be used for progress indicators, not motion.

Fail:

.card { transition: transform 200ms linear; }

Pass:

.progress-bar { transition: width 100ms linear; }

easing-natural-decay

Use exponential ramps, not linear, for natural decay.

Fail:

gain.gain.linearRampToValueAtTime(0, t + 0.05);

Pass:

gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);

Physics Rules

physics-active-state

Interactive elements must have active/pressed state with scale transform.

Fail:

.button:hover { background: var(--gray-3); } /* Missing :active state */

Pass:

.button:active { transform: scale(0.98); }

physics-subtle-deformation

Squash/stretch deformation must be subtle (0.95-1.05 range).

Fail:

<motion.div whileTap={{ scale: 0.8 }} />

Pass:

<motion.div whileTap={{ scale: 0.98 }} />

physics-spring-for-overshoot

Use springs (not easing) when overshoot-and-settle is needed.

Fail:

<motion.div transition={{ duration: 0.3, ease: "easeOut" }} /> // When element should bounce/settle

Pass:

<motion.div transition={{ type: "spring", stiffness: 500, damping: 30 }} />

physics-no-excessive-stagger

Stagger delays must not exceed 50ms per item.

Fail:

transition={{ staggerChildren: 0.15 }}

Pass:

transition={{ staggerChildren: 0.03 }}

Staging Rules

staging-one-focal-point

Only one element should animate prominently at a time.

Fail:

// Multiple elements with competing entrance animations <motion.div animate={{ scale: 1.1 }} /> <motion.div animate={{ scale: 1.1 }} />

staging-dim-background

Modal/dialog backgrounds should dim to direct focus.

Fail:

.overlay { background: transparent; }

Pass:

.overlay { background: var(--black-a6); }

staging-z-index-hierarchy

Animated elements must respect z-index layering.

Fail:

.tooltip { /* No z-index, may render behind other elements */ }

Pass:

.tooltip { z-index: 50; }

Output Format

When reviewing files, output findings as:

file:line - [rule-id] description of issue

Example: components/modal/index.tsx:45 - [timing-under-300ms] Exit animation 400ms exceeds 300ms limit components/button/styles.module.css:12 - [physics-active-state] Missing :active transform

Summary Table

After findings, output a summary:

Rule Count Severity

timing-under-300ms

2 HIGH

physics-active-state

3 MEDIUM

easing-entrance-ease-out

1 MEDIUM

References

  • The Illusion of Life: Disney Animation

  • Apple WWDC23: Animate with Springs

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

userinterface-wiki

No summary provided by upstream source.

Repository SourceNeeds Review
General

Gejun Math Coach

葛军高考数学AI辅导系统。克隆葛军老师的苏格拉底式启发教学风格, 通过追问引导学生自主发现答案,而非直接给答案。 支持7种场景:拆解/解题/多解/变式/一解多题/错题诊断/苏格拉底引导。 每道题完成后自动触发葛军原版"反思三问"闭环,引导学生做出答案并点评总结。 内置GO-ON策略体系(Op/Ob/N/G),赋能...

Registry SourceRecently Updated
General

童锦程视角

童锦程视角:以"深情祖师爷"、直播情感内容创作者的思维框架看待人际关系、社会动态与个人成长。 素材来源:9个一手视频字幕(直播/约会vlog/搭讪解析),约20万字。 核心模型:5个。决策启发式:9条。 触发词:「童锦程」「深情祖师爷」「用童锦程的方式」「从童锦程视角」「景辰怎么看」 局限:素材以情感/人际内容为...

Registry SourceRecently Updated
General

飞书 Markdown 文档发布器,完美支持支持图片、表格

将 Markdown 文件发布为飞书(Feishu/Lark)在线文档。 支持完整的 Markdown 语法,包括标题、段落、表格、有序/无序列表、 待办事项、分隔线、加粗/斜体等富文本样式。 当用户需要将本地 Markdown 文件同步或发布到飞书文档时使用。

Registry SourceRecently Updated