Skip Link
Community
Verborgen mogelijkheid om snel naar een ander deel van de pagina te navigeren zonder gebruik te maken van een muis of touchscreen.
Anatomie
Definition of Done
-
Afgevinkt.
Naam
Naam bepaald op basis van NL Design System naamgeving. -
Afgevinkt.
Beschrijving
Doel van component is in één zin beschreven. -
Afgevinkt.
Afbeelding
Afbeelding gemaakt om de component visueel duidelijk te maken. -
Afgevinkt.
Discussion URL
-
Afgevinkt.
Backlog
Staat in de publieke backlog van NL Design System. -
Afgevinkt.
Bruikbaar
Bewijs verzameld dat de component algemeen bruikbaar is. -
Afgevinkt.
Link
Link beschikbaar naar component in Figma of Storybook met alle belangrijke states en varianten. -
Afgevinkt.
Varianten
Naam en doel van benodigde varianten beschreven. -
Afgevinkt.
Onderzoek
Nut van component is onderbouwd door gebruikersonderzoek. -
Afgevinkt.
Kernteam
Kernteam verwacht dat dit component tot Hall of Fame kan komen. -
Afgevinkt.
nldesignsystem.nl
Vindbaar op de NL Design System website.
-
Afgevinkt.
Welk bord
-
Afgevinkt.
GitHub (CSS)
-
Afgevinkt.
Storybook (CSS)
-
Afgevinkt.
Implementatie voldoet
-
Afgevinkt.
Minimale design tokens
-
Afgevinkt.
Prefix
-
Afgevinkt.
Naamgeving design tokens
-
Afgevinkt.
Licentie component
-
Afgevinkt.
Licentie documentatie
-
Afgevinkt.
Storybook thema's
-
Afgevinkt.
Visuele regressietest
-
Afgevinkt.
Figma URL
-
Afgevinkt.
nldesignsystem.nl
-
Afgevinkt.
Component assessment
-
Afgevinkt.
Promotie
-
Niet afgevinkt.
≥2 Thema's
-
Afgevinkt.
Versimpeld of gesplitst
-
Niet afgevinkt.
API gemeenschappelijk
-
Niet afgevinkt.
API conventie
-
Niet afgevinkt.
Design tokens conventie
-
Niet afgevinkt.
Common tokens
-
Afgevinkt.
Design tokens nuttig
-
Afgevinkt.
Storybook NLDS
-
Niet afgevinkt.
Figma in lijn
-
Afgevinkt.
Figma NLDS
-
Niet afgevinkt.
Coverage features
-
Niet afgevinkt.
Semantiek goedgekeurd
-
Niet afgevinkt.
A11y getest
-
Afgevinkt.
i18n getest
-
Niet afgevinkt.
Content flexibel
-
Afgevinkt.
Linting en formatting
-
Niet afgevinkt.
NPM (candidate)
-
Niet afgevinkt.
Changelog
-
Afgevinkt.
Documentatie aliassen
-
Niet afgevinkt.
Documentatie anatomie
-
Niet afgevinkt.
Documentatie op website
-
Niet afgevinkt.
Documentatie a11y
-
Niet afgevinkt.
Documentatie onderzoek
-
Niet afgevinkt.
Documentatie getest
-
Niet afgevinkt.
Do and don't voorbeelden
-
Niet afgevinkt.
HTML/CSS
-
Niet afgevinkt.
Gebruikersonderzoek
-
Niet afgevinkt.
Webcomponent
-
Niet afgevinkt.
React
-
Niet afgevinkt.
API unit tests
-
Niet afgevinkt.
A11y audit
-
Niet afgevinkt.
NPM
-
Niet afgevinkt.
Semver
-
Niet afgevinkt.
Figma geversioneerd
-
Niet afgevinkt.
Figma changelog
-
Niet afgevinkt.
Code changelog
-
Niet afgevinkt.
Richtlijnen design tokens
-
Niet afgevinkt.
Richtlijnen redacteuren
-
Niet afgevinkt.
Beveiliging
-
Niet afgevinkt.
Privacy
-
Niet afgevinkt.
Getest met designers
-
Niet afgevinkt.
Getest met developers
-
Niet afgevinkt.
Getest met redacteuren
-
Niet afgevinkt.
≥2 organisaties geswitcht
Implementaties
Community Amsterdam
11 van 11 stappen gedocumenteerd op het Community Amsterdam projectbord
Component gebruiken?
Community Utrecht
11 van 11 stappen gedocumenteerd op het Community Utrecht projectbord
Component gebruiken?
Acceptatiecriteria
Gebruik jij één van de implementaties van deze component of heb je je eigen component gemaakt? In beide gevallen geldt: met onderstaande acceptatiecriteria kun je nagaan of jouw gebruik van deze component klopt met NL Design System.
Als je implementatie voldoet aan de acceptatiecriteria voor dit component, kun je er vanuit gaan dat je gebruik van dit component voldoet aan WCAG, niveau A en AA, en voor twee succescriteria aan niveau AAA (2.4.13 Focusweergave en 2.5.5 Grootte van het aanwijsgebied uitgebreid).
Het label van de Skip Link bestaat uit gewone tekst, niet uit een afbeelding van tekst
Gebruik geen afbeeldingen van tekst, wanneer je ook gewone tekst kan gebruiken met vergelijkbare visuele opmaak.
Wanneer het technisch niet mogelijk is om een tekst er uit te laten zien zoals bedoeld, dan zijn er twee uitzondering om een afbeelding te gebruiken.
- De tekst in een logo, die hoort bij het beeldmerk.
- De gebruiker kan weergave van de afbeelding wijzigen, zoals font, kleur en tekstgrootte.
De linktekst van de Skip Link vertelt eenduidig aan de gebruiker waar de link naar toe gaat (het linkdoel)
De linktekst vertelt eenduidig aan de gebruiker waar de link naar toe gaat (het linkdoel).
Wat is een linktekst? Het is de tekst die zichtbaar is, maar ook de tekst die aan een gebruiker van hulpsoftware wordt voorgelezen.
Wat is het linkdoel? De locatie waar de link naartoe gaat. Bijvoorbeeld de contactpagina, een nieuwsbericht, een andere website of een download van een document.
Wat betekent In context? Het doel van de link kan ook door omringende content worden aangegeven. Dit moet dan wel ook voor gebruikers van hulpmiddelen duidelijk zijn, bijvoorbeeld door aanvullende tekst of een afbeelding naast de link. Dit laatste is onderwerp van veel discussie. Het beste is om altijd goed in de linktekst zelf te vertellen want het doel is.
Als de gebruiker de Skip Link indrukt met een aanwijzer zoals een muis of vinger, is er de mogelijkheid is om actie te voorkomen of ongedaan te maken
Als de gebruiker een interactief element indrukt met een aanwijzer zoals een muis of vinger, is er de mogelijkheid is om actie te voorkomen of ongedaan te maken.
Dat kan op meerdere manieren:
- De actie gebeurt pas bij het
up
-event, en de gebruiker kan nog de aanwijzer verplaatsen naar buiten het element om hetup
-event te voorkomen. - De actie gebeurt bij het
down
-event, maar bij hetup
-event wordt het effect weer ongedaan gemaakt. - Je kunt het effect achteraf weer ongedaan maken.
De zichtbare naam van de Skip Link komt voor in de toegankelijke naam
- WCAG
- 2.5.3 Label in naam
De zichtbare naam van de link is gelijk aan, of begint met de toegankelijke naam.
Dit is het eenvoudigst te realiseren door een a
-element te gebruiken met daarin tekst.
Pas op met het gebruik van aria-label
om een naam te geven aan een link. Een aria-label
overschrijft de tekstinhoud van een link. Zodoende kan een link een toegankelijke naam krijgen die anders is dan de zichtbare naam, waardoor mensen die hulpsoftware gebruiken moeilijkheden kunnen krijgen met het bedienen van de link. Als je echt een aria-label
nodig hebt, zorg dan dat de waarde van het aria-label
begint met de exacte tekst die zichtbaar is in de link.
Dus niet:
codevoorbeeld<!-- Dit is een fout voorbeeld, niet kopiëren -->
<a href="login-url" aria-label="Klik hier om in te loggen">Log in met DigiD</a>
Maar:
codevoorbeeld<a href="login-url">Log in met DigiD</a>
NL Design System richtlijnen:
De Skip Link heeft een aanklikbaar gedeelte van ten minste 44 bij 44 pixels
Zorg ervoor dat het element een minimale grootte heeft van 44 bij 44 pixels. Definieer hoogte en de breedte niet in px
, maar gebruik een relatieve waarde als em
of rem
. Anders kan het element niet goed meegroeien wanneer de gebruiker inzoomt.
Let op: Links in zinnen en paragrafen van tekst zijn uitgezonderd. De grootte van het aanwijsgebied is hier afhankelijk van de grootte van de linktekst zelf.
NL Design System richtlijnen:
Als de Skip Link toetsenbordfocus krijgt vindt er geen contextwijziging plaats
- WCAG
- 3.2.1 Bij focus
Verras een gebruiker niet als die een interactief element focus geeft. Maak functionaliteit voorspelbaar en daardoor goed te begrijpen.
Als een gebruiker een component focus geeft met het toetsenbord of door erop te klikken met de muis, zorg dan dat die actie niet automatisch een contextwijziging veroorzaakt.
Bij een contextwijziging verandert onverwacht de indeling, informatie, toetsenbordfocus of functionaliteit. Bijvoorbeeld door het direct versturen van een formulier na het kiezen van een select-optie, waarna de gebruiker naar een andere pagina wordt doorgestuurd.
Skip Links die op meerdere pagina's voorkomen staan in dezelfde relatieve volgorde
Zorg ervoor dat navigatie-componenten die voorkomen op meerdere pagina's overal op dezelfde manier werken. De navigatie staat op dezelfde plek op elke pagina, en de onderdelen staan in dezelfde volgorde.
Denk hierbij aan de skiplink, het hoofdmenu, de zoekoptie en de links in de footer. Dit maakt de structuur van de website makkelijker te begrijpen en hierdoor kan de gebruiker sneller navigeren.
De tekstkleur van de Skip Link heeft voldoende contrast met de achtergrondkleur
De contrastverhouding van de tekstkleur met de achtergrondkleur is hoog genoeg. Minimale contrastverhoudingen:
- 4,5:1 contrast voor normale tekst.
- 3:1 contrast voor grotere letters (vanaf 24 pixels).
- 3:1 contrast voor vette letters (vet en groter of gelijk aan 19 pixels).
Hogere verhoudingen mogen natuurlijk altijd. Met de Contrast checker kun je controleren of je gekozen kleuren voldoen. Denk erom dat dit moet gelden voor alle achtergrondkleuren waarop de tekst geplaatst kan worden. Het kan dus zijn dat je meerdere checks moet doen.
NL Design System richtlijnen:
Als je de tekstafstand vergroot blijft de tekst in zijn geheel zichtbaar
- WCAG
- 1.4.12 Tekstafstand
Als je de tekstafstand vergroot blijft de tekst in zijn geheel zichtbaar. Dit gaat om regelhoogte, afstand tussen alinea's, letterafstand en ruimte tussen woorden.
Zorg ervoor dat het element mee kan groeien met de tekst. Geef de breedte en de hoogte dus niet hard op in pixels.
Je moet de afstand kunnen vergroten naar deze waardes:
- Regelhoogte (regelafstand) naar ten minste 1,5 keer de lettergrootte;
- Afstand tussen alinea's naar ten minste 2 keer de lettergrootte;
- Letterafstand (spatiëren van letters) naar ten minste 0,12 keer de lettergrootte;
- Spatiëren van woorden naar ten minste 0,16 keer de lettergrootte.
Dit is te testen met een bookmarklet of door in de inspector van de browser de volgende code toe te voegen aan de head
van de pagina:
<style>
body * {
line-height: 1.5 !important;
letter-spacing: 0.12em !important;
word-spacing: 0.16em !important;
}
body p {
margin-bottom: 2em !important;
}
</style>
NL Design System richtlijnen:
Wanneer de Skip Link de toetsenbordfocus krijgt is de focus zichtbaar
Een Skip Link die standaard verborgen is, moet bij focus zichtbaar worden.
Verberg de Skip Link nooit met display:none
. Dit haalt de link uit de accessibility tree en is dan niet meer te gebruiken met hulpapparatuur of met het toetsenbord.
NL Design System richtlijnen:
De Skip Link heeft een goed zichtbare focusindicator
- WCAG
- 2.4.13 Focusweergave
Er is een goed zichtbare focusindicator. Dit doe je met een minimale dikte van 2 pixels en een minimaal contrast van 3:1 ten opzichte van aangrenzende kleuren. Hou ook rekening met het contrast met de verschillende achtergrondkleuren waarop een element gebruikt kan worden. Met de Contrast checker kun je controleren of je gekozen kleuren voldoen.
NL Design System richtlijnen:
De Skip Link heeft een aanklikbaar gedeelte van ten minste 44 bij 44 pixels
Zorg ervoor dat het element een minimale grootte heeft van 44 bij 44 pixels. Definieer hoogte en de breedte niet in px
, maar gebruik een relatieve waarde als em
of rem
. Anders kan het element niet goed meegroeien wanneer de gebruiker inzoomt.
Let op: Links in zinnen en paragrafen van tekst zijn uitgezonderd. De grootte van het aanwijsgebied is hier afhankelijk van de grootte van de linktekst zelf.
NL Design System richtlijnen:
Skip Links met gelijke functies hebben hetzelfde uiterlijk en hetzelfde label
Links die dezelfde functie hebben binnen een website, zien er hetzelfde uit en werken ook hetzelfde.
NL Design System richtlijnen:
Als je de tekst vergroot tot 200% blijft deze in zijn geheel zichtbaar
Als je de tekst vergroot tot 200% (via browserzoom en via de browserinstellingen voor tekstgrootte) blijft de tekst in zijn geheel zichtbaar.
Zorg ervoor dat het element mee kan groeien met de tekst. Geef de breedte en de hoogte dus niet hard op in pixels.
NL Design System richtlijnen:
Als je de hele webpagina inzoomt tot 400% blijft veroorzaakt de Skip Link veroorzaakt geen horizontale scrollbalk en alle tekst op de pagina blijft leesbaar
- WCAG
- 1.4.10 Reflow
De gebruiker moet de webpagina 400% kunnen vergroten in de browser. Het gaat hierbij om alle elementen van een webpagina.
Alle functies, zoals het menu, moeten werken en zichtbaar zijn. Alle tekst moet leesbaar zijn.
Er mag geen inhoud buiten beeld vallen, onbereikbaar of verborgen zijn of gedeeltelijk verborgen worden door andere inhoud wanneer de gebruiker 400% inzoomt of op een buitengewoon klein scherm werkt (320 bij 256 CSS).
Zorg ervoor dat er geen horizontale scrollbar nodig is. Uitzonderingen zijn voor onderdelen die in essentie twee-dimensionaal zijn, zoals bijvoorbeeld: tabellen, grafieken, video's en landkaarten.
Je kunt de Skip Link focussen met de tabtoets en activeren met de entertoets
- WCAG
- 2.1.1 Toetsenbord
Je kunt de link focussen met de tabtoets en activeren met de entertoets.
Als een gebruiker de Skip Link focust met het toetsenbord, dan moet deze ook weer weg kunnen gaan met het toetsenbord
Wanneer een gebruiker met het toetsenbord de focus verplaatst naar een deel van de pagina, dan moet deze ook weer weg kunnen gaan met het toetsenbord. De gebruiker kan daarvoor bijvoorbeeld de Tab-toets, Escape-toets of de pijltjestoetsen gebruiken. Zo niet, beschrijf dan met welke toets het wel kan.
Als een toetsenbordgebruiker niet verder kan in de pagina, zonder goede uitleg, dan zit deze in de val. Dit is een blokkade bij het navigeren van een website met het toetsenbord alleen.
De Skip Link slaat een contentblok over dat op meerdere pagina's voorkomt
Geef gebruikers van hulpmiddelen de mogelijkheid om binnen een pagina snel te navigeren door onderdelen, zoals een menu, te kunnen overslaan.
Gebruikers die de website van boven naar beneden doornemen moeten makkelijk grote stukken content kunnen overslaan om bijvoorbeeld direct naar de hoofdinhoud kunnen gaan. Het gaat hierbij om grote stukken content die op elke pagina herhaald wordt, zoals de hoofdnavigatie en een filter.
Dan voorkom je dat een toetsenbordgebruiker eerst door een menu of filter moet tabben om bij een link in de hoofdinhoud te komen.
De Skip Link staat op een logische plek in de focusvolgorde
- WCAG
- 2.4.3 Focus volgorde
Wanneer een toetsenbordgebruiker binnen de webpagina navigeert, bijvoorbeeld met de Tab-toets, moet de tabvolgorde logisch en voorspelbaar zijn.
De visuele focusvolgorde moet betekenisvol zijn.
Wanneer de Skip Link de toetsenbordfocus krijgt is de focus zichtbaar
Een Skip Link die standaard verborgen is, moet bij focus zichtbaar worden.
Verberg de Skip Link nooit met display:none
. Dit haalt de link uit de accessibility tree en is dan niet meer te gebruiken met hulpapparatuur of met het toetsenbord.
NL Design System richtlijnen:
De Skip Link wordt niet bedekt door een ander element op de pagina
Zorg ervoor dat een element dat de toetsenbordfocus heeft zichtbaar is en niet volledig bedekt is door andere inhoud.
Als de tekst van de Skip Link in een andere taal is dan de taal van de pagina, dan heeft het element een lang-attribuut met de juiste taalcode
Als een tekst in een andere taal is dan de taal van de pagina, dan heeft het element een lang
-attribuut met de juiste taalcode.
Denk bijvoorbeeld aan buttons voor het veranderen van de taal van een pagina, bij meertalige websites. Of aan een citaat in het Engels, op een Nederlandstalige pagina.
De Skip Link heeft een rol van link en een toegankelijke naam die duidelijk maakt waar de Skip Link voor dient
De link heeft een rol van link
en een toegankelijke naam die duidelijk maakt waar de link voor dient.
HTML-elementen hebben een impliciete rol. Maak daar gebruik van. Kies daarom een a
-element als je een link nodig hebt:
<a href="url">Contact</a>
Het is mogelijk om met ARIA een role="link"
toe te voegen aan een ander element dan een a
, maar dit is niet aan te raden. Heb je het absoluut nodig, zorg er dan voor dat het gekozen element ook voldoet aan de verwachte toetsenbordinteractie, focusstijl, etc. Let erop dat je hiervoor JavaScript nodig hebt.
Help component verbeteren
We vinden het belangrijk dat de component Skip Link goed te gebruiken is door iedereen. Help je mee?
- Vul de GitHub Discussion aan met de eisen en wensen voor jouw project of organisatie.
- Draag bij aan de voortang van Skip Link door te zorgen dat deze aan meer checkpoints van de Definition of Done voldoet. Deze houden we bij in de projectborden bij de publieke GitHub Backlog.