Skip to content
Knsept
Free playbook

Reveal on scroll

Content that fades and rises into place as it enters the viewport, with staggered timing and no layout shift.

CSSJavaScriptUI Widgets Updated Oct 23, 2026
Live demo Reduced motion is on, so effects are toned down
<div class="reveal-box" id="reveal-box">
  <p class="reveal-hint">Scroll inside this box ↓</p>
  <div class="reveal-item">01 · Plan</div>
  <div class="reveal-item">02 · Build</div>
  <div class="reveal-item">03 · Test</div>
  <div class="reveal-item">04 · Ship</div>
  <div class="reveal-item">05 · Learn</div>
  <div class="reveal-item">06 · Repeat</div>
</div>

Items are only hidden after the script adds js-reveal, so if JavaScript fails, the content is simply visible. Only opacity and transform animate, which means no layout shift and smooth frames.

When several items enter at once (say, a fast scroll), each gets a slightly longer --delay, so they cascade instead of popping in together.

This demo watches a scroll box with the root option. For a normal page, set scrollArea to document.body. With reduced motion on, items fade in without moving.

More from the library

Scroll & motion live

Count-up stats

Numbers that count up when they scroll into view, with easing and formatting. A quicker count with reduced motion.

Scroll & motion live

Scroll progress bar

A reading progress bar driven entirely by CSS scroll timelines, with a small JS fallback.

Navigation live

Smooth accordion

A FAQ accordion built on native details/summary, with a smooth open and close animation and an optional one-open-at-a-time mode.