Wprowadzenie do koncepcji menu radialnego

Menu radialne to unikalny sposób nawigacji, który pozwala na wyświetlanie opcji w formie okręgu. Dzięki temu rozwiązaniu użytkownicy mogą szybko i łatwo nawigować po Twojej stronie. W tym poradniku przedstawimy, jak stworzyć efektywne i responsywne menu radialne z wykorzystaniem HTML, CSS i jQuery.

Zakres projektu

W naszym projekcie stworzymy:

  1. HTML dla struktury menu.
  2. CSS do stylizacji i responsywności.
  3. JavaScript/jQuery do interakcji.

Lista plików

  • index.html
  • styles.css
  • script.js

Pełna zawartość plików

1. index.html

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Menu Radialne</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <section class="lab">
        <h2>Rozwijane menu radialne</h2>
        <div class="radial">
            <button class="radial-toggle" aria-expanded="false">+</button>
            <div hidden>
                <button>HTML</button>
                <button>CSS</button>
                <button>JS</button>
                <button>UI</button>
            </div>
        </div>
        <p class="radial-result" role="status"></p>
    </section>
    <script src="script.js"></script>
</body>
</html>

2. styles.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}}
.lab{max-width:800px;margin:25px auto;padding:25px;border:1px solid #d4dec9;border-radius:14px;background:#fff;color:#273724;font:15px/1.6 system-ui,sans-serif;overflow-wrap:anywhere}.lab *{box-sizing:border-box}.lab h2{font-size:23px;margin:0 0 25px;line-height:1.3}.lab h3{line-height:1.3}.lab label{display:block;margin:10px 0}.lab input:not([type=checkbox]):not([type=radio]),.lab select,.lab textarea{font:inherit;padding:9px;border:1px solid #bac9ad;border-radius:6px;max-width:100%;background:#fff;color:#273724}.lab input[type=range]{width:100%;accent-color:#6f8e58}.lab input[type=color]{height:45px;width:70px}.lab input[type=checkbox]{accent-color:#6f8e58;margin-right:8px}.lab textarea{width:100%}.lab button{font:inherit;font-weight:600;border:0;border-radius:14px;background:#6f8e58;color:#fff;padding:10px 16px;cursor:pointer}.lab button:disabled{opacity:.45;cursor:default}.lab :focus-visible{outline:3px solid #315f8b;outline-offset:3px}.lab pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#f0f4e9;padding:15px;font:12px/1.6 monospace}.lab table{border-collapse:collapse;width:100%}.lab th,.lab td{padding:10px;text-align:left;border-bottom:1px solid #d9e3ce}.lab progress{accent-color:#6f8e58}.lab .lab-hint{font-size:11px;color:#687861;border-top:1px solid #dbe3d0;padding-top:16px;margin-top:25px}.lab [hidden]{display:none!important}@media(max-width:480px){.lab{padding:16px;margin:10px auto}.lab h2{font-size:20px}.lab table{font-size:12px}.lab th,.lab td{padding:7px}}
.radial{position:relative;height:270px;display:grid;place-items:center}.radial-toggle{border-radius:50%;width:60px;height:60px;font-size:30px}.radial>div{position:absolute;inset:0;pointer-events:none}.radial>div button{position:absolute;left:calc(50% - 25px);top:105px;width:55px;height:55px;border-radius:50%;pointer-events:auto}.radial>div button:nth-child(1){transform:translateY(-90px)}.radial>div button:nth-child(2){transform:translateX(100px)}.radial>div button:nth-child(3){transform:translateY(90px)}.radial>div button:nth-child(4){transform:translateX(-100px)}

3. script.js

const toggle=document.querySelector('.radial-toggle'),panel=document.querySelector('.radial>div');
toggle.onclick=()=>{
    panel.hidden=!panel.hidden;
    toggle.setAttribute('aria-expanded',String(!panel.hidden));
    toggle.textContent=panel.hidden?'+':'×';
};
panel.querySelectorAll('button').forEach(button=>
    button.onclick=()=>
        document.querySelector('.radial-result').textContent='Wybrano '+button.textContent
);

Uruchomienie

  1. Utwórz nowy folder na projekt i w nim stwórz pliki index.html, styles.css oraz script.js.
  2. Skopiuj powyższy kod do odpowiednich plików.
  3. Otwórz plik index.html w przeglądarce, aby zobaczyć działające menu radialne.

Rozszerzenia

Możesz rozszerzyć funkcjonalność, dodając animacje do przycisków menu lub zmieniając kolory przycisków w zależności od wybranego elementu. Możesz również użyć bibliotek takich jak anime.js do bardziej zaawansowanych efektów.

Częste błędy

  • Brak odpowiedniego stylu dla przycisków: Upewnij się, że style CSS są poprawnie załadowane.
  • Nieprawidłowe odniesienia do elementów: Sprawdź, czy selektory w JavaScript są poprawne i odpowiadają strukturze HTML.

Podsumowanie

Stworzyliśmy efektywne i responsywne menu radialne, które można łatwo dostosować do własnych potrzeb. Możesz teraz wykorzystać tę technikę w swoich projektach. Jeśli chcesz dowiedzieć się więcej, sprawdź także mój poradnik o rozwijanym menu radialnym.