WCAG-succescriterium 2.1.1 Toetsenbord
Niveau A
Alle functionaliteit is te gebruiken met een toetsenbord.
Als een pagina niet werkt voor een toetsenbord, dan werkt het ook niet voor technieken die werken als een toetsenbord. Websites zijn vaak ingericht op het gebruik van een touchscreen of een muis. Deze apparaten worden veel gebruikt, maar niet iedereen kan deze apparaten gebruiken. Een website moet daarom ook werken voor andere apparaten en technieken.
Uitleg
Alle interactieve elementen op een pagina moet je kunnen bereiken en bedienen met het toetsenbord. Dit zijn bijvoorbeeld buttons, links, en invoervelden. In HTML zijn dit <button>, <a> en <input>.
- Je bereikt interactieve onderdelen op een pagina met tab en de combinatie shift+tab. tab navigeert je van het ene naar het andere interactieve onderdeel in een logische volgorde (WCAG-successcriterium 2.4.3 Focus volgorde). shift+tab doet hetzelfde, maar in omgekeerde volgorde.
- Bij onderdelen met eigen subonderdeel zijn pijltjestoetsen nodig. Voorbeelden zijn radio-buttons, sliders, tabbladen en kalenders. Een groepering zoals een kalender is bereikbaar met tab. Losse dagen zijn daarna bereikbaar met pijltjestoetsen.
-
Het activeren of bedienen van elementen moet ook met het toetsenbord kunnen.
- Een link is te activeren met enter.
- Een button is te activeren met enter en de spatiebalk.
- Selecties binnen een onderdeel maakt men met de spatiebalk.
- Er zijn andere manieren om het toetsenbord te gebruiken. Acties kun je annuleren met esc en je kan navigeren met toetsen als home en end. Als er bij zelfgebouwde elemente twijfel is hoe die bediend moeten worden, vergelijk dan met pure HTML.
Voordelen
Het toetsenbord zelf is een veel gebruikt hulpmiddel voor mensen met een beperking. Niet iedereen kan een muis of andere invoerapparaten gebruiken. Dit criterium is ook voor tal van apparaten die werken als een toetsenbord. Dit zijn bijvoorbeeld een screenreader of een eenfunctieschakelaar. Screenreaders worden vooral gebruikt door mensen met een visuele beperking, maar ook door mensen met cognitieve beperkingen. Daarnaast zijn er tal van hulpmiddelen zoals de eenfunctieschakelaar die gebruikt worden door mensen met motorische beperkingen.
Werkende toetsenbordbediening helpt mensen met beperkingen maar ook andere mensen. Dit zijn bijvoorbeeld power users en mensen regelmatige bezoekers die sneller werken met een toetsenbord.
Hoe te testen
Lees in de uitleg hoe een toetsenbord zou moeten werken. Voor elk onderdeel waarmee je iets kan bedienen moet het volgende kloppen:
- Je kan het onderdeel bereiken met je toetsenbord.
- Je kan het onderdeel bedienen met je toetsenbord.
Deze tests moeten ook slagen als de website ingezoomd is. Er kunnen dan andere interactieve elementen aanwezig zijn.
Als je op MacOS test en het werkt niet zoals verwacht, dan kan het zijn dat instellingen niet goed staan. Er zijn instellingen op zowel system- als browserniveau die goed moeten staan. Lees hoe dit moet op de Engelstalige pagina How to activate keyboard navigation on MacOS.
Een formulier kan heeft niet altijd een knop nodig om verzonden te worden. Soms kan verzenden met enter in plaats van met een <button>. Dit heet implicit submission.
Veelgemaakte fouten
Custom components zijn niet gebouwd voor het toetsenbord
Dit probleem kan opgelost worden door developers en designers.
Probleem
Onderdelen worden zelf gebouwd. Dit zijn ongewone en creatieve onderdelen die bestaande componenten combineren, maar ook simpelere elementen zoals een <button> die HTML al biedt. Bij zelfbouw wordt toegankelijkheid niet altijd goed getest wordt.
Een element met een role is niet meteen bruikbaar. Een <div> met role="button" geeft aan dat dit element zich wil gedragen als een button. Dit maakt het element nog niet bruikbaar. Het mist de functionaliteit van een button.
Oplossing
De makkelijkste oplossing is als er native HTML gebruikt kan worden. Dit werkt in de basis goed, en is makkelijker te gebruiken, bouwen en onderhouden dan zelfbouw.
Als dit geen mogelijkheid is kan er een maatwerk component gebouwd worden. Doe dit alleen als er uitvoerig getest kan worden. Let bij het bouwen op het volgende:
- Het element is te bereiken met het toetsenbord. Dit kan met
tabindex="0". - Het element is te bedienen met het toetsenbord. Hier is JavaScript bij nodig. Een
click-event werkt onder andere met muis, aanraking en toetsenbord. - Het element heeft een
rolevoor WCAG-succescriterium 4.1.2 Naam, rol, waarde. - Het element heeft een toegankelijke naam voor WCAG-succescriterium 4.1.2 Naam, rol, waarde.
- Het element heeft passende states en properties voor WCAG-succescriterium 4.1.2 Naam, rol, waarde.
- Het is zichtbaar wanneer het element focus heeft. Dit valt onder WCAG-succescriterium 2.4.7 Focus Zichtbaar.
De volgorde in de code komt niet overeen met wat er te zien is
Dit probleem kan opgelost worden door developers.
Probleem
Uitklappende menus en andere overlappende onderdelen zoals chatvensters zijn lastig voor het toetsenbord. Op het oog worden ze bij een ander onderdeel geplaatst. Bijvoorbeeld bij een button. In de code staan ze ergens anders. Voor een toetsenbord is het uitklappende onderdeel dan lastig te vinden en bereiken.
Oplossing
De code van een uitklappend onderdeel plaats je direct na de button die het opent. Zo zit het voor de navigatie volgorde op een logische plek. De gebruiker opent iets, en met een opvolgende tab is het gefocust.
Dialoogvensters krijgen geen focus
Dit probleem kan opgelost worden door developers.
Probleem
Bij het openen van een dialoogvenster wordt de focus hier niet naar verplaatst. Dit moet wel om het venster te kunnen bedienen.
Oplossing
Welk onderdeel de focus krijgt hangt af van de inhoud van het venster. Dit wordt uitgelegd op de Engelstalige pagina Dialog (Modal) Pattern van de ARIA Authoring Practices Guide (APG). Als een dialoogvenster sluit moet de focus weer terug naar het element dat het opende.
Functies werken alleen met hover
Dit probleem kan opgelost worden door developers en designers.
Probleem
Uitklappende menus, tooltips en soortgelijke elementen werken soms alleen bij een hover. Deze moeten ook werken met het toetsenbord.
Oplossing
Als iets uitklapt, moet het geactiveerd kunnen worden met het toetsenbord. Daarnaast moet de inhoud ook te bereiken zijn met het toetsenbord. Extra hints of informatie zoals die in een tooltip kan soms ook via aria-describedby gecommuniceerd worden.
Tabindex wordt verkeerd toegepast
Dit probleem kan opgelost worden door developers.
Probleem
Het attribuut tabindex geeft vaak problemen. Een tabindex met een waarde van '-1' maakt een element onfocusbaar. Een tabindex met de waarde '0' maakt een element focusbaar. Een tabindex met een positieve waarde van 1 of meer verandert de focusvolgorde en is slecht te onderhouden.
Oplossing
Voeg geen tabindex="0" toe aan elementen die niet interactief zijn, zoals paragrafen. Deze hoeven niet met het toetsenbord bereikt te worden. Gebruik geen positieve tabindex.
Kaarten en andere datavisualisaties zijn niet te bedienen
Dit probleem kan opgelost worden door developers of contentmakers.
Probleem
Kaarten en andere datavisualisaties zijn vaak slecht bereikbaar voor het toetsenbord. Deze ingewikkelde onderdelen zijn lastig toegankelijk te maken.
Oplossing
Probeer de oplossingen die bij custom components gegeven worden. Als deze oplossingen niet kunnen, dan kan er ook een alternatief geboden worden. Zo kan een kaart met markers en adressen aangevuld worden met een lijst met dezelfde adressen. Let wel op dat het alternatief een volwaardige oplossing is.
Cookiemeldingen krijgen geen focus
Dit probleem kan opgelost worden door developers
Probleem
Een cookiemelding is niet of moeilijk te bereiken en bedienen met een toetsenbord. De focus staat op het achterliggende document en niet op de melding. De melding staat aan het einde van de code van een pagina, en is daarom moeilijk te bereiken. Door de grote afstand in de code moet de gebruiker onpraktisch vaak tab gebruiken. Daarnaast kan een gebruiker niet doorhebben dat de melding er uberhaupt is, of bereikbaar is.
Oplossing
Idealiter is de melding modal als een dialoogvenster. De gebruiker kan buiten de melding niks doen op de pagina. Zet de focus op de melding en zorg dat de content in de achtergrond niet te bereiken is.
Feedback- en chatbuttons zijn onbereikbaar
Dit probleem kan opgelost worden door developers, designers of contentmakers
Probleem
Een feedback- of chatbutton is niet of moeilijk te bereiken en bedienen met een toetsenbord. De button staat aan het eind van de code van een pagina. Door de grote afstand in de code moet de gebruiker onpraktisch vaak tab gebruiken. Daarnaast kan een gebruiker niet doorhebben dat de melding er uberhaupt is, of bereikbaar is.
Oplossing
Geef een feedback- of chatbutton een andere plek op de pagina. Plaats ze op een plek waar feedback of ondersteuning gewenst is. Hier zullen ze minder snel gemist worden. De bestaande button kunnen blijven.
Op het oog uitgeschakelde elementen zijn niet uitgeschakeld
Dit probleem kan opgelost worden door developers en designers.
Probleem
Een element kan op het oog uitgeschakeld zijn, maar met het toetsenbord nog werken. Het element ziet er bijvoorbeeld anders uit en/of de bediening door muis en aanraking is uitgeschakeld. Als het niet voor iedereen uitgeschakeld is, kan dit zorgen voor onverwacht gedrag en foutmeldingen.
Oplossing
Gebruik het native HTML attribuut
disabled
om een element als een <button> uit te schakelen:
<button type="submit" disabled>Verstuur</button>
De vormgeving in CSS kan inhaken op deze code:
codevoorbeeldbutton:disabled {
/* voeg hier je styling toe */
}
Let op. Dit attribuut werkt niet op alle interactieve elementen. Een <a> kan niet op deze manier uitgeschakeld worden. Voor uitgeschakelde links moet men geen <a> gebruiken. Het attribuut werkt soms ook op niet-interactieve elementen. De inhoud van een <fieldset> of <optgroep> kan uitgeschakeld worden door disabled hier op toe te passen.
Gerelateerde NL Design System-richtlijnen en WCAG criteria
Binnen NL Design System is meer geschreven over dit criterium en onderwerpen die ermee te maken hebben. Met deze context kun je nog praktischer met dit criterium aan de slag. Je kan meerdere problemen tegelijk oplossen, en de gebruikerservaring breder verbeteren.
NL Design System-richtlijnen
- Formulieren - Toetsenbord: Zorg dat het formulier werkt met een toetsenbord.
- Formulieren - Toetsenbord: Gebruik geen positieve tabindex.
- Formulieren - Buttons: Toetsenbordbediening van een button.
- Formulieren - Buttons: Disabled submitbuttons.
- Formulieren - Wanneer gebruik je welk formulierelement: Zorg dat iedereen een formulierelement kan bedienen of geef een alternatief.
WCAG richtlijnen
Deze WCAG richtlijnen gaan ook over het gebruik van een toetsenbord. Het kan praktisch zijn om deze tegelijk te bekijken en te beoordelen.
- WCAG-succescriterium 1.4.11 Contrast van niet-tekstuele content
- WCAG-succescriterium 2.1.2 Geen toetsenbordval
- WCAG-succescriterium 2.1.3 Toetsenbord (geen uitzondering)
- WCAG-succescriterium 2.4.1 Blokken omzeilen
- WCAG-succescriterium 2.4.3 Focus volgorde
- WCAG-succescriterium 2.4.7 Focus zichtbaar
- WCAG-succescriterium 2.4.13 Focusweergave
- WCAG-succescriterium 3.2.1 Bij focus
Bronnen
- Smashing Magazine zet uiteen welke HTML en CSS praktisch is bij gebruik van het toetsenbord: A Guide To Keyboard Accessibility: HTML And CSS
-
WebAIM (Web Accessibility In Mind) legt uit hoe
tabindexgebruikt moet worden: Tabindex: 0 and -1 Values - Toegankelijkheidsbureau TPGi schrijft over mogelijke problemen die bezoekers met een toetsenbord tegenkomen: How To Avoid Breaking Web Pages For Keyboard Users
- De W3C heeft een uitgebreid artikel over wat er allemaal nodig is voor het toetsenbord: Developing a Keyboard Interface
- De W3C geeft aan waar op te letten bij het maken van maatwerk componenten: Custom Control Accessible Development Checklist
Officiële WCAG criteria
- Engelse tekst van het WCAG-succescriterium: 2.1.1 Keyboard.
- Nederlandse vertaling van het WCAG-succescriterium: 2.1.1 Toetsenbord.
- Engelstalige informatie op How to Meet WCAG: Quick Reference 2.1.1 Keyboard.
- Engelstalige toelichting: Understanding SC 2.1.1 Keyboard.
Wat is verplicht?
De richtlijnen zijn geen wettelijke verplichting of vervanging voor WCAG. Ze zijn een praktische uitleg met voorbeelden die helpen bij het toegankelijk inzetten van NL Design System. Meer informatie of de wettelijke verplichting staat op de pagina wat is verplicht van DigiToegankelijk.
Aanvullingen of opmerkingen?
Deel je mening op GitHub of bezoek onze actieve community op Slack.