Principles of motion design
Last updated
Nov 8, 2025
When to add animation
leverage metaphors
convey information: the app is working hard to process information, elements have been move from one place to another, something is very important
connect states — link actions to consequences. a state change is already happening and there’s a way to link them together that makes the moment a little special
“Good design is suggestive” https://paulgraham.com/taste.html
it’s not enough to solve the problem — you should solve the problem in a way that the end user loves to use the end product (see stock for companies compared to time invested in design)
When not to add animation
Very frequent interactions.
Adding any motion to this will also add friction to the interaction and could make it feel slower than it actually is
Examples: Keyboard initiated actions, Hovering long lists in a frequently used menu or table
Great animations are fast
Great animations are often fast
Speed conveys they system is working hard to do what you want it to do
As a general rule, keep it under 250-300ms (make thoughtful exceptions to this)
Elements that may influence duration of an animation:
Frequency of use: ⬆️ Frequency, ⬇️ Duration
Size: ⬆️ Size, ⬆️ Duration
Easing: ⬇️ Perceptual speed, ⬆️ Duration
Performance
transformandopacityare most performant elements to animate on the web (triggers composite)padding or margin triggers all 3 rendering steps : ( (layout, paint, composite)
Keep in mind, even animations that are technically more performant can feel as if they slow down the experience (see When not to add animation)
Learn from natural motion
Great animation mirrors natural motion (preserving context)
Spatial consistency, what comes in from the right exits to the right, unless it’s going somewhere
When objects transition from an initial to final state, hint at the transition thru gesture/animation
Pay attention to real world motion. What would a motion curve look like for sliding paper across a desk? A car starting forward, then stopping?
All animations shouldn’t start/stop at exactly the same time. Differences in times mirror friction in the real world
Easing
Easing is the main ingredient for influencing how animations feel
The perception of speed can be more important than the actual speed (trust, satisfaction, engagement)
Don’t be lazy. Create your own ease functions with the proper strength.
Ease in and out
No sharp corners when starting and ending at rest, more natural than linear
Needs a specific velocity, not well suited to touch interactions
An element that is already on the screen and is changing position: ease-in-out (car accelerating and decelerating)
Ease out
Starts fast and smooths to a top at the end
Snappy or enter/exit animations can often default to some
ease-out
Ease in
Starts slow, then picks up speed
In most cases, it likely makes sense to avoid
ease-insince it starts slow and may feel sluggish
Ease
By contrast, (default)
easecan feel elegant, collected, for simple hover effects (background color, text color, etc.)
Linear
Abrupt change in velocity
Can be useful in some places, like repeating spinner
Be cautious about using it
Use for constant animations, like a marquee
Spring
Continuous position and velocity when starting and ending at rest
Springs can start with any velocity and still feel natural, better suited to touch interactions
Spring doesn’t necessarily mean it needs to bounce. Objects attached to springs start faster and end slower
How springs work:
Mass of object
Stiffness of attached spring
Damping, or how much friction is applied to the object
Designing animations
Find animations you like. Try to recreate them from scratch if you can.
What makes them great?
What would ruin it?
Have patience. Review again the next day and see how it feels.
Resources
Easing Graphs — Cubic and spring animations with copy/paste code
Easing Wizard — Easing playground with copy/paste to CSS and Tailwind
Juice — A post by Brad Woods breaking down non-essential feedback that enhances experience.
Motion & Playfulness — Great presentation by Benjamin De Cock about animations on the web.
Family Values — A post on how the Family app was built. Contains lots of animation details.
Designing Fluid Interfaces — X. Learn how to design with gestures and motion that feel intuitive and natural, making your app a delight to use.
Animate with Springs — WWDC23’s overview of ease, linear, and spring animations and some of the math behind them
Great Animations — Emil Kowalski on what makes an animation feel great.
Design Spells — Curation of design details that feel like magic
Inline Layout Switch Ideas — Two ideas for animating images from an inline layout to a column or grid-based one.
Inside Framer’s Magic Motion — A guide on recreating framer's magical layout animations.
Partial Keyframes — Creating dynamic, composable CSS keyframe animations
The Magic of Clip Path — An introduction to animating the clip-path property.