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

Menu z wysuwanym panelem

Prosta nawigacja. Także na małym ekranie.

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

Gdzie wykorzystać ten przykład?

Elementy strony dopasowane do własnego projektu. Wariant „Menu z wysuwanym panelem” 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?

Nazwa strony, Pozycje menu (osobne wiersze), Kolor akcentu, Wysuwanie panelu, Klasa CSS. W edytorze kodu możesz dodatkowo zmienić całą strukturę i zachowanie przykładu.

Gotowy kod: Menu z wysuwanym panelem

HTML

<nav class="menu" aria-label="Menu główne">
    <strong>Twoja marka</strong>
    <button type="button" aria-expanded="false" aria-controls="menu-panel">☰ Menu</button>
    <div id="menu-panel" hidden>
        <a href="#sekcja-1">Strona główna</a>
        <a href="#sekcja-2">O nas</a>
        <a href="#sekcja-3">Oferta</a>
        <a href="#sekcja-4">Kontakt</a>
    </div>
</nav>
<section id="sekcja-1" class="menu-section"><h2>Strona główna</h2><p>Twoja treść w tym miejscu.</p></section>
<section id="sekcja-2" class="menu-section"><h2>O nas</h2><p>Twoja treść w tym miejscu.</p></section>
<section id="sekcja-3" class="menu-section"><h2>Oferta</h2><p>Twoja treść w tym miejscu.</p></section>
<section id="sekcja-4" class="menu-section"><h2>Kontakt</h2><p>Twoja treść w tym miejscu.</p></section>

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}
.menu{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:#fff;border-bottom:1px solid #ddd}
.menu>button{padding:8px 15px;border:0;border-radius:5px;background:#e95b30;color:#fff}
.menu>div{position:absolute;right:0;top:100%;width:min(320px,100vw);background:#fff;padding:25px;box-shadow:0 15px 30px #0002;animation:menu-show .25s ease}
.menu a{display:block;color:#293322;text-decoration:none;padding:12px;border-bottom:1px solid #eee}
.menu-section{min-height:80vh;padding:50px 25px;scroll-margin-top:80px}
.menu-section:nth-of-type(even){background:#e2e9d9}
@keyframes menu-show{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:none}}

JavaScript

const menu = document.querySelector('.menu');
const toggle = menu.querySelector('button');
const panel = menu.querySelector('div');
function closeMenu(){
    panel.hidden = true;
    toggle.setAttribute('aria-expanded', 'false');
}
toggle.addEventListener('click', () => {
    panel.hidden = !panel.hidden;
    toggle.setAttribute('aria-expanded', String(!panel.hidden));
});
menu.querySelectorAll('a').forEach(link => link.addEventListener('click', closeMenu));
document.addEventListener('keydown', e => {if(e.key === 'Escape') closeMenu()});
document.addEventListener('click', e => {if(!menu.contains(e.target)) closeMenu()});

Podobne przykłady