Reduced Motion animation-001
Gate every animation behind prefers-reduced-motion. The design system zeros all duration tokens automatically; complex animations (parallax, stagger) need explicit @media overrides.
12 patterns in this category — each with its illustration, what it is, and the fields that matter when you build or review one. Part of the UX pattern catalogue; the raw, agent-readable version is ux-pattern-catalogue/animation-patterns.json.
Gate every animation behind prefers-reduced-motion. The design system zeros all duration tokens automatically; complex animations (parallax, stagger) need explicit @media overrides.
Only animate transform and opacity — the two GPU-composited properties. Animating width, height, top, left, margin, or padding triggers layout recalculation and causes jank.
The simplest entrance/exit — opacity transition from 0 to 1. Use for content reveals, page transitions, and image loading.
Content enters from a screen edge via translateX/Y. Use for panels, drawers, sheets, and mobile navigation.
Element appears by scaling from 0.95 to 1 with an opacity fade. Use for modals, dialogs, popovers, and tooltips.
Expand or collapse a section without animating height (layout-safe). Use for accordions, collapsible panels, and expandable rows.
Subtle scale or lift on hover for buttons, cards, and interactive elements. Creates a sense of direct manipulation.
Scale-down effect on :active state for buttons. Provides tactile confirmation of interaction.
Horizontal shake animation for form fields with invalid input. Always pair with aria-invalid and visible error text — never shake as the only error indicator.
Gradient sweep animation over skeleton placeholders while data loads. Communicates that content is on its way.
Content fades and slides into view as the user scrolls. Use IntersectionObserver with threshold: 0.1 for efficient detection.
List items enter sequentially with increasing delays. Creates a cascade effect for card grids, search results, and feeds.