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

Aktywna sekcja w menu

Nawigacja nadąża za czytelnikiem.

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

Gdzie wykorzystać ten przykład?

Elementy strony dopasowane do własnego projektu. Wariant „Aktywna sekcja w menu” możesz dopasować do kolorów i treści swojej strony.

Jak działa ten efekt?

HTML określa strukturę przykładu, CSS jego wygląd, a JavaScript — jeżeli występuje — odpowiada za interakcję. Podgląd pokazuje domyślne ustawienia, które możesz zmienić w edytorze.

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ę?

Podmień treści i odnośniki. Kod działa w przeglądarce; formularze wymagają osobnej obsługi wysyłania po stronie serwera.

Co możesz zmienić w konfiguratorze?

Tytuły sekcji (osobne wiersze), Kolor aktywnej pozycji. W edytorze kodu możesz dodatkowo zmienić całą strukturę i zachowanie przykładu.

Gotowy kod: Aktywna sekcja w menu

HTML

<nav class="spy" aria-label="Spis treści"><a href="#section-0">Pomysł</a><a href="#section-1">Projekt</a><a href="#section-2">Realizacja</a></nav><main><section id="section-0"><span>01</span><h2>Pomysł</h2><p>Przewijaj stronę i obserwuj aktywną pozycję w menu.</p></section><section id="section-1"><span>02</span><h2>Projekt</h2><p>Przewijaj stronę i obserwuj aktywną pozycję w menu.</p></section><section id="section-2"><span>03</span><h2>Realizacja</h2><p>Przewijaj stronę i obserwuj aktywną pozycję w menu.</p></section></main>

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}}
body{display:block;padding:0}.spy{position:sticky;top:0;z-index:5;background:white;padding:15px;display:flex;gap:10px;overflow:auto;border-bottom:1px solid #dce5d0}.spy a{padding:7px 12px;color:#738764;text-decoration:none;font-size:12px;white-space:nowrap;border-radius:4px}.spy a.active{background:#e95b30;color:white}main section{min-height:85vh;padding:50px 25px;scroll-margin-top:65px}main section:nth-child(2n){background:#e1e9d7}main h2{font-size:40px;line-height:1.2}main span{font:12px monospace;color:#e95b30}main p{font-size:13px;color:#80916e}

JavaScript

const links=[...document.querySelectorAll('.spy a')];
const sections=[...document.querySelectorAll('main section')];
function highlight(){
    let index=0;
    sections.forEach((section,i)=>{if(section.getBoundingClientRect().top<=100)index=i});
    links.forEach((link,i)=>{link.classList.toggle('active',i===index);if(i===index)link.setAttribute('aria-current','location');else link.removeAttribute('aria-current')});
}
addEventListener('scroll',highlight,{passive:true});addEventListener('resize',highlight);highlight();

Podobne przykłady