Every technique in this Animations module so far has been about making animation performant. This lesson is about making it good — the design judgment that separates technically smooth motion from motion that actually communicates and feels right.
1Easing Curves: Matching Perceived Physics
Human perception has a deeply ingrained expectation, built from a lifetime of observing physical objects, that motion accelerates and decelerates — a dropped object speeds up, a car pulling away from a stop starts slow and gains speed, nothing in the physical world instantly snaps to a constant velocity and holds it. linear timing violates this expectation directly, which is exactly why it reads as robotic or artificial even when technically smooth.
ease-out (fast start, gradually slowing to the end) is generally the strongest default for elements entering or responding to user action, since it front-loads the perceived responsiveness while still decelerating naturally into its resting state. ease-in-out suits animations that both start and end 'at rest', like a toggle switching between two stable states.
2Duration Proportional To The Size Of The Change
A useful mental model: duration should roughly track how much visual 'distance' or state change is actually occurring. A small toggle or checkbox flipping state is naturally a quick, snappy motion — something in the 100-200ms range typically feels right. A modal expanding from a small trigger point to fill much of the screen is a substantially larger visual change, and a slightly longer duration (250-400ms) generally reads as more intentional and less jarring than the same ultra-fast timing applied to a tiny UI element.
Using one single fixed duration value across an entire design system, applied uniformly regardless of what's actually animating, is a common motion design mistake — it optimizes for consistency of *code* over consistency of *feel*, when the two aren't the same thing.
3Choreography: Sequencing Multiple Related Elements
When a single interaction triggers multiple elements animating at once — most commonly a modal's backdrop fading in alongside its container scaling up and its content fading in — animating all three with identical timing and zero delay tends to feel flat, like everything is one undifferentiated blob of motion rather than a layered composition.
A small, deliberate stagger — the backdrop starting immediately, the container starting 50ms later, the content starting 100ms after that — creates a sense of depth and hierarchy: the backdrop establishes context first, the container frame follows, and the content settles in last. This mirrors how a physical object entering a scene wouldn't have every part of it move in perfect, robotic unison, and is a small technique (animation-delay per element) with an outsized effect on perceived polish.
4Step-by-Step Breakdown
Technically Correct Isn't The Same As Feeling Right. A perfectly performant, Composite-only, jank-free animation can still feel wrong — too linear, too long, too abrupt. Motion design is the layer of judgment above raw CSS syntax: choosing easing curves, durations, and sequencing that communicate the right thing to a user, not just render smoothly.
Easing: Why linear Feels Robotic. Real-world motion almost never moves at a perfectly constant speed — objects accelerate and decelerate. linear timing produces a mechanical, artificial-feeling motion precisely because it violates that expectation; ease-out (fast start, slow finish) and ease-in-out are the default building blocks for motion that reads as natural rather than robotic.
Why linear Feels Wrong. Why does linear easing tend to feel mechanical or artificial compared to ease-out?
- →linear is always objectively slower than other easing functions
- →Real-world motion almost never moves at a perfectly constant speed, so linear violates that natural, expected pattern
- →It's a rendering inconsistency across different browsers
Duration Should Be Proportional To Distance And Change. A small UI element moving a short distance should animate faster than a large element making a dramatic state change — using the same fixed duration for every animation regardless of how much is actually changing produces motion that feels either too rushed for big changes or unnecessarily sluggish for small ones.
Duration Proportionality. Why might using the exact same 0.3s duration for both a checkbox toggle and a full-screen modal opening feel wrong?
- →It actually wouldn't feel wrong — duration doesn't need to relate to the change size
- →A tiny checkbox change animating for the same duration as a large modal will feel disproportionately slow, while the modal might feel rushed
- →0.3s is always too fast for any UI element regardless of size
Choreography: Sequencing Multiple Elements. When several elements animate together — a modal's backdrop, container, and content — staggering their timing slightly (a small animation-delay per element) rather than moving everything in perfect unison creates a sense of hierarchy and depth that a single simultaneous movement doesn't communicate.
Choreographed Sequencing. What does staggering the animation-delay of several related elements (like a modal's backdrop, container, and content) achieve over animating them all simultaneously?
- →It makes the overall animation complete faster
- →It creates a sense of visual hierarchy and depth that a single simultaneous movement doesn't communicate
- →There's no perceptible difference to users
Motion Design Judgment Developed. You now understand the design judgment layer above raw animation syntax: why easing curves read as natural while linear feels robotic, why duration should scale with the size of the change being animated, and how staggered choreography across multiple elements creates a sense of depth a single simultaneous movement can't.
Choose An Easing Curve. animation-timing-function shapes how an animation accelerates and decelerates.
Level Up 🚀
Advanced cheat sheets, SEO tricks, and interview prep for this topic.
Browser Support
Fully supported.
Fully supported.
Fully supported.
Fully supported.
Accessibility (A11y)
1Well-Designed Motion Should Still Fully Respect prefers-reduced-motion Regardless Of How Polished It Feels
No amount of careful easing or choreography design exempts an animation from needing a meaningfully reduced or disabled variant for users who've indicated that preference — motion quality and motion necessity are separate concerns.
2Choreographed Delays Should Never Meaningfully Delay A User's Ability To Interact With Content
Staggering entrance animations for visual polish is fine, but the total sequence duration should stay short enough that it doesn't feel like it's blocking a user, particularly one relying on keyboard navigation, from reaching interactive content promptly.
SEO Implications
- 1
Well-Designed, Appropriately-Brief Motion Improves Perceived Performance And User Satisfaction Metrics
Motion that feels responsive and intentional (fast easing, proportional duration) contributes to a page feeling fast and polished, which correlates with better engagement metrics even when raw load-time metrics are held constant.
- 2
Excessively Long Or Overly Elaborate Choreographed Animations Can Delay Perceived Interactivity
If a motion sequence is designed for polish but takes too long overall, it can create a perception (or reality) of sluggishness that works against the performance gains covered elsewhere in this module.
Best Practices
Default To ease-out For Entering/Responding Elements And ease-in-out For State Toggles
These two easing choices cover the large majority of common UI animation needs and consistently read as more natural than linear timing.
Scale Animation Duration To The Perceived Size Of The Change, Not A Single Fixed System-Wide Value
A small state change and a large one deserve different durations to both feel appropriately responsive — treating duration as one-size-fits-all optimizes for code consistency at the expense of actual perceived quality.
Frequent Bugs
An interface's animations technically run smoothly but still feel 'off' or unpolished to users.
Check for linear easing (swap to ease-out/ease-in-out) and duration mismatches (a single fixed duration used regardless of how large the actual visual change is).
A modal's entrance animation feels flat and mechanical despite having multiple animated elements.
Add a small, deliberate animation-delay stagger between the backdrop, container, and content instead of animating all three with identical, simultaneous timing.
Real-World Examples
A Choreographed Modal Entrance
A settings modal whose backdrop, frame, and content stagger their entrance slightly, creating a layered, polished feel rather than a flat, simultaneous pop-in.
@keyframes fade-in { from { opacity: 0; } }
@keyframes scale-in { from { transform: scale(0.95); } }
.modal-backdrop { animation: fade-in 0.2s ease-out; }
.modal-container { animation: scale-in 0.25s 0.05s ease-out backwards; }
.modal-content { animation: fade-in 0.2s 0.1s ease-out backwards; }