12

Follow-Through

Secondary motion after the primary stops.

When a coat-tail keeps moving after the body stops, that is follow-through. The primary action ends; a secondary one settles. In UI the secondary is usually a soft overshoot — the drawer goes a few pixels past its rest, then eases back.

Open both panels.

The left drawer stops exactly on its target. Correct by the numbers, dead by feel. The right one uses a spring with light damping: it overshoots, then settles. That settle is the follow-through.

Do not bounce the whole UI

Overshoot works on things that arrive: sheets, toasts, list inserts. It fails on things that track: scrubbers, cursor-following handles, anything the user is still dragging. If the finger is down, the motion belongs to them — do not add a flourish on top.

Keep the overshoot small. A few pixels, or a spring with damping around 18 and stiffness around 380, is plenty. Past that it becomes a rubber-band effect people notice instead of feel.

Usage

import { motion } from "motion/react";

<motion.div
    animate={{ y: open ? 0 : "110%" }}
    transition={{
        type: "spring",
        stiffness: 380,
        damping: 18,
        mass: 0.85,
    }}
/>
/* Overshoot past 1.0, then settle */
.drawer {
    transition: transform 480ms cubic-bezier(0.22, 1.4, 0.36, 1);
}

.drawer[data-open="false"] {
    transform: translateY(110%);
}

.drawer[data-open="true"] {
    transform: translateY(0);
}

A cubic-bezier whose Y values go above 1 creates overshoot in pure CSS. Springs are easier to tune by feel; pick whichever your stack already uses.