Menu

HTML nav Tag: Navigationsleiste, Menüs und Breadcrumbs

Das <nav>-Element markiert einen Block mit wichtigen Navigationslinks. Hier lernst du, wie du eine Navigationsleiste mit <nav> und einer Liste baust, wie du die aktuelle Seite markierst, wie du mehrere navs auf einer Seite beschriftest und wie du ein Menü für Mobilgeräte zum Aufklappen machst.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Eine Navigationsleiste mit nav

Pack dein Menü in <nav> und setz die Links in eine Liste. Flexbox macht aus der Liste eine horizontale Leiste:

list-style: none und padding: 0 entfernen die Aufzählungspunkte und die Einrückung. display: block an jedem Link lässt seinen Innenabstand echten Platz in der Leiste einnehmen, der ganze Kasten mit Innenabstand ist also die Klickfläche. Lösch die Zeile mit display: flex, und dasselbe Menü wird zu einer senkrechten Liste, so sieht ein Menü in einer Seitenleiste aus.

<nav> selbst sieht nach nichts aus. Seine Aufgabe ist die Bedeutung: Screenreader stellen es als Landmark navigation bereit, ein Nutzer kann also mit einer Taste zum Menü springen oder es überspringen.

Die aktuelle Seite markieren

Füg dem Link zur angezeigten Seite aria-current="page" hinzu. Das sagt Screenreadern „du bist hier“ und gibt CSS einen Ansatzpunkt, um den Link hervorzuheben:

Verschieb aria-current="page" zu einem anderen Link, und die Hervorhebung folgt ihm. Wenn du das Attribut stylst statt einer Klasse .active, bleiben Aussehen und Barrierefreiheit synchron: Das eine gibt es nicht ohne das andere.

Mehrere navs auf einer Seite: Labels und Breadcrumbs

Eine Seite kann ein Hauptmenü, Breadcrumbs und ein Inhaltsverzeichnis haben, jedes in seinem eigenen <nav>. Gib jedem ein aria-label, damit ein Screenreader „Breadcrumb Navigation“ ansagt statt dreimal „Navigation“:

Breadcrumbs verwenden eine geordnete Liste <ol>, weil die Reihenfolge zählt. Die Schrägstriche kommen aus CSS ::before, Screenreader lesen also nicht zwischen jedem Eintrag „Schrägstrich“ vor. Der letzte Eintrag ist die aktuelle Seite und kein Link.

Ein Inhaltsverzeichnis

Eine Liste von Links zu Abschnitten derselben Seite ist ebenfalls Navigation. Links mit #id springen zu dem Element mit dieser id; probier sie in der Vorschau aus:

Hier kommt das Label von einer sichtbaren Überschrift über aria-labelledby, was besser ist als aria-label, wenn die Überschrift schon auf dem Bildschirm steht.

Ein Menü für Mobilgeräte zum Aufklappen

Auf schmalen Bildschirmen verstecken sich Menüs meistens hinter einem Button. Nimm einen echten <button> mit aria-expanded und lass die Links in <nav>:

aria-expanded sagt einem Screenreader, ob das Menü offen ist, und das Attribut hidden entfernt die Liste im geschlossenen Zustand sowohl vom Bildschirm als auch aus dem Barrierefreiheitsbaum. Auf breiten Bildschirmen würdest du die Liste per Media Query anzeigen und den Button verstecken.

Häufige Fehler

  • Jede Gruppe von Links in <nav> packen. Nimm es für das Hauptmenü, Breadcrumbs, Seitennummerierung und Inhaltsverzeichnisse. Links im Fließtext sind keine Navigationsblöcke.
  • Ein Menü-Button aus einem <div>. Er lässt sich per Tastatur weder fokussieren noch auslösen. Nimm <button>.
  • Mehrere navs ohne Labels. Füg jedem aria-label oder aria-labelledby hinzu, damit man sie auseinanderhalten kann.
  • Den aktuellen Link nur einfärben. Füg aria-current="page" hinzu; Farbe allein wird nicht angesagt und ist vielleicht nicht für alle sichtbar.
  • Links mit href="#" im Livebetrieb. In einer Demo sind sie in Ordnung, aber echte Menüeinträge brauchen echte URLs, damit sie auch in einem neuen Tab funktionieren. Wie href-Werte funktionieren, erklärt die Seite zum HTML Link.

Häufig gestellte Fragen

Was ist das nav-Tag in HTML?

<nav> ist ein semantisches Element, das einen Block mit wichtigen Navigationslinks umschließt, etwa das Menü der Website, ein Inhaltsverzeichnis oder Breadcrumbs. Screenreader führen es als Landmark navigation auf, damit Nutzer direkt dorthin springen können.

Sollen Links in nav in einer Liste stehen?

Das ist das übliche Muster und ein gutes: Ein <ul> mit <li>-Einträgen lässt Screenreader ansagen, wie viele Links das Menü hat. Einfache Links direkt in <nav> sind ebenfalls gültig, zum Beispiel bei zwei oder drei Links in einer Reihe.

Braucht jede Gruppe von Links ein nav-Element?

Nein. Nimm <nav> nur für wichtige Navigationsblöcke. Ein paar Links in einem Absatz oder eine kurze Liste rechtlicher Links im Footer brauchen es nicht, und zu viele nav-Landmarks machen jede einzelne schwerer auffindbar.

Wie mache ich eine horizontale Navigationsleiste?

Setz die Links in ein <ul> in <nav> und gib der Liste display: flex; list-style: none; padding: 0; und ein gap. Flexbox ordnet die Einträge in einer Reihe an.

Wie zeige ich die aktuelle Seite in einer Navbar an?

Füg dem Link zur Seite, auf der der Nutzer gerade ist, aria-current="page" hinzu und style ihn mit dem Selektor [aria-current="page"]. Screenreader sagen ihn dann auch als aktuelle Seite an.

Darf eine Seite mehr als ein nav haben?

Ja, zum Beispiel ein Hauptmenü, eine Breadcrumb-Leiste und ein Inhaltsverzeichnis. Gib jedem ein anderes aria-label wie "Main" oder "Breadcrumb", damit Screenreader-Nutzer sie auseinanderhalten können.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S