Skip to content
Ease

Design springs and easing curves. Export pure CSS.

Springs ship as linear(). How it works

Curve

Exposure strip
How to read it

Top row: where the element sits on each frame, so bunched ticks mean slow motion. Bottom row: the same frames in time order, each bar the distance travelled, so the settle is easy to read. Keys are circled.

36 frames @ 60fps

Critically damped: fastest without overshoot.

s

How long it feels. It fully settles in 588 ms, the exported duration.

Stiffness and damping

Mass is fixed at 1; only the ratio matters.

Preview

Publish changes?

Your edits will be visible to everyone.

CancelPublish

Export

±0.005 · 16 stops
:root {
  --ease-snappy: linear(0, 0.0201 2.33%, 0.0834 5.17%, 0.1586 7.67%, 0.4603 16.83%, 0.5555 20.17%, 0.6382 23.5%, 0.7082 26.83%, 0.7666 30.17%, 0.8166 33.67%, 0.8602 37.5%, 0.8992 42%, 0.9296 46.83%, 0.9712 58.5%, 0.9913 73.67%, 1);
  --ease-snappy-duration: 588ms;
}

.element {
  transition: transform var(--ease-snappy-duration) var(--ease-snappy);
}

/* Browsers without linear() support (pre-2023) fall back to ease-out. */
@supports not (transition-timing-function: linear(0, 1)) {
  :root { --ease-snappy: ease-out; }
}

16 stops · 213 chars · max error 0.0047