Utwórz projekt ↗
CSS / JS · KOD NA LICENCJI MIT

Odsłanianie przy scrollu: wachlarz elementów

Wachlarz elementów. Edytuj treść i wygląd, a potem skopiuj kod.

Edytuj HTML, CSS i JS ↗ Otwórz konfigurator ↗

Gdzie wykorzystać ten przykład?

Sekcje narracyjne i odsłanianie elementów. Wariant „Odsłanianie przy scrollu: wachlarz elementów” możesz dopasować do kolorów i treści swojej strony.

Jak działa ten efekt?

Efekt wykorzystuje pozycjonowanie CSS lub reakcję na pojawienie się elementu w kadrze. Podgląd trzeba przewinąć, aby zobaczyć pełne zachowanie.

Jak dodać go na stronę?

  1. Otwórz przykład w edytorze i podmień tekst oraz kolory.
  2. HTML wstaw w miejscu, w którym ma pojawić się element.
  3. CSS przenieś do arkusza stylów swojej strony. Reguły body z podglądu dopasuj do własnego układu.
  4. JavaScript uruchom po załadowaniu elementów HTML, na przykład przed zamknięciem </body>.
  5. Sprawdź działanie na telefonie, klawiaturą i z własną treścią.

Na co zwrócić uwagę?

Sticky zależy od wysokości rodzica i jego overflow. Przetestuj docelowy kontener oraz ograniczenie ruchu w ustawieniach systemu.

Co możesz zmienić w konfiguratorze?

Tekst przykładu, Kolor akcentu, Czas animacji. W edytorze kodu możesz dodatkowo zmienić całą strukturę i zachowanie przykładu.

Gotowy kod: Odsłanianie przy scrollu: wachlarz elementów

HTML

<div class="effect scroll-demo"><div class="scroll-intro"><h2>Odsłanianie przy scrollu</h2><p>Przewiń w dół wewnątrz tego okna ↓</p></div><section class="reveal-item"><small>01 / ODKRYWAJ</small><h2>Odsłanianie przy scrollu</h2><p>Ta sekcja pojawia się dopiero po wejściu w kadr.</p></section><section class="reveal-item"><small>02 / ODKRYWAJ</small><h2>Odsłanianie przy scrollu</h2><p>Ta sekcja pojawia się dopiero po wejściu w kadr.</p></section><section class="reveal-item"><small>03 / ODKRYWAJ</small><h2>Odsłanianie przy scrollu</h2><p>Ta sekcja pojawia się dopiero po wejściu w kadr.</p></section></div>

CSS

*{box-sizing:border-box}body{margin:0;padding:35px 24px;background:#f4f5ef;color:#293322;font:15px/1.7 Arial,sans-serif;min-height:100vh;display:grid;place-items:center}button,input{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #738858;outline-offset:4px}h2,h3,p{margin-top:0}[hidden]{display:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.effect{width:100%;max-width:650px;color:#e95b30;text-align:center}.effect *{box-sizing:border-box}.effect button,.effect a{font:inherit}.effect button{cursor:pointer}.effect h2{font-size:clamp(25px,5vw,42px);line-height:1.2;margin:0 0 14px}.effect p{font-size:13px;color:#7c8c6d;margin:10px 0}.effect button:focus-visible,.effect a:focus-visible,.effect input:focus-visible{outline:3px solid #e95b30;outline-offset:5px}body{display:block;padding:0}.effect{max-width:none}.scroll-intro,.reveal-item{min-height:80vh;padding:45px 25px;display:flex;flex-direction:column;justify-content:center;align-items:center}.reveal-item{background:#e95b3011;margin:30px 20px;border-radius:12px;transition:opacity 1200ms ease,transform 1200ms,filter 1200ms,clip-path 1200ms}.reveal-item small{font:10px monospace;letter-spacing:2px;margin-bottom:22px}.reveal-item.waiting{opacity:0;transform:rotate(-12deg) translateY(35px);filter:blur(0px);clip-path:inset(0)}.reveal-item.visible{opacity:1;transform:none;filter:none;clip-path:inset(0)}.reveal-item:nth-child(even){transition-delay:120ms}
@media(prefers-reduced-motion:reduce){.effect *,.effect *:before,.effect *:after{animation:none!important;transition:none!important}}

JavaScript

if(!matchMedia('(prefers-reduced-motion: reduce)').matches){
    const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){entry.target.classList.add('visible');observer.unobserve(entry.target)}})},{threshold:.15});
    document.querySelectorAll('.reveal-item').forEach(item=>{item.classList.add('waiting');observer.observe(item)});
}

Podobne przykłady