Overshoot / anticipation
Motion that winds up before it launches and sails slightly past its target before settling. The trick that makes UI feel alive.
See it
What it is
Two halves of the same idea. Anticipation is one of Disney's twelve principles of animation: the small move in the opposite direction before the real one, a card dipping 2px down before it lifts, a drawer nudging closed before it flies open. Overshoot is not on that list under its own name, but it is the physics the follow-through and settle principles describe: the element sails past its final value and comes back, which is what real mass does when it stops.
You get overshoot for free from a spring (low damping, and it naturally passes the target) or explicitly from back easing, a cubic-bezier whose control point goes outside the 0 to 1 range, like cubic-bezier(0.34, 1.56, 0.64, 1). Anticipation needs authoring: a keyframe at roughly 15 percent that moves the wrong way. Reach for both on things that should feel physical, like popovers, toggles, buttons, and drag-release.
Gotcha: overshoot on anything large or text-heavy reads as a rendering bug, not personality. Keep it to transform and small elements, cap the overshoot around 3 to 8 percent, and never overshoot a property that has no meaningful 'past' (opacity above 1, a color, a clipped panel edge). Anticipation also costs perceived latency, so skip it on anything that responds to a direct tap.
Ask AI for it
Give this button's press-and-open animation anticipation and overshoot. On press, scale down to 0.96 over 90ms (ease-out) as the wind-up. On open, animate the panel from scale 0.92 up past 1 and back to 1.0 with a spring (stiffness 380, damping around 28, mass 1) so it overshoots by roughly 4 percent and settles once, with no second bounce. If the library exposes visual-duration and bounce controls instead of raw stiffness and damping, use those and target the result directly rather than guessing at physics numbers. Animate transform and opacity only, set transform-origin to the button, keep the whole thing under 400ms, and fall back to a plain 150ms fade under prefers-reduced-motion.