Overview
Per-word elastic snap reveal uses bounded cubic-bezier() overshoot to simulate a spring without real physics. The pattern documents where CSS easing curves are honest enough (one bounce, then settle) vs. where you need real spring math (multi-bounce decays, velocity-dependent damping — those want JS).
When to use it
Reach for elastic snaps on word-by-word hero reveals, product callouts, and any short string where one playful bounce per word reads as personality. Skip it for content users read multiple times — the bounce stops being cute by the third re-read. Skip it for forms or controls; a bouncy submit button looks unserious.
How it works
Each word is wrapped in a <span> with transform: translateY(0.5em) and opacity: 0 at rest. A keyframe animates them to translateY(0) + opacity: 1 with an overshoot easing like cubic-bezier(.34, 1.56, .64, 1). The critical magic is the bezier’s second control point (Y > 1) which pushes the value past 100% before settling — that overshoot reads as the spring. Per-word animation-delay creates the stagger. For multi-bounce springs that CSS cannot fake well, switch to Web Animations API with a longer keyframe array.
Production gotchas
Single-bounce CSS overshoots feel honest; multi-bounce decays require either a precise multi-stop keyframe array or a real physics library (e.g. react-spring, Motion One) — do not try to fake multi-bounce with a single cubic-bezier or the curve oscillates unnaturally. The overshoot pushes content vertically past adjacent layout; check that no sibling element gets visually clipped. Per-word spans can leak white-space between siblings on layout engines that strip inline whitespace differently — use display: inline-block + explicit space characters between spans.
Accessibility
Wrap the parent with aria-label holding the full sentence so the per-word spans do not split the announcement. Under prefers-reduced-motion: reduce drop the overshoot keyframe and the per-word delay so the entire phrase appears simultaneously without bounce. Vestibular users find overshoot motion uncomfortable — this is one of the strongest cases for honoring the media query.
References