First panel
Uses animation-timeline: view() and
animation-range: entry … cover ….
Try: Scroll inside the box. Panels fade/slide in as they enter the visible region.
Uses animation-timeline: view() and
animation-range: entry … cover ….
No scroll listeners—progress ties to scroll position on the compositor side where supported.
Compare to IntersectionObserver + class toggles for
one-shot reveals.
@keyframes reveal {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}
.panel {
animation: reveal linear both;
animation-timeline: view();
animation-range: entry 0% cover 35%;
}