Skip-Links sind kleine interne Navigationslinks, die Benutzern helfen, sich auf einer Seite zurechtzufinden. Es ist möglich, dass Sie noch nie einen gesehen haben, da sie oft nicht sichtbar sind und als Barrierefreiheitsverbesserung dienen, die es Tastaturnutzern und Screenreadern ermöglicht, vom oberen Seitenrand zum Inhalt zu springen, ohne zuerst andere Elemente auf der Seite durchlaufen zu müssen.
Tatsächlich finden Sie einen davon hier auf CSS-Tricks, wenn Sie die DevTools öffnen.

Meiner Meinung nach ist der beste Weg, einen Skip-Link zu implementieren, ihn zu verstecken und ihn dann sichtbar zu machen, wenn er fokussiert ist. Nehmen wir also an, wir haben einen Link im HTML
<a class="skip-to-content-link" href="#main">
Skip to content
</a>
… wir können ihm eine absolute Position geben und ihn vom Bildschirm weg verschieben
.skip-to-content-link {
left: 50%;
position: absolute;
transform: translateY(-100%);
}
Dann können wir ihn wieder sichtbar machen, wenn er fokussiert ist, und ihn dabei etwas stylen
.skip-to-content-link {
background: #e77e23;
height: 30px;
left: 50%;
padding: 8px;
position: absolute;
transform: translateY(-100%);
transition: transform 0.3s;
}
.skip-to-content-link:focus {
transform: translateY(0%);
}
Dies wird unseren Link verbergen, bis er fokussiert ist, und ihn dann sichtbar machen, wenn er fokussiert wird.
Nun lassen Sie mich näher darauf eingehen, beginnend mit diesem Zitat von Miles Davis
Zeit ist nicht die Hauptsache. Sie ist die einzige Sache.
Während ich in einem regnerischen Irland sitze, um diesen Artikel zu schreiben, denke ich an die Herausforderungen, denen sich viele Benutzer stellen, wenn sie das Web nutzen, was ich für selbstverständlich halte. Wir denken intensiv darüber nach, eine großartige Benutzererfahrung zu schaffen, ohne an *alle* unsere Benutzer und deren Bedürfnisse zu denken. Zugegebenermaßen hatte ich noch nie von einem Skip-Link gehört, bis ich einen Kurs bei Frontend Masters von Marcy Sutton absolvierte. Seitdem ich die Kraft und Einfachheit eines Skip-Links kenne, habe ich es mir zur Aufgabe gemacht, mehr Bewusstsein zu schaffen – und welche Plattform wäre besser als CSS-Tricks!
Eine Lösung ist die Antwort auf ein Problem. Was ist also die Lösung, um Tastaturnutzern und Screenreadern zu helfen, schnell den Inhalt einer Seite zu finden? Kurz gesagt, die Lösung ist *Zeit*. Benutzern die Möglichkeit zu geben, zu den Teilen unserer Website zu navigieren, die sie am meisten interessieren, gibt ihnen die Macht, wertvolle Zeit zu sparen.
Nehmen Sie zum Beispiel die Website von Sky News. Sie bietet eine „Skip to Content“-Schaltfläche, die es Benutzern ermöglicht, alle Navigationselemente zu überspringen und direkt zum Hauptinhalt zu springen.
Sie können diese Schaltfläche sehen, indem Sie mit Ihrer Tastatur zum oberen Seitenrand navigieren. Dies ähnelt der oben gezeigten Implementierung. Der Link ist immer im Dokument vorhanden, wird aber nur sichtbar, wenn er fokussiert ist.
Dies ist die Art von Skip-Link, die wir in diesem Beitrag gemeinsam erstellen werden.
Unsere Beispiel-Website
Ich habe eine Beispiel-Website erstellt, die wir zur Demonstration eines Skip-Links verwenden werden.
Die Website hat eine Reihe von Navigationslinks, aber aus Zeitgründen gibt es nur zwei Seiten: die **Startseite** und die **Blog-Seite**. Das ist alles, was wir brauchen, um zu sehen, wie die Dinge funktionieren.
Das Problem identifizieren
Hier ist die Navigation, mit der wir arbeiten

Insgesamt haben wir acht Navigationspunkte, die ein Tastaturnutzer und ein Screenreader durchlaufen müssen, bevor sie den Hauptinhalt unter der Navigation erreichen.
Das ist das Problem. Die Navigation ist für den Benutzer möglicherweise irrelevant. Vielleicht wurde dem Benutzer ein direkter Link zu einem Artikel gegeben und er möchte einfach nur zum Inhalt gelangen.
Dies ist ein perfekter Anwendungsfall für einen Skip-Link.
Den Link erstellen
Es gibt verschiedene Ansätze, um einen Skip-to-Content-Link zu erstellen. Was ich gerne tue, ähnelt dem Sky News-Beispiel, nämlich das Verstecken des Links, bis er fokussiert ist. Das bedeutet, wir können den Link oben auf der Seite oder in der Nähe platzieren, zum Beispiel im <header>-Element.
<header>
<a class="skip-link" href='#main'>Skip to content</a>
<!-- Navigation-->
</header>
Dieser Link hat eine .skip-link-Klasse, damit wir ihn stylen können. Das href-Attribut verweist auf #main, was die ID ist, die wir dem <main>-Element hinzufügen, das weiter unten auf der Seite kommt. Darauf springt der Link beim Klicken.
<header>
<a class="skip-link" href='#main'>Skip to content</a>
<!-- Navigation-->
</header>
<!-- Maybe some other stuff... -->
<main id="main">
<!-- Content -->
</main>
Hier ist, was wir haben, wenn wir den Link einfach ohne Styling in den Header einfügen.
Das sieht nicht gut aus, aber die Funktionalität ist vorhanden. Versuchen Sie, mit Ihrer Tastatur zum Link zu navigieren und Enter zu drücken, wenn er fokussiert ist.
Jetzt ist es an der Zeit, ihn hübsch zu machen. Wir müssen zuerst die Positionierung beheben und unseren Skip-Link nur anzeigen, wenn er fokussiert ist.
.skip-link {
background: #319795;
color: #fff;
font-weight: 700;
left: 50%;
padding: 4px;
position: absolute;
transform: translateY(-100%);
}
.skip-link:focus {
transform: translateY(0%);
}
Die Magie liegt hier in der transform-Eigenschaft, die unseren Skip-Link je nachdem, ob er fokussiert ist oder nicht, versteckt und anzeigt. Machen wir ihn mit einem schnellen Übergang auf der transform-Eigenschaft etwas schöner.
.skip-link {
/* Same as before */
transition: transform 0.3s;
}
Er wird nun schöner in Sicht übergehen.
Sie sollten jetzt (hoffentlich) haben, was ich unten habe
Wie Sie sehen können, umgeht der Skip-Link die Navigation und springt beim Klicken direkt zum <main>-Element.
Es ist OK, mehr als einen Link zu verwenden!
Derzeit erfüllt der Link nur einen Zweck, nämlich den Sprung zum Inhalt unserer Website. Aber wir müssen nicht dabei aufhören.
Wir können noch weiter gehen und einen Skip-Link mit mehr Optionen erstellen, z. B. eine Möglichkeit, zum Footer der Website zu springen. Wie Sie sich vorstellen können, ist dies dem, was wir bereits getan haben, recht ähnlich.
Machen wir die Blog-Seite der Beispiel-Website ein wenig benutzerfreundlicher, indem wir mehrere Skip-Links verwenden. Es ist üblich, dass Blogs AJAX verwenden, das mehr Beiträge lädt, wenn das Ende der Seite erreicht ist. Das kann es sehr schwierig machen, zum Footer der Website zu gelangen. Das ist das Problem, das wir in diesem Fall lösen wollen.
Fügen wir also einen zweiten Link hinzu, der all diese Auto-Loading-Geschichten umgeht und den Benutzer direkt zu einem #footer-Element auf der Seite springen lässt.
<div class="skip-link" >
Skip to <a href='#main'>content</a> or <a href='#footer'>footer</a>
</div>
Wir müssen auch unser CSS ein wenig anpassen und den :focus-within-Pseudo-Selektor verwenden.
.skip-link {
transform: translateY(-100%);
}
.skip-link:focus-within {
transform: translateY(0%);
}
Dies besagt, dass, wenn *irgendetwas* innerhalb unseres .skip-link-Elements den Fokus hat, wir es anzeigen. Leider unterstützen weder Internet Explorer noch Opera Mini focus-within, aber die Abdeckung ist ziemlich gut und es gibt ein Polyfill.
Diese Browser-Support-Daten stammen von Caniuse, wo Sie weitere Details finden. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 60 | 52 | Nein | 79 | 10.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 10.3 |
Das Letzte, was wir tun müssen, ist sicherzustellen, dass unser Footer-Element eine ID hat, damit der Link etwas hat, zu dem er springen kann.
<footer id="footer">
Hier ist, was uns das gibt
Wenn wir noch einen Schritt weiter gehen wollten (und ich würde es ermutigen), könnten wir jeden Link ein wenig anders gestalten, damit die Benutzer die beiden unterscheiden können. Beide Links in diesem Beispiel sind schlicht weiß, was gut für einen einzelnen Button ist, der eine einzelne Sache tut, aber es wäre klarer, dass wir es mit zwei Links zu tun haben, wenn sie unterschiedlich dargestellt würden.
Zu Schlussfolgerungen springen
Verwenden Sie Skip-Links auf Ihrer Website? Oder, wenn nicht, überzeugt Sie das, einen zu verwenden? Ich hoffe, es ist klar, dass Skip-Links einen großen Mehrwert für die Barrierefreiheit einer Website darstellen. Obwohl es kein Allheilmittel ist, das alle Barrierefreiheitsbedürfnisse löst, löst es einige Anwendungsfälle, die zu einer viel ausgefeilteren Benutzererfahrung führen.
Hier sind einige prominente Websites, die diese oder eine ähnliche Technik verwenden
Toller Beitrag, danke fürs Schreiben!
Eine weitere schöne Sache, die Sie mit Skip-Links machen können, ist, sie vor Inhaltsabschnitten bereitzustellen, die viele interaktive Elemente enthalten oder Elemente, die schwer zu navigieren sind (wie Inhaltsverzeichnisse und
iframes).Die Idee hier ist dieselbe wie bei einem Skip-to-main-content-Link, nämlich dass Sie einen Mechanismus bereitstellen, um etwas zu überspringen, das wiederholend und/oder mühsam zu navigieren sein kann. Anstatt zum Hauptinhalt der Seite zu springen, springen Sie nur an dem Element vorbei und fahren sofort danach fort. Zum Beispiel
Bitte stellen Sie sicher, dass Sie mit den Browsern Ihrer Zielbenutzer testen (schauen Sie sich zum Beispiel Ihre Protokolle an). Möglicherweise müssen Sie den Code anpassen, damit er ordnungsgemäß funktioniert.
Zum Beispiel: Öffnen Sie IE11, tippen Sie zum Skip-Link, drücken Sie Enter, um ihn zu aktivieren, und drücken Sie dann erneut Tab.
Obwohl der Viewport das Ziel des Skip-Links visuell sichtbar machen mag, bedeutet das nicht, dass der Tastaturfokus verschoben wurde.
Ja, das ist ärgerlich. Umso mehr, als Skip-Links seit 1998 existieren und obwohl einige Browser diesen Fehler behoben haben (Chrome brauchte zwei Versuche), einige es nicht tun werden und einige Benutzer auf alten, gesperrten Computern sind.
Eine Problemumgehung ist das Hinzufügen von
tabindex="-1"zum<main>WebAIM erwähnt diese Eigenheiten in seinem Artikel von 2013. Hampus Sethfors hat Videobeispiele für weitere Merkwürdigkeiten aus dem Jahr 2018, aber seien Sie vorsichtig mit den aufgeführten Lösungen, ohne sich zuerst die Browserübersicht Ihrer Benutzer anzusehen.
Adrián, das hast du genau richtig getroffen! Danke für deine Anleitung
Danke für den Tipp. Können Sie näher erläutern, warum tabindex="-1" dies behebt?
Ah, toller Tipp!
FS, das Folgen eines Ankerlinks verschiebt den Fokus nur, wenn das Element den Fokus annehmen kann. In diesem Beispiel ist
<main>weder ein Steuerelement noch interaktiver Inhalt, daher nimmt es den Fokus nicht an. Das Hinzufügen vontabindex="-1"ermöglicht es, den Fokus anzunehmen, ohne es in die Tabulatorreihenfolge der Seite aufzunehmen. Wenn Sietabindex="0"verwenden würden, wäre es ein Tab-Stopp beim Durchlaufen der Seite, was niemand möchte.Um dies in Aktion zu sehen, nehmen Sie den Beispielstift (ich habe die Debug-Ansicht verlinkt, damit sie in IE11 funktioniert), testen Sie ihn so, wie ich es in meinem ursprünglichen Kommentar beschrieben habe, und ändern Sie ihn dann in den Entwicklertools mit den beiden
tabindex-Werten, während Sie den Tastaturtest wiederholen. Es ist etwas schwer zu sehen, da es keine Fokusstile für den Startknopf oder, nun ja, irgendetwas im Beispiel gibt.Hoffentlich klärt das die Unterschiede auf.
Ich bin kein Facebook-Fan, aber sie haben eine wirklich gute Multi-Link-Version.
Da dies gerade mit einem Kunden aufkam, möchte ich es auch hier notieren…
Dieser Beitrag zeigt, wie man einen sichtbaren Skip-Link erstellt, was gut ist. Ein Skip-Link muss sichtbar werden, wenn man ihn mit Tab ansteuert. Man muss sehen, dass er den Fokus hat. Wenn man das nicht tut, verstößt man gegen WCAG SC 2.4.7 Focus Visible (AA). Tastatur-nur-Benutzer oder sehende Screenreader-Benutzer benötigen dies.
Im Newsletter #191 wird dieser Artikel von Paul Ryan beachtet. Auch der Skip-Link auf dieser CSS-Tricks-Seite wird im Newsletter erwähnt („besonders für Screenreader“). Das stimmt.
Aber auf der CSS-Tricks-Seite wird der Skip-Link für Tastaturnutzer (= kein endloses Tabbing durch alle Menüpunkte) … vergessen! Paul Ryan richtet sich an beide: Screenreader-Benutzer **und** Tastaturnutzer.
Ich vermute, die Lösung besteht darin, in den CSS-Tricks-Stilen hinzuzufügen
Hmm, ich stimme Adrian zu, aber…
Technisch gesehen ist dies ein vollständigerer Ansatz
Ich möchte erwähnen, dass die feste Position bei Skip-Links weiterhin in Dokumenten angezeigt wird, wenn Sie die Website drucken.
Also technisch gesehen haben wir etwas kaputt gemacht, ohne uns darum zu kümmern, während wir versuchen, unsere Website für alle Benutzer zugänglich zu machen.
Überprüfen Sie den Thread https://twitter.com/Muhnad_a/status/1255204759583285250
Wie man es reproduziert
– Öffnen Sie CodePen im Debug-Modus.
– Drucken Sie die Seite (cmd+p) auf Mac (ctr+p) auf Windows.
– Überprüfen Sie die Druckseite, Sie werden feststellen, dass der „Skip to Content“-Link auf der Seite gedruckt wird.
Guter Punkt, gut gemacht.
Ich habe hinzugefügt
Seit diesem Artikel wurde die Lösung weiterentwickelt, um alle Links auf der Seite einzubeziehen.
Ich habe 3 Optionen vorgeschlagen, um dies zu beheben, in PR https://github.com/Muhnad/skip-links/pull/5
Eine davon war, das Element im Druckmodus zu verstecken, genau wie Sie es getan haben.
Ich habe darüber als UX nachgedacht und festgestellt, dass die feste Position für die Links nicht die beste Lösung ist, also bin ich auf die absolute Position umgestiegen.
Schöne Erklärung, aber… Entschuldigung, ich verstehe es nicht ganz ;-(. Was genau meinen Sie bitte mit „Sie können diese Schaltfläche sehen, indem Sie mit Ihrer Tastatur zum oberen Seitenrand navigieren“?
Ich stelle diese scheinbar dumme Frage, da ich das Verhalten, das in den Animationen gezeigt wird, nicht ganz reproduzieren kann. Bis vor kurzem habe ich auf den oberen Bereich der Seite geklickt und dann die Tabulatortaste gedrückt.
Aber so kann ich einen Skip-Link nur verwenden, wenn es keinen anderen Link auf der Seite gibt. Denn: Sobald ich einen zweiten Link (einen normalen Link, der immer sichtbar ist, keinen Skip-Link) in das HTML einfüge, z. B. aus dem ersten Code-Pen, wird meine erste Tabulatoraktion auf der gerenderten Seite auf den neuen (d. h. normalen) Link zielen, aber nicht mehr auf den Skip-Link, wie es vorher war. In diesem Fall ist der Skip-Link für mich nur erreichbar, indem ich *von dem normalen Link, der auf die erste Weise angesprochen wurde, zurück-tabbiere*. Das gleiche Verhalten gilt für den Code-Pen im Abschnitt „Den Link erstellen“, nachdem der Skip-Link durch die zusätzlichen Stile unsichtbar gemacht wurde.
Was mache ich falsch?
Aktuell scrollt in Chrome, wenn der „Skip To Content“-Link-Tag in einem Sticky-Header vorhanden ist, die Seite bei jedem Fokus um etwa eine halbe Bildschirmseite nach oben. Hat das noch jemand erlebt?