emilkowal-animations

Emil Kowalski Animation Best Practices

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 "emilkowal-animations" with this command: npx skills add blockmatic/basilic/blockmatic-basilic-emilkowal-animations

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

  1. 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

  1. 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

  1. 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

  1. 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

  1. 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

  1. 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

Category Example References

Easing ease-context-matters, ease-ios-drawer

Timing timing-300ms-max, timing-drawer-500ms

Props & Transform props-transform-opacity, transform-scale-097

Interaction & Polish interact-interruptible, polish-reduced-motion

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

typebox + fastify

No summary provided by upstream source.

Repository SourceNeeds Review
General

ai sdk v6 ui

No summary provided by upstream source.

Repository SourceNeeds Review
General

ai sdk v6 core

No summary provided by upstream source.

Repository SourceNeeds Review
General

vercel-react-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review