Während die meisten Leute, die im Internet auf einem Computer surfen, eine Maus benutzen, sind viele stattdessen auf ihre Tastatur angewiesen. Theoretisch sollte die Nutzung einer Webseite mit der Tastatur kein Problem darstellen — drücken Sie die Taste TAB, um den Tastaturfokus von einem fokussierbaren Element zum nächsten zu bewegen, und drücken Sie dann ENTER, um es zu aktivieren, einfach! Viele (wenn nicht die meisten) Websites haben jedoch oben auf der Seite ein Menü mit Links, und es kann manchmal viele Tastendrücke dauern, um zu den gewünschten Inhalten zu gelangen. Nehmen Sie zum Beispiel die Homepage von 20min, eine der größten Nachrichtenseiten hier in der Schweiz. Möchten Sie die Top-Story lesen? Das sind dann schon fast 40 Tastendrücke — keine gute Zeitverwendung für niemanden.
Wenn Sie also möchten, dass Tastaturnutzer Ihre Website tatsächlich nutzen, anstatt gelangweilt wegzuklicken und woanders hinzugehen, müssen Sie im Hintergrund etwas Arbeit leisten, um das Überspringen direkt zu Ihren Hauptinhalten schneller und einfacher zu gestalten. Sie finden allerlei Techniken dafür im Web verstreut (einschließlich hier auf CSS-Tricks), aber die meisten verpassen ein oder zwei Tricks, und viele empfehlen die Verwendung veralteten oder eingestellten Codes. In diesem Artikel werde ich also einen tiefen Einblick in das Überspringen von Inhalten geben und alles im Stil von 2021 behandeln.
Zwei Arten von Tastaturnutzern
Obwohl es zahlreiche Unterschiede in der genauen Art von Tastatur oder gleichwertigem Schaltergerät gibt, das Menschen zur Navigation verwenden, müssen wir aus Programmierersicht nur zwei Gruppen berücksichtigen
- Personen, die die Tastatur in Verbindung mit einem Screenreader verwenden — wie NVDA oder JAWS auf einem PC, oder VoiceOver auf einem Mac — der den Bildschirminhalt laut vorliest. Diese Geräte werden oft von Menschen mit schwereren Sehbehinderungen verwendet.
- Alle anderen Tastaturnutzer.
Unsere Techniken zum Überspringen von Inhalten müssen beiden Gruppen gerecht werden, ohne Mausnutzer zu behindern. Wir verwenden zwei komplementäre Techniken, um das beste Ergebnis zu erzielen: Landmarken und Sprunglinks.
Ein grundlegendes Beispiel betrachten
Ich habe eine Beispielwebsite namens Style Magic erstellt, um die von uns behandelten Techniken zu veranschaulichen. Wir beginnen mit einem Zustand, der für einen Maussnutzer gut funktioniert, aber für Tastaturnutzer etwas umständlich ist. Die Basis-Website und die Versionen für jede der Techniken finden Sie in dieser Sammlung auf CodePen, und da das Testen der Tastaturnavigation auf CodePen etwas knifflig ist, finden Sie auch eigenständige Versionen hier.
Versuchen Sie, die TAB-Taste zu verwenden, um durch dieses Beispiel zu navigieren. (Es ist einfacher auf der eigenständigen Seite; TAB, um von einem Link zum nächsten zu springen, und SHIFT+TAB, um rückwärts zu gehen.) Sie werden feststellen, dass es nicht zu schlimm ist, aber nur, weil es nicht viele Menüpunkte gibt.
Wenn Sie Zeit haben und unter Windows sind, ermutige ich Sie auch, eine kostenlose Kopie des NVDA Screenreaders herunterzuladen und alle Beispiele damit auszuprobieren, wobei Sie auf die Übersicht von WebAIM zur Verwendung zurückgreifen. Die meisten von Ihnen auf einem Mac haben bereits den VoiceOver Screenreader zur Verfügung und WebAIM hat eine großartige Einführung zur Verwendung.
Landmarken hinzufügen
Eine der Dinge, die Screenreading-Software tun kann, ist die Anzeige einer Liste von Landmarken, die sie auf einer Webseite findet. Landmarken stellen wichtige Bereiche einer Seite dar, und der Benutzer kann diese Liste aufrufen und dann direkt zu einer dieser Landmarken springen.
Wenn Sie NVDA mit einer vollständigen Tastatur verwenden, drücken Sie INS+F7, um die „Elementliste“ aufzurufen, und dann ALT+d, um die Landmarken anzuzeigen. (Auf VoiceOver finden Sie eine ähnliche Liste über das Web Item Rotor.) Wenn Sie das auf der Beispielseite tun, werden Sie jedoch nur mit einer nicht hilfreichen leeren Liste konfrontiert.

Lassen Sie uns das zuerst beheben.
Das Hinzufügen von Landmarken ist unglaublich einfach und, wenn Sie HTML5 verwenden, haben Sie diese möglicherweise bereits auf Ihrer Website, ohne es zu merken, da sie direkt mit den semantischen HTML5-Elementen (<header>, <main>, <footer> und so weiter) verbunden sind.
Hier ein Vorher-Nachher-Vergleich des HTML, das zur Erzeugung des Kopfbereichs der Seite verwendet wird
<div class="bg-dark">
<div class="content-width flex-container">
<div class="branding"><a href="#">Style Magic</a></div>
<div class="menu-right with-branding">
<a href="#">Home</a>
<!-- etc. -->
</div>
</div>
</div>
Wird zu
<div class="bg-dark">
<header class="content-width flex-container">
<section class="branding"><a href="#">Style Magic</a></section>
<nav aria-label="Main menu" class="menu-right with-branding">
<a href="#">Home</a>
<!-- etc. -->
</nav>
</header>
</div>
Die verwendeten Klassen bleiben gleich, sodass wir keinerlei Änderungen am CSS vornehmen müssen.
Hier ist eine vollständige Liste der Änderungen, die wir in unserer Beispielseite vornehmen müssen
- Das
<div>, das den Kopfbereich oben auf der Seite kennzeichnet, ist jetzt ein<header>-Element. - Das
<div>, das das Branding enthält, ist jetzt ein<section>-Element. - Die beiden
<div>s, die Menüs enthalten, wurden durch<nav>-Elemente ersetzt. - Den beiden neuen
<nav>-Elementen wurde einaria-label-Attribut zugewiesen, das sie beschreibt: „Hauptmenü“ für das Menü oben auf der Seite und „Dienstmenü“ für das Menü unten auf der Seite. - Das
<div>, das den Hauptinhalt der Seite enthält, ist jetzt ein<main>-Element. - Das
<div>, das die Fußzeile unten auf der Seite kennzeichnet, ist jetzt ein<footer>-Element.
Sie können das vollständige aktualisierte HTML auf CodePen sehen.
Versuchen wir den Landmarken-Listen-Trick in NVDA erneut (INS+F7, dann ALT+d — hier ist der Link zur eigenständigen Seite, damit Sie es selbst testen können)

Großartig! Wir haben jetzt die banner Landmarke (zugeordnet dem <header>-Element), Hauptmenü; Navigation (zugeordnet dem oberen <nav>-Element und Anzeige unseres aria-label), main (zugeordnet <main>) und content info (zugeordnet footer). Von diesem Dialog aus kann ich mit TAB und den Pfeiltasten die main Landmarke auswählen und direkt zum Inhalt der Seite springen, oder noch besser, ich kann einfach die Taste D drücken, während ich die Seite durchsuche, um von einer Landmarkenrolle direkt zur nächsten zu springen. Nutzer des JAWS Screenreaders haben es noch einfacher — sie können einfach Q drücken, während sie surfen, um direkt zur main Landmarke zu springen.
Als zusätzlicher Bonus helfen semantische Elemente auch Suchmaschinen dabei, Ihre Inhalte besser zu verstehen und zu indexieren. Das ist ein schöner kleiner Nebeneffekt davon, eine Website viel zugänglicher zu machen.
Einen Sprunglink hinzufügen
Ich erwarte, dass Sie sich an diesem Punkt denken: „Aufgabe erledigt“. Nun, ich fürchte, es gibt immer ein „Aber“, das man bedenken muss. Google hat bereits 2011 einige Forschungen zur Nutzung von CTRL+f zur Suche innerhalb einer Webseite durchgeführt und festgestellt, dass erschreckende 90 % der Leute entweder nicht wussten, dass es existiert, oder es noch nie benutzt haben. Nutzer mit einem Screenreader verhalten sich bei Landmarken sehr ähnlich – ein großer Teil von ihnen nutzt diese Funktion einfach nicht, obwohl sie sehr nützlich ist. Daher werden wir unserer Website einen Sprunglink hinzufügen, um beiden Gruppen sowie all jenen Tastaturnutzern zu helfen, die keinen Screenreader verwenden.
Die grundlegenden Anforderungen für einen guten Sprunglink sind
- Er sollte für alle Tastaturnutzer (einschließlich Screenreader-Nutzer) wahrnehmbar sein, wenn er benötigt wird.
- Er sollte dem Tastaturnutzer genügend Informationen liefern, um zu erklären, was er tut.
- Er sollte auf einer möglichst breiten Palette aktueller Browser funktionieren.
- Er sollte die Navigation eines Maussnutzers nicht beeinträchtigen.
Schritt 1: Verbesserung der Tastaturfokus-Darstellung
Zuerst verbessern wir die Sichtbarkeit des Tastaturfokus auf der gesamten Website. Sie können sich den Tastaturfokus als Äquivalent zur Cursorposition vorstellen, wenn Sie Text in einem Textverarbeitungsprogramm bearbeiten. Wenn Sie die TAB-Taste verwenden, um zu navigieren, bewegt sich der Tastaturfokus von Link zu Link (oder Formularsteuerelement).
Die neuesten Webbrowser leisten vernünftige Arbeit bei der Anzeige der Position des Tastaturfokus, können aber immer noch von etwas Hilfe profitieren. Es gibt viele kreative Möglichkeiten, den Fokusring zu gestalten, obwohl unser Ziel darin besteht, ihn vor allem hervorzuheben.
Wir können die :focus Pseudo-Klasse für unsere Gestaltung verwenden (und es ist eine gute Idee, die gleichen Stile auch auf :hover anzuwenden, was wir auf der Beispielseite bereits getan haben — CodePen, Live-Seite). Das ist das Mindeste, was wir tun können, obwohl es üblich ist, weiter zu gehen und die Linkfarben bei :focus auf der gesamten Seite umzukehren.
Hier ist etwas CSS für unseren :focus-Zustand (eine Kopie dessen, was wir bereits für :hover haben)
a:focus { /* generic rule for entire page */
border-bottom-color: #1295e6;
}
.menu-right a:focus,
.branding a:focus {
/* inverted colors for links in the header and footer */
background-color: white;
color: #1295e6;
}
Schritt 2: Hinzufügen von HTML und CSS
Die letzte Änderung besteht darin, den Sprunglink selbst zu HTML und CSS hinzuzufügen. Er besteht aus zwei Teilen: dem Auslöser (dem Link) und dem Ziel (der Landmarke). Hier ist das von mir empfohlene HTML für den Auslöser, platziert ganz am Anfang der Seite, direkt im <header>-Element
<header class="content-width flex-container">
<a href="#skip-link-target" class="text-assistive display-at-top-on-focus">Skip to main content.</a>
<!-- etc. -->
</header>
Und hier ist das HTML für das Ziel, platziert direkt vor dem Hauptinhalt der <main>
<a href="#skip-link-target" class="text-assistive display-at-top-on-focus" id="skip-link-target">Start of main content.</a>
<main class="content-width">
<!-- etc. -->
</main>
So funktioniert der Sprunglink
- Der Sprunglink-Auslöser verknüpft sich mit dem Sprunglink-Ziel über ein Standard-Seitenfragment (
href="#skip-link-target"), das sich auf dasid-Attribut des Ziels bezieht (id="skip-link-target"). Wenn Sie dem Link folgen, wird der Tastaturfokus vom Auslöser zum Ziel verschoben. - Wir verknüpfen uns mit einem Anker (
<a>) Element, anstatt dasid-Attribut direkt zum<main>-Element hinzuzufügen, aus zwei Gründen. Erstens vermeidet es Probleme, bei denen der Tastaturfokus nicht korrekt verschoben wird (was in einigen Browsern ein Problem sein kann); zweitens können wir dem Benutzer klares Feedback geben, um zu zeigen, dass der Sprunglink funktioniert hat. - Der Text der beiden Links ist beschreibend, um dem Benutzer klar zu erklären, was passiert.
Wir haben jetzt einen funktionierenden Sprunglink, aber es gibt ein Problem: Er ist für alle sichtbar. Wir werden CSS verwenden, um ihn standardmäßig auszublenden, damit er für Maussnutzer nicht im Weg ist, und ihn dann nur erscheinen zu lassen, wenn er den Tastaturfokus erhält. Es gibt viele Möglichkeiten, dies zu tun, und die meisten davon sind in Ordnung, aber es gibt ein paar falsche Wege, die Sie vermeiden sollten
- Tun Sie: verwenden Sie
clip-path, um den Link unsichtbar zu machen, oder verwenden Sietransform: translateoderposition: absolute, um ihn aus dem Bildschirm zu positionieren. - Tun Sie nicht: verwenden Sie
display: none,visibility: hidden, dashidden-Attribut, oder setzen Sie diewidthoderheightdes Sprunglinks auf Null. All dies macht Ihren Sprunglink für eine oder beide Klassen von Tastaturnutzern unbrauchbar. - Tun Sie nicht: verwenden Sie
clip, da es veraltet ist.
Hier ist der Code, den ich empfehle, um beide Links auszublenden. Die Verwendung von clip-path zusammen mit seiner Präfix-Version -webkit- trifft zum Zeitpunkt des Schreibens 96,84 % der Nutzer, was (meiner Meinung nach) für die meisten Websites und Anwendungsfälle in Ordnung ist. Sollte Ihr Anwendungsfall es erfordern, gibt es eine Reihe anderer Techniken, die auf WebAIM detailliert beschrieben sind.
.text-assistive {
-webkit-clip-path: polygon(0 0, 0 0, 0 0, 0 0);
clip-path: polygon(0 0, 0 0, 0 0, 0 0);
box-sizing: border-box;
position: absolute;
margin: 0;
padding: 0;
}
Und um die Links anzuzeigen, wenn sie Fokus haben, empfehle ich eine Version dieses CSS mit Farben und Größen, die zu Ihrem Branding passen
.text-assistive.display-at-top-on-focus {
top: 0;
left: 0;
width: 100%;
}
.text-assistive.display-at-top-on-focus:focus {
-webkit-clip-path: none;
clip-path: none;
z-index: 999;
height: 80px;
line-height: 80px;
background: white;
font-size: 1.2rem;
text-decoration: none;
color: #1295e6;
text-align: center;
}
#skip-link-target:focus {
background: #084367;
color: white;
}
Dies sorgt für eine sehr sichtbare Anzeige des Auslösers und des Ziels ganz oben auf der Seite, wo ein Nutzer den Tastaturfokus direkt nach dem Laden der Seite erwarten würde. Es gibt auch eine Farbänderung, wenn Sie dem Link folgen, um klares Feedback zu geben, dass etwas passiert ist. Sie können selbst mit dem Code auf CodePen experimentieren (siehe unten) und ihn mit NVDA auf der eigenständigen Seite testen.
Darüber hinausgehend
Sprunglinks sind nicht nur für Weihnachten Ihr Hauptmenü da, sie sind nützlich, wann immer Ihre Webseite eine lange Liste von Links hat. Tatsächlich demonstriert dieser CodePen einen guten Ansatz für Sprunglinks innerhalb des Seiteninhalts (eigenständige Seite hier) mit transform: translateY() in CSS, um die Auslöser und Ziele auszublenden und anzuzeigen. Und wenn Sie sich in der „glücklichen“ Position befinden, ältere Browser unterstützen zu müssen, dann hier eine Technik dafür auf diesem CodePen (eigenständige Seite hier).
Schauen wir es uns an!
Zum Abschluss hier ein paar kurze Videos, die zeigen, wie die Sprunglinks für unsere beiden Klassen von Tastaturnutzern funktionieren.
So funktioniert der fertige Sprunglink bei Verwendung des NVDA Screenreaders
Hier ist er noch einmal, beim Surfen mit der Tastatur ohne Screenreader
Wir haben uns gerade angesehen, was ich als modernen Ansatz für zugängliche Sprunglinks im Jahr 2021 betrachte. Wir haben einige Ideen aus früheren Beispielen übernommen und sie aktualisiert, um bessere CSS-Praktiken, eine verbesserte Benutzeroberfläche für Tastaturnutzer und eine verbesserte Erfahrung für Screenreader-Nutzer zu berücksichtigen, dank eines aktualisierten Ansatzes für das HTML.
Ich bin mir nicht sicher, ob das noch relevant ist, aber es gibt ein Problem im HTML5 Boilerplate-Repo, das clip-path betrifft: „clip-path in visuallyhidden zerstört die Scroll-Performance.“
https://github.com/h5bp/html5-boilerplate/issues/2021
Weiß jemand, ob das noch relevant ist?
Es hat etwas Nachforschung gebraucht, um den relevanten Fehlerbericht zu finden (hier: https://bugs.chromium.org/p/chromium/issues/detail?id=611257) – es sieht so aus, als wäre dies in Chrome 85 behoben worden, das im August 2020 veröffentlicht wurde.
Toller Artikel, danke. Wenn Sie mehrere Sprunglinks gruppiert haben (z.B. Sprung zur Hauptnavigation, Sprung zum Hauptinhalt, Sprung zur Suche, Sprung zum Inhaltsverzeichnis), sollten sie in einem
<nav aria-label="Sprunglinks">Element gruppiert werden?Danke, freut mich, dass es Ihnen gefallen hat! Wenn Sie eine Reihe von Sprunglinks zusammen gruppiert haben, würde ich sie genauso markieren wie jede andere Navigationsmenü, sodass
<nav aria-label="Sprunglinks">meiner Meinung nach angemessen wäre. Es ist ziemlich ungewöhnlich, viele Sprunglinks auf diese Weise zu haben, daher würde ich dies nur tun, wenn es sich um eine ziemlich komplexe Seite oder eine Webanwendung handelt, zum Beispiel.Funktioniert überhaupt nicht mit Vivaldi. Kein Teil der Seite ist mit der Tab-Taste im Vivaldi-Browser zugänglich, im Gegensatz zu jeder anderen Website. Funktioniert perfekt in Firefox
Standardmäßig verwendet Vivaldi eine andere Methode für die Tastaturnavigation als andere Browser, genannt „Spatial Navigation“ (räumliche Navigation), die hier beschrieben wird: https://help.vivaldi.com/desktop/shortcuts/spatial-navigation/ — im Grunde verwenden Sie
Shiftplus die Pfeiltasten, um sich visuell auf den Links usw. auf der Seite zu bewegen, ein Ansatz, der den Sprunglink für gut sichtbare Tastaturnutzer unnötig macht. Das gleiche System wurde von Opera verwendet, bevor es auf Blink umgestellt wurde. Sie können Vivaldi auf die herkömmlicheTAB-Methode der Tastaturnavigation umstellen, indem Sie Spatial Navigation deaktivieren und „Webseiten-Fokus“ auf „Alle Steuerelemente und Links fokussieren“ einstellen.Danke! Tolle Lektüre und sehr informativ.
Danke für diesen Beitrag. Ich benutze bereits Sprunglinks, aber es ist schön, ein Update für 2021 zu haben! Gute Arbeit
Danke für diesen Bericht. Ich würde ein paar kleine Änderungen vorschlagen, wenn Sie zu einem tatsächlichen Link springen, anstatt den Bereich programmatisch zu fokussieren (was ich normalerweise tue). Erstens würde ich empfehlen, ihn in das ; einzufügen, auf diese Weise lesen Screenreader die Hauptlandmarke vor, wenn der Link den Fokus erhält. Wenn Sie dies tun, wird die Formulierung „Anfang des Hauptinhalts“ unnötig (und ist auch nicht wirklich wahr, wenn der Link außerhalb des ; liegt). Das Entfernen des Linktextes führt jedoch dazu, dass NVDA den Link als „Hauptlandmarke, klickbar“ ankündigt. Wenn Sie aria-hidden="true" auf den Link setzen, wird er dennoch fokussiert, aber es wird nichts für den Link selbst angekündigt, und Sie erhalten immer noch die Ankündigung der Hauptlandmarke.
Danke für das Feedback! Das Problem für mich bei der Entfernung des Linktextes des Ziel-Links ist, dass wir dann wichtiges Feedback verlieren würden, das für sehende Tastaturnutzer, die keine Screenreader verwenden, vorhanden ist. Ich bin unschlüssig, ob ich den Ziel-Link in das
<main>-Element einfügen soll. Es könnte semantisch sinnvoller sein, aber wenn ein Screenreader-Nutzer die Landmarkenrolle verwendet, um zum Inhalt zu springen, hört er zuerst den Link, bevor er den Inhalt selbst hört, und ich bin mir auch nicht sicher, ob es eine (geringe) negative SEO-Auswirkung haben könnte, weshalb ich mich entschieden habe, ihn direkt vor<main>statt darin zu platzieren.Hallo Paul, danke für deine Antwort (obwohl ich keinen Antwortlink für deinen Kommentar habe, so dass es aussehen könnte, als würde ich auf mich selbst antworten). Ich bin neugierig auf die Anmerkung, wichtiges Feedback für sehende Tastaturnutzer zu verlieren; die Seite scrollt normalerweise zu der Stelle, an der der Fokus aufgenommen wird, so dass dies für visuelles Feedback ausreichen sollte. Du hast Recht bezüglich des Links, der vor dem Inhalt vorgelesen wird (obwohl die Hauptlandmarke vor dem Linktext angekündigt werden sollte), weshalb ich dazu neige, ihn mit aria-hide zu versehen. Ich bin mir der SEO-Auswirkung nicht sicher, ich neige dazu zu denken, dass sie minimal bis gar nicht vorhanden wäre (Tests wären sicherlich erforderlich, um dies zu wissen), aber angesichts meines beruflichen Fokus bin ich normalerweise mehr auf Zugänglichkeit bedacht :) Am Ende gibt es natürlich viele Kleinigkeiten bei der Implementierung der Zugänglichkeit, aber einen Sprunglink zu haben ist meilenweit besser, als keinen zu haben, auch wenn die Implementierung leicht variiert.
Verzeihen Sie all die Kommentare, aber ich habe am Ende einen Blogbeitrag mit meinen Gedanken dazu geschrieben: https://plousia.com/blog/some-thoughts-css-tricks-deep-dive-skipping-content (ich hoffe, Links sind erlaubt). Bitte beachten Sie, dass diese darauf abzielen, eine zugängliche Implementierung noch besser zu machen, nicht überkritisch zu sein – das Wichtigste ist, einen funktionierenden Sprunglink zu haben, der Sie meilenweit von Websites entfernt, die keinen haben.
Feedback ist immer willkommen! Ich wollte nur meinen Punkt bezüglich des Feedbacks für Tastaturnutzer, die keinen Screenreader verwenden, klarstellen. Sie sagten, dass die Seite normalerweise dorthin scrollt, wo der Fokus gesetzt wird, wenn ein Seitenfragment für die Navigation verwendet wird, aber das ist nicht wirklich der Fall: Erstens muss die Seite lang genug sein, damit ein Scrollen möglich ist, sonst passiert überhaupt nichts. Die Scroll-Position kann auch ziemlich merkwürdig werden, wenn
fixedoderstickyPositionselemente vorhanden sind. Diese Methode vermeidet also diese Probleme und stellt sicher, dass es immer positives visuelles Feedback gibt, wohin der Tastaturfokus gegangen ist. Was den SEO-Punkt betrifft, so verwenden Suchmaschinen das<main>-Element, um den wichtigsten Aspekt einer Seite zu identifizieren, wobei dem Inhalt ganz oben in diesem Abschnitt das meiste Gewicht beigemessen wird. Das Belassen des Links außerhalb von<main>trägt also dazu bei, die Inhalte der Seite für sie etwas klarer zu machen.Danke, toller Artikel! Er kommt mir gerade recht, da immer mehr meiner Kunden nach Zugänglichkeitsfunktionen fragen.