Mastering Motion Design in UI
Bhavana
UI/UX Designer
ingredient that separates good interfaces from exceptional ones. When done right, animation feels invisible—it just makes the experience feel more natural and intuitive. In this guide, I’ll share the principles I’ve learned after years of crafting motion for digital products.
Why Motion Matters
Animation isn’t decoration—it’s communication. Well-designed motion serves functional purposes that improve usability:
Our brains are wired to notice movement. Motion draws attention, shows causality, and helps us understand spatial relationships in interfaces.
The 12 Principles (Simplified for UI)
Disney’s 12 principles of animation translate beautifully to interface design. Here are the most relevant ones:
- Easing — Never use linear timing. Ease-out for entrances, ease-in for exits
- Anticipation — Prepare users for what's about to happen with subtle cues
- Follow-through — Let elements settle naturally after the main action
- Secondary Action — Support the main action with complementary motion
The most impactful change you can make? Replace all linear
transitions with ease-out or a custom spring. Instant improvement.
Timing Guidelines
Getting duration right is crucial. Too fast feels jarring, too slow feels sluggish.
| Element Type | Recommended Duration | Easing |
|---|---|---|
| Micro-interactions | 100-200ms | Ease-out |
| Page transitions | 300-400ms | Ease-in-out |
| Modal overlays | 200-300ms | Ease-out |
| List items | 150-250ms | Ease-out (staggered) |
| Loading states | 800-1200ms | Linear loop |
Respect reduced motion preferences! Always check prefers-reduced-motion
and provide static alternatives for users who need them.
Easing Functions I Use
The right easing curve makes all the difference. Here are my go-to options:
Custom Easing Curves
// My favorite easing functions
const easings = {
// Natural spring - great for entrances
spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
// Smooth deceleration - perfect for most UI
smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',
// Snappy response - for micro-interactions
snappy: 'cubic-bezier(0.16, 1, 0.3, 1)',
// Gentle ease - for subtle movements
gentle: 'cubic-bezier(0.25, 0.1, 0.25, 1)',
}; Practical Examples
Button Hover States
A great button hover has three layers of motion:
- Background color transition (150ms ease-out)
- Scale transform (100ms spring)
- Shadow elevation (200ms ease-out)
.button {
transition:
background-color 150ms ease-out,
transform 100ms cubic-bezier(0.34, 1.56, 0.64, 1),
box-shadow 200ms ease-out;
}
.button:hover {
transform: translateY(-2px) scale(1.02);
box-shadow: 0 10px 20px -10px rgba(0, 0, 0, 0.3);
} Page Transitions
For page transitions, I recommend using Astro’s View Transitions or Framer Motion:
::view-transition-old(root),
::view-transition-new(root) {
animation-duration: 0.4s;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
} Don’t animate everything. The power of motion comes from restraint. Use it purposefully to guide attention and confirm actions.
Tools & Resources
Framer Motion
Production-ready motion library for React with gesture support.
Easings.co
Visual easing function explorer and CSS generator.
Material Motion
Google's comprehensive motion design guidelines.
Key Takeaways
“Animation is not about making things move. It’s about making things feel alive.”
Motion design is a skill that develops with practice. Start with these principles:
- Always use easing—linear motion feels robotic
- Keep durations under 400ms for most UI elements
- Respect prefers-reduced-motion for accessibility
- Use motion to show causality and spatial relationships
- Less is more—purposeful animation over decorative
Try auditing your current project’s animations. Replace one linear transition with a spring curve today. Small changes, big impact!