Pasek nawigacji z nav
Obejmij menu elementem <nav> i umieść linki w liście. Flexbox zamienia listę w poziomy pasek:
list-style: none i padding: 0 usuwają punktory i wcięcie. display: block na każdym linku sprawia, że jego padding zajmuje realne miejsce w pasku, więc celem kliknięcia jest całe pole z paddingiem. Usuń linię display: flex, a to samo menu stanie się pionową listą, tak jak wygląda menu w pasku bocznym.
Sam <nav> niczego nie zmienia w wyglądzie. Jego zadaniem jest znaczenie: czytniki ekranu pokazują go jako punkt orientacyjny nawigacji, więc użytkownik może jednym klawiszem przeskoczyć do menu albo je pominąć.
Oznaczanie bieżącej strony
Dodaj aria-current="page" do linku strony, która jest wyświetlana. Mówi czytnikom ekranu "tu jesteś" i daje CSS punkt zaczepienia do wyróżnienia linku:
Przenieś aria-current="page" na inny link, a wyróżnienie przejdzie za nim. Stylowanie atrybutu zamiast klasy .active utrzymuje wygląd i dostępność w zgodzie: nie da się mieć jednego bez drugiego.
Kilka nav na jednej stronie: etykiety i okruszki
Strona może mieć menu główne, okruszki i spis treści, każde w osobnym <nav>. Nadaj każdemu aria-label, żeby czytnik ekranu ogłaszał "Breadcrumb navigation" zamiast trzech identycznych pozycji "navigation":
Okruszki używają listy numerowanej <ol>, bo kolejność ma znaczenie. Ukośniki pochodzą z CSS ::before, więc czytniki ekranu nie czytają "slash" między elementami. Ostatni element to bieżąca strona i nie jest linkiem.
Spis treści
Lista linków do sekcji tej samej strony to też nawigacja. Linki #id przeskakują do elementu o tym id; wypróbuj je w podglądzie:
Tutaj etykieta pochodzi z widocznego nagłówka przez aria-labelledby, co jest lepsze niż aria-label, gdy nagłówek już jest na ekranie.
Przełącznik menu mobilnego
Na wąskich ekranach menu zwykle chowa się za przyciskiem. Użyj prawdziwego <button> z aria-expanded, a linki trzymaj wewnątrz <nav>:
aria-expanded mówi czytnikowi ekranu, czy menu jest otwarte, a atrybut hidden usuwa listę zarówno z ekranu, jak i z drzewa dostępności, dopóki menu jest zamknięte. Na szerokich ekranach listę pokazuje się przez media query, a przycisk się ukrywa.
Częste błędy
- Obejmowanie każdej grupy linków elementem
<nav>. Używaj go do menu głównego, okruszków, paginacji i spisów treści. Linki w tekście nie są blokami nawigacji. - Przycisk menu zrobiony z
<div>. Nie da się na nim ustawić fokusu ani nacisnąć go klawiaturą. Użyj<button>. - Kilka nav bez etykiet. Dodaj do każdego
aria-labelalboaria-labelledby, żeby dało się je rozróżnić. - Samo pokolorowanie bieżącego linku. Dodaj
aria-current="page"; sam kolor nie jest ogłaszany i nie każdy musi go widzieć. - Linki z
href="#"na produkcji. W demo są w porządku, ale prawdziwe pozycje menu potrzebują prawdziwych URL, żeby działały po otwarciu w nowej karcie. Strona o linkach wyjaśnia, jak działają wartościhref.
Najczęściej zadawane pytania
Czym jest znacznik nav w HTML?
<nav> to element semantyczny, który obejmuje blok głównych linków nawigacyjnych, na przykład menu witryny, spis treści albo okruszki. Czytniki ekranu pokazują go jako punkt orientacyjny nawigacji, więc użytkownicy mogą od razu do niego przeskoczyć.
Czy linki w nav powinny być w liście?
To częsty i dobry wzorzec: <ul> z elementami <li> pozwala czytnikom ekranu podać, ile linków ma menu. Zwykłe linki bezpośrednio w <nav> też są poprawne, na przykład przy dwóch albo trzech linkach w rzędzie.
Czy każda grupa linków potrzebuje elementu nav?
Nie. Używaj <nav> tylko do głównych bloków nawigacji. Kilka linków w akapicie albo krótka lista linków prawnych w stopce go nie potrzebują, a zbyt wiele punktów orientacyjnych nawigacji utrudnia znalezienie każdego z nich.
Jak zrobić poziomy pasek nawigacji?
Umieść linki w <ul> wewnątrz <nav>, a potem nadaj liście display: flex; list-style: none; padding: 0; i gap. Flexbox ułoży elementy w rzędzie.
Jak pokazać bieżącą stronę w menu?
Dodaj aria-current="page" do linku strony, na której jest użytkownik, i ostyluj go selektorem [aria-current="page"]. Czytniki ekranu też ogłoszą go wtedy jako bieżącą stronę.
Czy strona może mieć więcej niż jeden nav?
Tak, na przykład menu główne, okruszki i spis treści. Nadaj każdemu inny aria-label, na przykład "Main" albo "Breadcrumb", żeby użytkownicy czytników ekranu mogli je rozróżnić.