File contents Emil Kowalski Animation Best Practices
Comprehensive animation guide for web interfaces based on Emil Kowalski's teachings, open-source libraries (Sonner, Vaul), and his animations.dev course. Contains 43 rules across 7 categories, prioritized by impact.
When to Apply
Reference these guidelines when:
Adding animations to React components
Choosing easing curves or timing values
Implementing gesture-based interactions (swipe, drag)
Building toast notifications or drawer components
Optimizing animation performance
Ensuring animation accessibility
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Easing Selection
CRITICAL
ease-
2
Timing & Duration
CRITICAL
timing-
3
Property Selection
HIGH
props-
4
Transform Techniques
HIGH
transform-
5
Interaction Patterns
MEDIUM-HIGH
interact-
6
Strategic Animation
MEDIUM
strategy-
7
Accessibility & Polish
MEDIUM
polish-
Quick Reference
1. Easing Selection (CRITICAL)
ease-out-default - Use ease-out as your default easing
ease-custom-curves - Use custom cubic-bezier over built-in CSS
ease-in-out-onscreen - Use ease-in-out for on-screen movement
ease-spring-natural - Use spring animations for natural motion
ease-ios-drawer - Use iOS-style easing for drawer components
ease-context-matters - Match easing to animation context
2. Timing & Duration (CRITICAL)
timing-300ms-max - Keep UI animations under 300ms
timing-faster-better - Faster animations improve perceived performance
timing-asymmetric - Use asymmetric timing for press and release
timing-tooltip-delay - Delay initial tooltips, instant subsequent ones
timing-drawer-500ms - Use 500ms duration for drawer animations
3. Property Selection (HIGH)
props-transform-opacity - Animate only transform and opacity
props-hardware-accelerated - Use hardware-accelerated animations when main thread is busy
props-will-change - Use will-change to prevent 1px shift
props-avoid-css-variables - Avoid CSS variables for drag animations
props-clip-path-performant - Use clip-path for layout-free reveals
4. Transform Techniques (HIGH)
transform-scale-097 - Scale buttons to 0.97 on press
transform-never-scale-zero - Never animate from scale(0)
transform-percentage-translate - Use percentage values for translateY
transform-origin-aware - Make animations origin-aware
transform-scale-children - Scale transforms affect children
transform-3d-preserve - Use preserve-3d for 3D transform effects
5. Interaction Patterns (MEDIUM-HIGH)
interact-interruptible - Make animations interruptible
interact-momentum-dismiss - Use momentum-based dismissal
interact-damping - Damp drag at boundaries
interact-scroll-drag-conflict - Resolve scroll and drag conflicts
interact-snap-points - Implement velocity-aware snap points
interact-friction-upward - Allow upward drag with friction
interact-pointer-capture - Use pointer capture for drag operations
6. Strategic Animation (MEDIUM)
strategy-keyboard-no-animate - Never animate keyboard-initiated actions
strategy-frequency-matters - Consider interaction frequency before animating
strategy-purpose-required - Every animation must have a purpose
strategy-feedback-immediate - Provide immediate feedback on all actions
strategy-marketing-exception - Marketing sites are the exception
7. Accessibility & Polish (MEDIUM)
polish-reduced-motion - Respect prefers-reduced-motion
polish-opacity-fallback - Use opacity as reduced motion fallback
polish-framer-hook - Use useReducedMotion hook in Framer Motion
polish-dont-remove-all - Don't remove all animation for reduced motion
polish-blur-bridge - Use blur to bridge animation states
polish-clip-path-tabs - Use clip-path for tab transitions
polish-toast-stacking - Implement toast stacking with scale and offset
polish-scroll-reveal - Trigger scroll animations at appropriate threshold
polish-hover-gap-fill - Fill gaps between hoverable elements
polish-stagger-children - Stagger child animations for orchestration
Key Values Reference
Value
Usage
cubic-bezier(0.32, 0.72, 0, 1)
iOS-style drawer/sheet animation
scale(0.97)
Button press feedback
scale(0.95)
Minimum enter scale (never scale(0))
200ms ease-out
Standard UI transition
300ms
Maximum duration for UI animations
500ms
Drawer animation duration
0.11 px/ms
Velocity threshold for momentum dismiss
100px
Scroll-reveal viewport threshold
14px
Toast stack offset
Reference Files
File
Description
references/_sections.md
Category definitions and ordering
assets/templates/_template.md
Template for new rules
metadata.json
Version and reference information
1 --- 2 name: emilkowal-animations 3 description: Emil Kowalski Animation Best Practices 4 --- 5 # Emil Kowalski Animation Best Practices 6 7 Comprehensive animation guide for web interfaces based on Emil Kowalski's teachings, open-source libraries (Sonner, Vaul), and his [animations.dev](https://animations.dev) course. Contains 43 rules across 7 categories, prioritized by impact. 8 9 ## When to Apply 10 11 Reference these guidelines when: 12 - Adding animations to React components 13 - Choosing easing curves or timing values 14 - Implementing gesture-based interactions (swipe, drag) 15 - Building toast notifications or drawer components 16 - Optimizing animation performance 17 - Ensuring animation accessibility 18 19 ## Rule Categories by Priority 20 21 | Priority | Category | Impact | Prefix | 22 |----------|----------|--------|--------| 23 | 1 | Easing Selection | CRITICAL | `ease-` | 24 | 2 | Timing & Duration | CRITICAL | `timing-` | 25 | 3 | Property Selection | HIGH | `props-` | 26 | 4 | Transform Techniques | HIGH | `transform-` | 27 | 5 | Interaction Patterns | MEDIUM-HIGH | `interact-` | 28 | 6 | Strategic Animation | MEDIUM | `strategy-` | 29 | 7 | Accessibility & Polish | MEDIUM | `polish-` | 30 31 ## Quick Reference 32 33 ### 1. Easing Selection (CRITICAL) 34 35 - [`ease-out-default`](references/ease-out-default.md) - Use ease-out as your default easing 36 - [`ease-custom-curves`](references/ease-custom-curves.md) - Use custom cubic-bezier over built-in CSS 37 - [`ease-in-out-onscreen`](references/ease-in-out-onscreen.md) - Use ease-in-out for on-screen movement 38 - [`ease-spring-natural`](references/ease-spring-natural.md) - Use spring animations for natural motion 39 - [`ease-ios-drawer`](references/ease-ios-drawer.md) - Use iOS-style easing for drawer components 40 - [`ease-context-matters`](references/ease-context-matters.md) - Match easing to animation context 41 42 ### 2. Timing & Duration (CRITICAL) 43 44 - [`timing-300ms-max`](references/timing-300ms-max.md) - Keep UI animations under 300ms 45 - [`timing-faster-better`](references/timing-faster-better.md) - Faster animations improve perceived performance 46 - [`timing-asymmetric`](references/timing-asymmetric.md) - Use asymmetric timing for press and release 47 - [`timing-tooltip-delay`](references/timing-tooltip-delay.md) - Delay initial tooltips, instant subsequent ones 48 - [`timing-drawer-500ms`](references/timing-drawer-500ms.md) - Use 500ms duration for drawer animations 49 50 ### 3. Property Selection (HIGH) 51 52 - [`props-transform-opacity`](references/props-transform-opacity.md) - Animate only transform and opacity 53 - [`props-hardware-accelerated`](references/props-hardware-accelerated.md) - Use hardware-accelerated animations when main thread is busy 54 - [`props-will-change`](references/props-will-change.md) - Use will-change to prevent 1px shift 55 - [`props-avoid-css-variables`](references/props-avoid-css-variables.md) - Avoid CSS variables for drag animations 56 - [`props-clip-path-performant`](references/props-clip-path-performant.md) - Use clip-path for layout-free reveals 57 58 ### 4. Transform Techniques (HIGH) 59 60 - [`transform-scale-097`](references/transform-scale-097.md) - Scale buttons to 0.97 on press 61 - [`transform-never-scale-zero`](references/transform-never-scale-zero.md) - Never animate from scale(0) 62 - [`transform-percentage-translate`](references/transform-percentage-translate.md) - Use percentage values for translateY 63 - [`transform-origin-aware`](references/transform-origin-aware.md) - Make animations origin-aware 64 - [`transform-scale-children`](references/transform-scale-children.md) - Scale transforms affect children 65 - [`transform-3d-preserve`](references/transform-3d-preserve.md) - Use preserve-3d for 3D transform effects 66 67 ### 5. Interaction Patterns (MEDIUM-HIGH) 68 69 - [`interact-interruptible`](references/interact-interruptible.md) - Make animations interruptible 70 - [`interact-momentum-dismiss`](references/interact-momentum-dismiss.md) - Use momentum-based dismissal 71 - [`interact-damping`](references/interact-damping.md) - Damp drag at boundaries 72 - [`interact-scroll-drag-conflict`](references/interact-scroll-drag-conflict.md) - Resolve scroll and drag conflicts 73 - [`interact-snap-points`](references/interact-snap-points.md) - Implement velocity-aware snap points 74 - [`interact-friction-upward`](references/interact-friction-upward.md) - Allow upward drag with friction 75 - [`interact-pointer-capture`](references/interact-pointer-capture.md) - Use pointer capture for drag operations 76 77 ### 6. Strategic Animation (MEDIUM) 78 79 - [`strategy-keyboard-no-animate`](references/strategy-keyboard-no-animate.md) - Never animate keyboard-initiated actions 80 - [`strategy-frequency-matters`](references/strategy-frequency-matters.md) - Consider interaction frequency before animating 81 - [`strategy-purpose-required`](references/strategy-purpose-required.md) - Every animation must have a purpose 82 - [`strategy-feedback-immediate`](references/strategy-feedback-immediate.md) - Provide immediate feedback on all actions 83 - [`strategy-marketing-exception`](references/strategy-marketing-exception.md) - Marketing sites are the exception 84 85 ### 7. Accessibility & Polish (MEDIUM) 86 87 - [`polish-reduced-motion`](references/polish-reduced-motion.md) - Respect prefers-reduced-motion 88 - [`polish-opacity-fallback`](references/polish-opacity-fallback.md) - Use opacity as reduced motion fallback 89 - [`polish-framer-hook`](references/polish-framer-hook.md) - Use useReducedMotion hook in Framer Motion 90 - [`polish-dont-remove-all`](references/polish-dont-remove-all.md) - Don't remove all animation for reduced motion 91 - [`polish-blur-bridge`](references/polish-blur-bridge.md) - Use blur to bridge animation states 92 - [`polish-clip-path-tabs`](references/polish-clip-path-tabs.md) - Use clip-path for tab transitions 93 - [`polish-toast-stacking`](references/polish-toast-stacking.md) - Implement toast stacking with scale and offset 94 - [`polish-scroll-reveal`](references/polish-scroll-reveal.md) - Trigger scroll animations at appropriate threshold 95 - [`polish-hover-gap-fill`](references/polish-hover-gap-fill.md) - Fill gaps between hoverable elements 96 - [`polish-stagger-children`](references/polish-stagger-children.md) - Stagger child animations for orchestration 97 98 ## Key Values Reference 99 100 | Value | Usage | 101 |-------|-------| 102 | `cubic-bezier(0.32, 0.72, 0, 1)` | iOS-style drawer/sheet animation | 103 | `scale(0.97)` | Button press feedback | 104 | `scale(0.95)` | Minimum enter scale (never scale(0)) | 105 | `200ms ease-out` | Standard UI transition | 106 | `300ms` | Maximum duration for UI animations | 107 | `500ms` | Drawer animation duration | 108 | `0.11 px/ms` | Velocity threshold for momentum dismiss | 109 | `100px` | Scroll-reveal viewport threshold | 110 | `14px` | Toast stack offset | 111 112 ## Reference Files 113 114 | File | Description | 115 |------|-------------| 116 | [references/_sections.md](references/_sections.md) | Category definitions and ordering | 117 | [assets/templates/_template.md](assets/templates/_template.md) | Template for new rules | 118 | [metadata.json](metadata.json) | Version and reference information |
ComeOnOliver/skillshub/tree/main/skills/pproenca/dot-skills/emilkowal-animations commit 174b0689d8
Frequently asked questions How do I install the Emilkowal Animations skill? Run npx skillmds@latest add comeonoliver/emilkowal-animations in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Emilkowal Animations skill do? Emil Kowalski Animation Best Practices It is listed under Coding & Dev Tools on SkillMD.
Is Emilkowal Animations safe to use? This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Emilkowal Animations? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Emilkowal Animations free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Emilkowal Animations? ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.