Web Motion Design

dylantarre/animation-principles/skills/01-by-domain/web-motion-design

by dylantarre83597134ba8fNo license99 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 9 months ago

Use when building CSS animations, JavaScript transitions, React/Vue motion, or any browser-based animation work.

Instructions onlyDesign & Creative
AI-generated overview

Applies Disney's 12 animation principles to CSS, JavaScript and frontend framework motion design.

What it does
This skill provides guidance for building browser-based animations, mapping each of Disney's 12 animation principles to concrete web implementations such as transform scale, easing curves and staggered delays. It supplies reference tables, per-principle application notes, CSS code patterns and performance rules for animating transform and opacity. The deliverable is instructional guidance rather than generated files or scripts.
When to use it
Use it when creating CSS animations, JavaScript transitions, or motion in React and Vue components. It is suited to micro-interactions, dropdowns, page transitions and other UI motion that should feel natural and performant.
Requirements
No scripts or tooling are required; it is instructions only. A frontend project using CSS, JavaScript, React or Vue is the assumed context.

Web Motion Design

Apply Disney's 12 animation principles to CSS, JavaScript, and frontend frameworks.

Quick Reference

PrincipleWeb Implementation
Squash & Stretchtransform: scale() on interaction states
AnticipationSlight reverse movement before action
StagingFocus user attention with motion hierarchy
Straight Ahead / Pose to PoseJS frame-by-frame vs CSS keyframes
Follow Through / OverlappingStaggered child animations, elastic easing
Slow In / Slow Outease-in-out, cubic-bezier curves
Arcmotion-path or bezier translate transforms
Secondary ActionShadows, glows responding to primary motion
TimingDuration: micro 100-200ms, standard 200-400ms
ExaggerationScale beyond 1.0, overshoot animations
Solid DrawingConsistent transform-origin, 3D perspective
AppealSmooth 60fps, purposeful motion design

Principle Applications

Squash & Stretch: Apply scaleY compression on button press, scaleX stretch on hover. Keep volume constant—if you compress Y, expand X slightly.

Anticipation: Before expanding a dropdown, shrink it 2-3% first. Before sliding content left, move it 5px right.

Staging: Dim background elements during modal focus. Use motion to direct eye flow—animate important elements first.

Straight Ahead vs Pose to Pose: Use CSS @keyframes for predictable, repeatable animations (pose to pose). Use JavaScript/GSAP for dynamic, physics-based motion (straight ahead).

Follow Through & Overlapping: Child elements should complete movement after parent stops. Use animation-delay with decreasing values for natural stagger.

Slow In / Slow Out: Never use linear for UI motion. Standard easing: cubic-bezier(0.4, 0, 0.2, 1). Enter: cubic-bezier(0, 0, 0.2, 1). Exit: cubic-bezier(0.4, 0, 1, 1).

Arc: Elements in nature move in arcs, not straight lines. Use offset-path or combine X/Y transforms with different easings.

Secondary Action: Button shadow grows/blurs on hover. Icon inside button rotates while button scales. Background particles respond to primary element.

Timing: Micro-interactions: 100-200ms. Standard transitions: 200-400ms. Complex sequences: 400-700ms. Page transitions: 300-500ms.

Exaggeration: Hover states scale to 1.05-1.1, not 1.01. Error shakes move 10-20px, not 2px. Make motion noticeable but not jarring.

Solid Drawing: Maintain consistent transform-origin. Use perspective for 3D depth. Avoid conflicting transforms that create visual glitches.

Appeal: Target 60fps—use transform and opacity only when possible. Add subtle personality through custom easing curves. Motion should feel intentional.

Code Patterns

css
/* 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; }}

Performance Rules

  1. Animate only transform and opacity for GPU acceleration
  2. Use will-change sparingly and remove after animation
  3. Prefer CSS over JavaScript when animation is predictable
  4. Test on low-powered devices

Source and attribution

Source:dylantarre/animation-principlesinskills/01-by-domain/web-motion-designat commit8359713

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal