Lerp

Ease-out intro reveal

Demo
Curve
Between one element and the next.

The page's first elements fade and rise into place in about 300 ms, on a curve measured on real sites.

How it works

Intro · CSS only· 7 sites

Measured in the library

Each value is a cubic-bezier fitted frame by frame to a site's 30 fps intro capture. Range 235–325 ms, median 274 ms over 6.

median 274 ms 230 ms285 ms340 ms

6 intro reveals between 230 ms and 340 ms. Press a dot to replay the demo on that site's curve. Pro names the 3 hollow dots

How it works

The page's first elements fade and rise into place in about 300 ms, on a curve measured on real sites.In 6 steps.

The calm sites in the library introduce their first screen the same way: each element fades in and rises a few pixels, on an ease-out curve, done in roughly a third of a second, with a small stagger. Measured frame by frame from their 30 fps intro clips, the fast ones cluster tightly, and that cluster is this technique. It is plain CSS: one keyframe, four custom properties.

  1. 01

    One keyframe, from invisible and lower

    @keyframes reveal-rise { from { opacity: 0; translate: 0 12px } }. Only the start is declared, so each element ends exactly where its layout puts it.

  2. 02

    Fill mode `both`

    The element holds its first frame during its delay, so nothing flashes in before its turn and nothing is hidden by JavaScript.

  3. 03

    An ease-out curve

    Fast at the start, settling at the end: motion that starts at once feels responsive. ease-out (cubic-bezier(0, 0, 0.58, 1)) is what most of the measured sites use.

  4. 04

    Short

    Around 300 ms, so the page is readable almost immediately; longer reads as a loading screen.

  5. 05

    A small stagger

    Each child starts a few tens of milliseconds after the previous one (--i × --reveal-stagger), top to bottom, so the eye is led rather than flooded.

  6. 06

    Travel only a little

    A 10–16 px rise is enough to read as motion; large distances look like a slide.

Code

The code

The engine is the file the demo above runs, framework-agnostic; the Svelte and React tabs wire it into a component.

Pro

Copy the engine, React or Svelte version.

Unlock code with Pro

US$60/year or US$8/month. Cancel anytime.

Prompt

Prompt pack

The page's first elements fade and rise into place in about 300 ms, on a curve measured on real sites.

2 prompts in Pro Generated 25 Sep 2026

  • Build it with a coding agentThe reveal with measured timing, as a brief for any coding agent.
  • Match a measured sitePick the exact intro timing of a site in the library.

Pro opens every prompt, with the measured values filled in and ready to paste into your coding agent.

Unlock prompts with Pro

US$60/year or US$8/month. Cancel anytime.

Performance & accessibility

Performance

Opacity and translate run on the compositor: no layout, no paint after the first frame, and no JavaScript at all. It is safe on the largest contentful paint element too, as long as that element is not hidden for long: keep the delay of the headline under 100 ms, or leave the headline out of the reveal and let the details follow it.

Reduced motion

Under prefers-reduced-motion keep the fade and drop the rise (the stylesheet swaps the keyframe). The timing stays, so the page still settles in order; nothing travels.

Source

Source, credited

No single site: the curve and the timing are what the library's measurements agree on. Each value below is a cubic-bezier fitted to one site's intro clip, frame by frame at 30 fps, with its fit error. The CSS is written for this page.

Seen in the library

Sites using this effect.