Astro Animations Skill
Purpose
Provides animation patterns that enhance UX without harming performance or accessibility. All animations must serve a functional purpose and respect user motion preferences.
Core Rules
- Purpose over polish — Every animation should serve UX
- Performance first — Use CSS, avoid JS where possible
- Respect preferences — Honor
prefers-reduced-motion - Subtle over flashy — Enhance, don't distract
- Fast — Animations under 300ms for interactions
- No layout shift — Animations must not cause cumulative layout shift
- Progressive enhancement — UI must work without animations
- Intersection Observer — Use for scroll-based reveals
- View Transitions API — Leverage for page transitions in Astro
- Loading feedback — Always show loading states with skeletons or spinners
Animation Timing
| Type | Duration | Easing | |------|----------|--------| | Micro-interaction | 100-200ms | ease-out | | Reveal/Fade | 200-400ms | ease-out | | Slide | 300-500ms | ease-in-out | | Page transition | 200-300ms | ease-out |
References
- CSS Utilities — Base animation classes and keyframes
- Scroll Animations — Intersection Observer-based reveals
- Micro-Interactions — Button hovers, form focus, success/error animations
- Loading States — Skeleton loaders and shimmer effects
- Page Transitions — View Transitions API implementation
- Stagger Animations — Sequential reveal patterns
- Reduced Motion — Accessibility best practices
Forbidden
- ❌ Animations without
prefers-reduced-motionhandling - ❌ Animations over 500ms for UI feedback
- ❌ Animations that block interaction
- ❌ Gratuitous/decorative-only animations
- ❌ JS animations when CSS works
- ❌ Animations that cause layout shift
- ❌ Auto-playing animations without user control
- ❌ Animations that flash more than 3 times per second
Definition of Done
- [ ] All animations respect reduced motion
- [ ] Interaction animations under 300ms
- [ ] Reveal animations under 500ms
- [ ] No layout shift from animations
- [ ] Loading states have skeleton/spinner
- [ ] Page transitions smooth
- [ ] Focus states animated
- [ ] All animations tested with
prefers-reduced-motion: reduce - [ ] Scroll animations use Intersection Observer
- [ ] No animation blocks user interaction