Elastic / Overshoot
Letting a motion overshoot its target and settle, instead of stopping dead.
Examples
Captured from this page's own interactive demo below.
Overview
Overshoot animation lets a moving element pass slightly beyond its resting position before springing back and settling — like a rubber band or a spring, rather than a rigid stop.
It works because almost nothing in the real world with mass and flexibility stops instantly; things with any give overshoot and oscillate briefly before settling. Ease-in/ease-out alone (which stops exactly at the target) reads as slightly artificial by comparison.
It communicates energy, playfulness, and physical presence — a popup that overshoots a little feels alive; one that eases in and stops dead feels flat and mechanical.
Interactive Demo
Use Cases
Best Practices
Do
- ✓Reserve larger overshoot for elements entering/celebrating (popups, rewards); keep it subtle for frequent UI motion.
- ✓Tune damping so it settles within 2-3 oscillations at most — anything longer reads as loose, not springy.
- ✓Use spring-based animation (mass/stiffness/damping) rather than hand-tuned keyframes when the target can change mid-flight (e.g. drag-and-release).
Don't
- ✕Don't overshoot elements that need to land at an exact, readable position immediately (e.g. a value the player must read precisely).
- ✕Don't use the same spring config for every UI element — a small icon and a full-screen panel shouldn't move identically.
- ✕Don't combine heavy overshoot with heavy squash/stretch on the same object — pick one dominant technique per element.
Common Mistakes
- ⚠Overshooting so much the element visibly leaves its intended bounds/clipping area.
- ⚠Applying spring physics to something the player is actively dragging, causing it to fight the input.
- ⚠Using overshoot on error states, where a confident, non-bouncy motion reads better.
Implementation
Paste this into your AI assistant (Cursor, Copilot, Claude) to add the effect to your project.
Add the "Elastic / Overshoot" game-feel effect to my project: Letting a motion overshoot its target and settle, instead of stopping dead.
How it works: Overshoot animation lets a moving element pass slightly beyond its resting position before springing back and settling — like a rubber band or a spring, rather than a rigid stop.
Guidelines:
- Reserve larger overshoot for elements entering/celebrating (popups, rewards); keep it subtle for frequent UI motion.
- Tune damping so it settles within 2-3 oscillations at most — anything longer reads as loose, not springy.
- Use spring-based animation (mass/stiffness/damping) rather than hand-tuned keyframes when the target can change mid-flight (e.g. drag-and-release).
Avoid:
- Don't overshoot elements that need to land at an exact, readable position immediately (e.g. a value the player must read precisely).
- Don't use the same spring config for every UI element — a small icon and a full-screen panel shouldn't move identically.
- Don't combine heavy overshoot with heavy squash/stretch on the same object — pick one dominant technique per element.
Implement the effect in whatever engine/stack the project already uses and follow its existing code style. Wire it up where it makes sense.References
- Rebound / Spring physics for UI — Facebook Rebound docs
- The Illusion of Life: Disney Animation — Frank Thomas & Ollie Johnston (book)
Related Effects
Squash & Stretch
Deforming a shape along its motion to sell weight, speed, and material.
Button Press
Giving a button real, tactile feedback the instant it's pressed.
Wobble / Jiggle
A decaying oscillation that makes an object feel soft, springy, or alive.
Comments
…