Carousel & Slider Animation Principles
Apply Disney's 12 principles to carousels and sliders for smooth, intuitive navigation.
Principles Applied to Carousels
- Squash & Stretch
Slides can slightly compress in scroll direction during fast swipes. Expands perception of speed and momentum.
- Anticipation
Before slide change, current slide can shift 5-10px in direction of navigation. Button can depress before triggering.
- Staging
Current/active slide should be prominently displayed: larger, centered, more opaque. Adjacent slides can be dimmed or scaled down.
- Straight Ahead & Pose to Pose
Use pose-to-pose: define exact positions for each slide. Snap points should be clear and predictable.
- Follow Through & Overlapping Action
After snap, slide can overshoot slightly and settle back. Content within slide (text, buttons) lags behind container movement.
- Ease In & Ease Out
Swipe release: ease-out (momentum slowdown). Button navigation: ease-in-out . cubic-bezier(0.25, 0.1, 0.25, 1) for smooth slides.
- Arcs
3D carousels should rotate slides along curved paths. Coverflow effects follow arc naturally. Even flat carousels can have subtle Y movement.
- Secondary Action
While slide moves (primary), pagination updates (secondary), adjacent slides scale/fade (tertiary), progress bar moves (quaternary).
- Timing
-
Slide transition: 300-500ms
-
Swipe momentum: 200-400ms
-
Pagination dot: 150ms
-
Autoplay interval: 4000-6000ms
-
Pause on hover: immediate
-
Adjacent slide scale: 250ms
- Exaggeration
Hero carousels can use more dramatic transitions. Product carousels should be smoother, less distracting. Scale to context.
- Solid Drawing
Maintain consistent slide dimensions. Gaps should stay uniform. Aspect ratios must be preserved during any transforms.
- Appeal
Smooth carousels feel premium. Janky sliders feel cheap. Touch response should feel native. Investment here pays dividends.
CSS Implementation
.carousel-track { display: flex; transition: transform 400ms cubic-bezier(0.25, 0.1, 0.25, 1); }
.carousel-slide { flex-shrink: 0; transition: transform 300ms ease-out, opacity 300ms ease-out; }
.carousel-slide:not(.active) { transform: scale(0.9); opacity: 0.6; }
.pagination-dot { transition: transform 150ms ease-out, background-color 150ms ease-out; }
.pagination-dot.active { transform: scale(1.3); }
/* CSS scroll snap */ .carousel-container { scroll-snap-type: x mandatory; scroll-behavior: smooth; }
.carousel-slide { scroll-snap-align: center; }
Key Properties
-
transform : translateX, scale
-
opacity : inactive slides
-
scroll-snap-type : native snapping
-
scroll-behavior : smooth scrolling
-
transition : slide movements