Accessible Motion Design
Apply Disney's 12 animation principles while ensuring accessibility for users with vestibular disorders, motion sensitivity, and cognitive disabilities.
Quick Reference
| Principle | Accessible Implementation | |-----------|--------------------------| | Squash & Stretch | Opacity/color change instead | | Anticipation | State change indication without motion | | Staging | Focus management, not motion-based | | Straight Ahead / Pose to Pose | Instant state changes | | Follow Through / Overlapping | Eliminated or minimal fade | | Slow In / Slow Out | Instant or very gentle ease | | Arc | Straight or no movement | | Secondary Action | Reduced or eliminated | | Timing | Instant (0ms) or extended duration | | Exaggeration | Removed entirely | | Solid Drawing | Static visual clarity | | Appeal | Clarity over personality |
Core Principle
Animation should enhance understanding, never hinder it. When motion causes harm, provide alternatives that maintain functionality.
Respecting User Preferences
CSS Media Query
/* Default: Full animation */
.element {
transition: transform 300ms ease-out;
}
/* Reduced motion preference */
@media (prefers-reduced-motion: reduce) {
.element {
transition: opacity 200ms ease-out;
/* Or no transition at all */
transition: none;
}
}
JavaScript Detection
const prefersReducedMotion = window.matchMedia(
'(prefers-reduced-motion: reduce)'
).matches;
if (prefersReducedMotion) {
// Use instant transitions or subtle fades
} else {
// Use full animations
}
Principle Adaptations
Squash & Stretch → Replace with opacity or color changes. A button can darken on press instead of compressing. Loading indicators can pulse opacity instead of bouncing.
Anticipation → Use static indicators. Show a loading state immediately rather than animated preparation. Hover states change color instantly rather than scaling.
Staging → Use focus management and visual hierarchy. Scroll to content rather than animated reveals. Static highlighting over motion-based attention.
Motion Types → Instant state changes replace transitions. Toggle switches snap position. Modals appear instantly. Menus show without animation.
Follow Through → Eliminated. Elements reach final state immediately. No settling, bouncing, or overshoot effects.
Easing → Either instant (0ms) or very gentle, extended duration (500ms+) with minimal distance. If using motion, slow and subtle.
Arc/Paths → Straight movement only if any movement. Prefer opacity transitions over positional. No circular or complex motion paths.
Secondary Action → Significantly reduced or eliminated. Single, clear feedback per interaction. No cascading or staggered animations.
Timing → Two approaches: instant (0ms) for snappy feedback, or extended (500ms+) for gentle perception. Avoid 150-400ms range—fast enough to notice, slow enough to trigger symptoms.
Exaggeration → Removed entirely. Literal, proportional visual feedback only. No overshoots, bounces, or dramatic effects.
Solid Drawing → Maintain visual clarity in static states. Design must work without any animation. Strong contrast and clear hierarchy.
Appeal → Appeal through clarity, not personality. Clean, predictable interactions. User confidence in interface stability.
Safe Motion Patterns
Generally Safe
- Opacity fades (keep subtle)
- Color transitions
- Small scale changes (<5%)
- Very slow movement (500ms+)
- Non-repeating animations
Potentially Harmful
- Parallax scrolling
- Background movement
- Zoom animations
- Spinning/rotating elements
- Fast repeated animations
- Large moving areas (>1/4 viewport)
Always Avoid
- Auto-playing video backgrounds
- Infinite animations
- Vestibular-triggering patterns
- Flashing (seizure risk)
- Rapid zoom in/out
WCAG Guidelines
WCAG 2.1 Success Criteria
2.3.3 Animation from Interactions (AAA) Motion triggered by interaction can be disabled unless essential.
2.2.2 Pause, Stop, Hide (A) Moving content lasting >5 seconds must be pausable.
2.3.1 Three Flashes (A) No content flashes more than 3 times per second.
Implementation Checklist
- [ ]
prefers-reduced-motionrespected globally - [ ] All animations have reduced/no-motion alternative
- [ ] No auto-playing motion over 5 seconds
- [ ] User can pause/stop any animation
- [ ] No content flashes more than 3x/second
- [ ] Essential functionality works without animation
- [ ] Focus states clear without motion
- [ ] Loading states work without animation
- [ ] Error states visible without motion
- [ ] Form validation static-friendly
Testing
- Enable reduced motion in OS settings
- Verify all functionality works
- Check all states are clearly communicated
- Ensure no motion remains that should be reduced
- Test with screen reader users
- Validate with vestibular disorder users if possible