Smooth Motion

Animations that feel physical

Spring physics, not timing curves. Elements ease in with weight, settle with bounce, and exit with purpose. Every transition at 60fps, GPU-accelerated, reduced-motion aware.

Card Motion States
Idle
Resting state
Hovered
Slight lift + glow
Dragging
Elevated + rotated
Settled
Spring settle

Spring physics

Traditional animations use fixed timing curves — ease-in, ease-out, linear. They feel robotic. Spring physics simulate real mass, tension, and friction. The result: animations that feel alive. A dropdown doesn't slide — it springs. A modal doesn't fade — it settles.

  • motion/react spring system with configurable stiffness, damping, mass
  • Natural overshoot and settle for dropdown menus
  • Momentum-based scroll and swipe gestures
  • Dynamic spring constants adapt to element size
Spring Configuration
Stiffness400
Damping28
Mass1
transition: { type: "spring", stiffness: 400, damping: 28 }
Spring vs. CSS Easing
Spring
Natural overshoot
CSS ease-out
Mechanical curve

Layout animations

When elements reorder, resize, or reflow, they don't teleport. motion/react's layout animation system detects DOM position changes and smoothly interpolates every affected element to its new location. Lists reorder fluidly. Filters reveal results gracefully.

  • Automatic FLIP (First, Last, Invert, Play) animations
  • Smooth reorder when filtering, sorting, or drag-dropping
  • Shared layout animations for modals and expanded views
  • AnimatePresence for enter/exit transitions
  • No manual position calculations required
List Reorder Animation
Before sort
1Content Strategy
2API Docs
3Blog Post
4Tutorial
After sort (A-Z)
1API Docsmoved
2Blog Post
3Content Strategymoved
4Tutorial

Enter & exit transitions

Elements don't just appear and disappear. They enter with scale and opacity, settle into place, and exit with a quick fade. AnimatePresence tracks component lifecycle so exit animations complete before the element is removed from the DOM.

  • Fade + scale from 95% to 100% on mount
  • Exit animations complete before DOM removal
  • Staggered children for list entry effects
  • Direction-aware: slide from the side that makes sense
  • Overlays dim in smoothly with backdrop blur
Transition Stages
Initial
opacity: 0, scale: 0.95
Animate
opacity: 1, scale: 1
Exit
opacity: 0, scale: 0.95
<AnimatePresence>
<motion.div initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }} />
</AnimatePresence>

60fps, guaranteed

Every animation uses GPU-accelerated properties only. Transform, opacity, filter. No layout thrashing. No paint storms. Just smooth composite-layer rendering.

transformGPU
translate, scale, rotate
Composite only
opacityGPU
Fade in/out
Composite only
filterGPU
blur, brightness
Composite only
width/heightCPU
Size changes
Layout + Paint
top/leftCPU
Position changes
Layout + Paint
margin/paddingCPU
Spacing changes
Layout + Paint
60fps
Target frame rate
0
Layout thrashing
<16ms
Frame budget
100%
Reduced motion support

How it feels

Like moving real objects.

Pick up a card — it lifts with weight. Drag it — it follows with a spring lag that says "I'm real." Drop it — it settles with a bounce that says "I landed." Open a dropdown — it doesn't slide, it springs. Close a modal — it doesn't vanish, it contracts. Every micro-interaction tells you: this tool respects your attention.

Frequently asked questions

Your data is incomplete. Fix it.

Define your schema. Import your data. Let AI enrich every record. See quality scores improve in real time. Free to start, no credit card.

Command Palette

Search for a command to run...