Home
All articles
FrontendMotionUX

Motion That Doesn't Get in the Way

January 27, 20265 min read

It's easy to add motion to a site. It's hard to add motion that still feels good on the tenth visit and doesn't stutter on a mid-range phone. Most interfaces get this backwards — big, showy transitions that impress once and annoy forever.

Motion has a job

Every animation should answer a question the user already has: Where did that come from? What just changed? Where am I now? If a transition isn't answering one of those, it's decoration — and decoration is the first thing to cut.

  • Enter/exit motion should point to where an element comes from and goes to.
  • Keep durations short — 200-400ms reads as responsive; a second reads as sluggish.
  • Ease out, not linear. Things in the real world decelerate as they arrive.

Respect the machine and the person

The same animation that glides on a laptop can jank on a phone, because the expensive parts — layout, backdrop blur, box-shadow — recompute every frame. Animate transform and opacity; those the GPU handles almost for free. And always honor the user's own preference.

javascript
// Honor reduced-motion and coarse pointers: no parallax, no heavy blur.
const reduced =
  useReducedMotion() || useMediaQuery("(pointer: coarse)");

return (
  <motion.div
    initial={reduced ? false : { opacity: 0, y: 24 }}
    whileInView={{ opacity: 1, y: 0 }}
    transition={{ duration: 0.4, ease: [0.22, 1, 0.36, 1] }}
  />
);
The best motion is the kind users never consciously notice — they just feel that the interface is calm, quick, and in control.

Restraint is the whole craft. A handful of intentional, GPU-friendly transitions will always beat a page that moves for the sake of moving.

Enjoyed this?

Let's talk about building something together.