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
Implementation depth
Elastic text should use transform-only motion so the words bounce without pushing surrounding layout. Custom cubic-bezier curves can imply spring behavior without a JavaScript physics loop.
The overshoot is the taste decision. Too much rebound feels playful but can hurt readability, especially in product UI. Reduced motion should remove the bounce while preserving the final emphasis or staggered order.