Tworzenie prostego menu nawigacyjnego

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Tworzenie prostego menu nawigacyjnego
In Progress

Proste menu nawigacyjne — HTML i CSS

Nawigacja na stronie to zazwyczaj zestaw linków ułożonych w formie menu. Poniżej pokażemy, jak stworzyć proste menu poziome, wykorzystując semantyczną strukturę HTML (lista nieuporządkowana) oraz CSS (flexbox i pseudo-klasy do interakcji).

Struktura HTML menu

Najczęściej menu buduje się z listy nieuporządkowanej, w której każdy element li zawiera link a. Taka semantyczna struktura ułatwia nawigację i stylowanie. Przykład:

<nav>
    <ul>
        <li><a href="index.html">Strona główna</a></li>
        <li><a href="o-nas.html">O nas</a></li>
        <li><a href="uslugi.html">Usługi</a></li>
        <li><a href="kontakt.html">Kontakt</a></li>
    </ul>
</nav>

Domyślnie powyższe wygeneruje listę pionową z punktorami — zaraz zmienimy to za pomocą CSS, aby uzyskać menu poziome.

Stylowanie menu za pomocą CSS

Najpierw usuniemy domyślne stylowanie listy (punktory i odstępy) oraz ułożymy elementy poziomo. Możemy to osiągnąć, nadając nav > ul odpowiednie style:

nav ul {
    list-style-type: none; /* usuń punktor (kropki) */
    margin: 0;
    padding: 0;
    display: flex; /* ułóż <li> obok siebie w linii */
    justify-content: center; /* opcjonalnie: wyśrodkuj menu poziomo */
}

Właściwość display: flex sprawia, że elementy li stają się elementami flex i układają się w wierszu. justify-content: center powoduje wyśrodkowanie menu w dostępnym obszarze (można też użyć space-around lub space-between).

Dlaczego flexbox?

Flexbox ułatwia równomierne rozłożenie elementów w poziomie i reagowanie na zmiany szerokości ekranu. W razie potrzeby można również użyć flex-wrap, żeby elementy zawijały się do następnego wiersza.

Elementy listy <li> i linki <a>

Dzięki flexboxowi elementy li są już ustawione w linii. Często jednak to linki traktujemy jako bloki, nadając im padding, dzięki czemu obszar klikalny jest większy i wygodniejszy dla użytkownika:

nav li {
    margin: 0 10px; /* odstęp poziomy między elementami menu */
}
nav a {
    display: inline-block; /* padding działa poprawnie we wszystkich kierunkach */
    text-decoration: none; /* usuń podkreślenie */
    color: #000; /* kolor tekstu linka */
    padding: 8px 12px; /* wewnętrzne odstępy, większy obszar klikalny */
    font-weight: bold; /* pogrubienie dla czytelności */
}

Dzięki temu linki wyglądają jak przyciski/etykiety na pasku — mają odstępy wokół tekstu i nie są podkreślone.

Pseudo-klasy linków

CSS umożliwia stylowanie linków w zależności od ich stanu. Najważniejsze pseudo-klasy to:

  • :hover — gdy użytkownik najedzie kursorem na element.
  • :visited — gdy link był już odwiedzony.
  • I dodatkowo: :active (w momencie kliknięcia) i :focus (gdy element ma fokus, np. po tabulacji).

Przykładowe style dla stanów:

nav a:hover {
    background-color: #ddd; /* jasne tło po najechaniu */
    color: #000;
}
nav a:visited {
    color: #555; /* kolor odwiedzonego linku */
}

Dzięki temu użytkownik otrzymuje informację zwrotną — link podświetla się po najechaniu, a odwiedzone linki mogą mieć inny kolor.

Pełne, przykładowe CSS menu

nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    justify-content: center;
}
nav li {
    margin: 0 15px;
}
nav a {
    display: inline-block;
    text-decoration: none;
    color: #333;
    padding: 8px 12px;
    font-weight: bold;
}
nav a:hover {
    background-color: #f0f0f0;
    color: #000;
}
nav a:visited {
    color: #666;
}

Podsumowanie

Takie menu będzie elastycznie dostosowywać się do szerokości ekranu (dzięki flexboxowi). Na szerokim ekranie linki ładnie rozłożą się na środku; użytkownik otrzyma wizualną informację przy najechaniu, a odwiedzone linki można wyróżnić innym kolorem. Menu można dalej upiększać (tło paska, zmiana kolorów, animacje), w zależności od projektu.