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

Menu i nawigacja: menu ze strzałkami

Menu ze strzałkami. Edytuj treść i wygląd, a potem skopiuj kod.

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

Gdzie wykorzystać ten przykład?

Menu, ścieżki nawigacji i przełączniki sekcji. Wariant „Menu i nawigacja: menu ze strzałkami” możesz dopasować do kolorów i treści swojej strony.

Jak działa ten efekt?

Układ i stany pozycji opisuje CSS. Tam, gdzie potrzebne jest przełączanie, JavaScript reaguje na wybór użytkownika i zmienia aktywny element.

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ń przykładowe odnośniki. Sprawdź kolejność przechodzenia klawiszem Tab i zachowanie menu po wybraniu pozycji.

Co możesz zmienić w konfiguratorze?

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

Gotowy kod: Menu i nawigacja: menu ze strzałkami

HTML

<div class="effect"><nav class="nav-pack" aria-label="Menu przykładowe"><button class="menu-trigger" type="button" aria-expanded="false" aria-controls="nav-panel">☰ Menu i nawigacja</button><div class="nav-panel" id="nav-panel" hidden><button class="menu-close" type="button" aria-label="Zamknij menu">×</button><a href="#menu-section-0"><span>↗</span>Start</a><a href="#menu-section-1"><span>↗</span>O projekcie</a><a href="#menu-section-2"><span>↗</span>Oferta</a><a href="#menu-section-3"><span>↗</span>Kontakt</a></div></nav><p class="menu-result" role="status">Otwórz menu i wybierz pozycję.</p></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}.menu-trigger{border:0;border-radius:6px;background:#e95b30;color:#fff;padding:13px 20px;font-size:13px}.nav-panel{z-index:8;padding:28px 24px;background:#fff;text-align:left;color:#34452b;box-shadow:0 5px 20px #0001;position:relative;max-width:400px;margin:12px auto 0;border-radius:0}.nav-panel[hidden]{display:none}.nav-panel a{display:flex;align-items:center;gap:10px;padding:12px;color:inherit;text-decoration:none;font-size:inherit;border-bottom:1px solid #9eaf8a33}.nav-panel a:hover{background:#e95b3022}.nav-panel a span{font:11px monospace;opacity:.5}.menu-close{display:block;margin-left:auto;border:0;background:none;font-size:25px;color:inherit}.menu-result{min-height:22px}
@media(prefers-reduced-motion:reduce){.effect *,.effect *:before,.effect *:after{animation:none!important;transition:none!important}}

JavaScript

const panel=document.querySelector('.nav-panel'),trigger=document.querySelector('.menu-trigger');
function closeMenu(){panel.hidden=true;trigger.setAttribute('aria-expanded','false')}
trigger.addEventListener('click',()=>{panel.hidden=!panel.hidden;trigger.setAttribute('aria-expanded',String(!panel.hidden))});
panel.querySelector('.menu-close').addEventListener('click',closeMenu);
panel.querySelectorAll('a').forEach(link=>link.addEventListener('click',e=>{e.preventDefault();document.querySelector('.menu-result').textContent='Wybrano: '+link.textContent;closeMenu()}));
document.addEventListener('keydown',e=>{if(e.key==='Escape')closeMenu()});

Podobne przykłady