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

Zakładki z treścią

Uporządkowana treść, jedno kliknięcie.

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

Gdzie wykorzystać ten przykład?

Elementy strony dopasowane do własnego projektu. Wariant „Zakładki z treścią” 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 zakładek (3 wiersze), Treści zakładek (3 wiersze), Kolor. W edytorze kodu możesz dodatkowo zmienić całą strukturę i zachowanie przykładu.

Gotowy kod: Zakładki z treścią

HTML

<div class="tabs"><div role="tablist" aria-label="Etapy projektu"><button id="tab-design" role="tab" aria-selected="true" aria-controls="panel-design">Design</button><button id="tab-code" role="tab" aria-selected="false" aria-controls="panel-code" tabindex="-1">Kod</button><button id="tab-result" role="tab" aria-selected="false" aria-controls="panel-result" tabindex="-1">Efekt</button></div><section id="panel-design" role="tabpanel" aria-labelledby="tab-design"><h2>Wszystko zaczyna się od pomysłu.</h2><p>Ustal kierunek i dobierz odpowiedni wygląd.</p></section><section id="panel-code" role="tabpanel" aria-labelledby="tab-code" hidden><h2>Prosty, czytelny kod.</h2><p>Zamień pomysł w działające rozwiązanie.</p></section><section id="panel-result" role="tabpanel" aria-labelledby="tab-result" hidden><h2>Gotowe do pokazania światu.</h2><p>Sprawdź efekt i opublikuj swój projekt.</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}}
.tabs{width:100%;max-width:620px;background:#fff;border-radius:9px;padding:25px}.tabs [role=tablist]{display:flex;gap:20px;border-bottom:1px solid #e2e7d9}.tabs button{border:0;background:none;padding:10px 0;color:#859175}.tabs button[aria-selected=true]{color:#e95b30;box-shadow:0 2px #e95b30}.tabs section{padding-top:25px}.tabs h2{font-size:23px;line-height:1.3}.tabs p{font-size:13px;color:#788867}

JavaScript

const tabs = [...document.querySelectorAll('[role="tab"]')];
function selectTab(tab){
    tabs.forEach(button => {
        const selected = button === tab;
        button.setAttribute('aria-selected', String(selected));
        button.tabIndex = selected ? 0 : -1;
        document.getElementById(button.getAttribute('aria-controls')).hidden = !selected;
    });
}
tabs.forEach((tab, i) => {
    tab.addEventListener('click', () => selectTab(tab));
    tab.addEventListener('keydown', e => {
        let next;
        if(e.key === 'ArrowRight') next = (i + 1) % tabs.length;
        if(e.key === 'ArrowLeft') next = (i - 1 + tabs.length) % tabs.length;
        if(e.key === 'Home') next = 0;
        if(e.key === 'End') next = tabs.length - 1;
        if(next === undefined) return;
        e.preventDefault();tabs[next].focus();selectTab(tabs[next]);
    });
});

Podobne przykłady