Bediening
Een website moet gemakkelijk te bedienen zijn voor iedereen. Veel mensen gebruiken een muis en toetsenbord, maar niet iedereen kan dat even goed. Mensen met motorische beperkingen of blinde/slechtziende bezoekers hebben soms moeite met het gebruik van een muis. Zorg er daarom voor dat alle functionaliteit ook alleen met het toetsenbord te bedienen is.
Slepen: wat het criterium vraagt
Slepen vraagt drie dingen tegelijk: precies raken, ingedrukt houden en tegelijk bewegen. Voor wie beeft, met zijn ogen aanwijst of een schakelaar gebruikt zijn dat drie opgaven achter elkaar. Kan een functie alleen met slepen worden bediend, zorg dan dat die ook met losse klikken of tikken werkt.
Dit criterium is nieuw in WCAG 2.2 en staat op niveau AA.
Waar het opduikt:
- Schuifregelaars voor een prijsbereik of het volume.
- Lijsten die je herschikt door onderdelen te verslepen.
- Kaarten die je moet verschuiven om een ander gebied te zien.
- Een carrousel die alleen met vegen te bedienen is.
Er is een uitzondering als het slepen de handeling zelf is: een handtekening zetten, tekenen, schilderen. Bij twijfel helpt één vraag: is hetzelfde resultaat met knoppen te bereiken? Bij een schuifregelaar wel, bij een handtekening niet.
Dit criterium gaat over de aanwijzer, niet over het toetsenbord. Dat laatste is 2.1.1. Ook wie een muis of aanraakscherm gebruikt maar niet kan slepen, moet erlangs kunnen. Beide criteria moeten dus kloppen.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenZichtbare focus: de focusring
Een site heeft lichte en donkere vlakken. Een focusrand van één kleur valt daardoor altijd op één van de twee weg. Zet daarom een lichte ring binnen een donkere: op een donkere knop valt de lichte op, op een lichte knop de donkere.
In de code ziet dat er zo uit:
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible { outline: 2px solid transparent; /* blijft staan in de hoogcontrastmodus */ outline-offset: 2px; box-shadow: 0 0 0 2px #FFFFFF, /* binnenring: licht */ 0 0 0 5px #08251C; /* buitenring: donker */ border-radius: 6px; }De doorzichtige
outlinelijkt overbodig maar is dat niet. In de hoogcontrastmodus van Windows verwijdert het systeem alle kleuren en schaduwen, waardoor debox-shadowverdwijnt. Een outline blijft wel staan en krijgt dan de systeemkleur.Gebruik
:focus-visibleen niet:focus. Met:focuskrijgt ook een bezoeker die met de muis klikt een rand om zijn knop. Met:focus-visiblebepaalt de browser het zelf: een rand bij het toetsenbord, geen rand bij de muis.Drie oplossingen die niet genoeg zijn:
- Alleen de kleur van de knop veranderen. Kleurverschil alleen is geen zichtbare focus, en voor wie kleur anders ziet werkt het niet.
- De rand strak om het onderdeel leggen. Met
outline-offsetblijft er lucht, waardoor de rand ook op een gekleurde knop opvalt. - Een rand dunner dan 2 pixels. Op een vergroot scherm valt die weg tegen de rand van het onderdeel zelf.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenTooltips: er een bouwen die blijft staan
De eenvoudigste oplossing is geen tooltip bouwen maar de tekst op de pagina zetten. Kan dat niet, dan moeten er drie dingen kloppen.
Escape sluit de uitleg:
element.addEventListener('keydown', function (e) { if (e.key === 'Escape') { verbergTooltip(); } });De aanwijzer kan erheen. Laat geen gat tussen het onderdeel en de uitleg: beweegt de aanwijzer over dat gat, dan telt dat als wegwijzen en verdwijnt de uitleg.
.tooltip { margin-block-start: 0; padding-block-start: 8px; pointer-events: auto; }En er zit geen tijdklok op. Een bezoeker die langzaam leest is na drie seconden halverwege:
setTimeout(verbergTooltip, 3000); /* niet doen */Gebruik
:focus-visiblenaast:hover, anders krijgt een bezoeker met een toetsenbord de uitleg nooit te zien. Zet daarnaastaria-describedbyop het onderdeel, zodat een schermlezer de uitleg voorleest.<button aria-describedby="uitleg-btw">Btw-nummer</button> <div id="uitleg-btw" role="tooltip">Je btw-nummer staat op je factuur.</div>DoelgroepenSuccescriteriaHulpmiddelenSchermstand: zo test je het
Zet de automatische schermdraaiing van de telefoon aan, open de site en draai het toestel om. Meer is er niet nodig.
Waar je op let:
- Verschijnt er een melding dat je moet draaien? Dan is dat de fout.
- Blijft alle inhoud zichtbaar en bruikbaar?
- Gaat het menu nog open, en past het op het scherm?
- Werkt een formulier nog, inclusief de knop onderaan?
- Blijf je op dezelfde plek in de pagina, of springt hij naar boven?
Zonder telefoon kan het ook: maak het browservenster laag en breed, bijvoorbeeld 900 bij 400 pixels. In de ontwikkelaarshulpmiddelen van de browser is ook een toestel te kiezen en te draaien.
Test niet alleen de homepage. De fout zit vaker in een videospeler, een kaart of een ingesloten formulier van een andere partij — onderdelen die iemand anders heeft gebouwd en die hun eigen aannames hebben over de schermstand.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenKlik annuleren: click en niet mousedown
Een gewone knop met een
clickvoldoet al aan dit criterium. De browser voert die pas uit als de bezoeker op hetzelfde onderdeel loslaat.// goed: wegschuiven voordat je loslaat en er gebeurt niets knop.addEventListener('click', verwijder); // fout: gaat af zodra de knop wordt geraakt knop.addEventListener('mousedown', verwijder); knop.addEventListener('pointerdown', verwijder); knop.addEventListener('touchstart', verwijder);De onderste drie worden meestal gebruikt omdat de knop dan sneller aanvoelt. Dat verschil is een paar honderdste seconde, en het kost de bezoeker de mogelijkheid om zich te bedenken.
Kun je niet om het indrukken heen, geef dan een weg terug. Een melding met “Ongedaan maken” die tien seconden blijft staan is genoeg, en is voor iedereen een verbetering. Zorg wel dat die melding zelf met het toetsenbord bereikbaar is en lang genoeg blijft staan; anders verplaats je het probleem.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenApparaatbewegingen
Acties die in worden geactiveerd door een apparaat te kantelen of te schudden zijn niet goed toegankelijk voor sommige bezoekers. Bezoekers met een motorische beperking kunnen deze acties bijvoorbeeld onbedoeld uitvoeren. Er zijn ook bezoekers die dit niet, of niet goed, kunnen bedienen omdat het apparaat op een vaste plek is bevestigd aan bijvoorbeeld een rolstoel. Ook het maken van gebaren naar een camera die deze de bewegingen kan interpreteren valt onder bewegingsactivering.
Laat bezoekers daarom de bewegingsactivering uitschakelen of zorg dat acties die kunnen worden geactiveerd met bewegingsactivering ook te activeren zijn met een alternatieve bediening.
DoelgroepenSuccescriteriaSneltoetsen
Op sommige websites kunnen bezoekers gebruik maken van sneltoetsen. Met sneltoetsen kunnen bezoekers gemakkelijk functies uitvoeren of navigeren naar een pagina. Dit werkt goed voor veel bezoekers die gebruik maken van het toetsenbord maar kunnen conflicteren sommige hulptechnologieën. Hierdoor kunnen sneltoetsen onbedoeld worden geactiveerd. Dit geldt bijvoorbeeld voor bezoekers die gebruik maken van software voor spraakherkenning.
Zorg daarom dat sneltoetsen die bestaan uit één karakter kunnen worden aangepast, uitgeschakeld of alleen geactiveerd kunnen worden als het onderdeel de toetsenbordfocus heeft.
DoelgroepenSuccescriteriaSchermstand: de vergrendeling eruit
De fout zit bijna altijd op één van twee plekken. De eerste is een media query die de inhoud verbergt:
/* verbergt de site in liggende stand — nooit doen */ @media (orientation: landscape) { .inhoud { display: none; } .draai-melding { display: block; } }Gebruik
orientationgerust om de indeling aan te passen. Gebruik hem nooit om iets te verbergen.De tweede is het manifest of de app-instellingen:
{ "orientation": "portrait" }De melding weghalen is de eerste stap. De tweede is zorgen dat het er liggend ook goed uitziet. In liggende stand is het scherm laag en breed, en dat is dezelfde situatie als bij inzoomen:
.raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); } .hero { min-block-size: 60vh; } /* niet: height: 60vh */Los je dit goed op, dan is 1.4.10 Reflow Reflow meestal ook meteen in orde. Het is dezelfde oorzaak: onderdelen die hun eigen breedte of hoogte vasthouden.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenBedekte focus: scroll-margin
De browser schuift een onderdeel net binnen beeld zodra het de focus krijgt. Hij houdt daarbij geen rekening met een balk die eroverheen ligt, want die kent hij niet. Met
scroll-margingeef je die ruimte op.:where(a, button, input, select, textarea, summary, [tabindex]) { scroll-margin-block-start: 120px; /* de hoogte van de koptekst */ scroll-margin-block-end: 90px; /* wat er onderaan blijft staan */ }Zet de bovenwaarde op de hoogte van de koptekst en de onderwaarde op wat er onderaan blijft staan. Verschilt die hoogte per schermbreedte, zet hem dan in een variabele.
Dit werkt alleen als de browser moet scrollen. Staat het onderdeel al in beeld en valt er toevallig een chatknop overheen, dan gebeurt er niets. Laat zo’n knop dan wijken zodra er iets de focus heeft, en zorg dat de knop daarna nog bereikbaar blijft.
body:has(:focus-visible) .chatknop { opacity: 0; pointer-events: none; }De eenvoudigste oplossing is een balk die niet meescrolt. Een koptekst die gewoon bovenaan de pagina staat kan per definitie niets bedekken, en kost geen onderhoud.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenKlik annuleren: wat het criterium vraagt
Een klik bestaat uit twee momenten: het indrukken en het loslaten. Reageert een knop al op het indrukken, dan is een vergissing niet meer terug te nemen. Reageert hij op het loslaten, dan kan de bezoeker zijn vinger of muis nog wegschuiven en gebeurt er niets.
Zorg daarom dat een knop pas reageert bij het loslaten. Kan dat niet, geef dan een manier om de actie ongedaan te maken. Dit criterium staat op niveau A.
Dit maakt verschil voor:
- Bezoekers met trillende handen, die zelden meteen goed raken.
- Bezoekers die de aanwijzer met hun ogen of hun hoofd besturen.
- Bezoekers die slecht zien en pas bij aanraking merken waar ze zitten.
- Bezoekers die hun telefoon bedienen terwijl ze bewegen.
Reageren op het indrukken mag wel als dat bij de handeling hoort. Een pianotoets op een scherm hoort te klinken bij aanraking. Hetzelfde geldt voor slepen en tekenen.
Het gaat vooral om de knoppen waar een vergissing gevolgen heeft: verwijderen, versturen, betalen en opzeggen.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenGrootte van knoppen: wat het criterium vraagt
Een knop of link moet minstens 24 bij 24 pixels groot zijn. Is hij kleiner, dan moet er minstens 24 pixels ruimte omheen zitten waar geen andere knop staat. Een vingertop is ongeveer een centimeter breed, zo’n 40 pixels, en dus groter dan een sluitkruisje van 16 bij 16.
Dit criterium is nieuw in WCAG 2.2 en staat op niveau AA. Vierentwintig is een ondergrens en geen streefwaarde: voor een vinger is 44 pixels prettiger. Apple en Google houden in hun eigen richtlijnen 44 en 48 aan.
Dit raakt vooral:
- Bezoekers met trillende handen, door parkinson, MS of ouderdom.
- Bezoekers die de aanwijzer met hun ogen of hun hoofd besturen.
- Bezoekers met één werkende hand, die de telefoon vasthouden en bedienen met dezelfde duim.
Een link in een lopende zin is uitgezonderd. Die is niet groter te maken zonder de tekst te verstoren.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenGrootte van knoppen: zo meet je het
Hiervoor is geen software nodig die je moet installeren. De browser toont de maat van elk onderdeel.
Eén knop meten:
- Klik met de rechtermuisknop op de knop en kies Inspecteren.
- Beweeg de muis over het onderdeel in de code. De browser tekent het gebied op de pagina en zet de maat erbij, bijvoorbeeld 18 × 18.
- Is een van beide getallen kleiner dan 24, meet dan de ruimte tot de knop ernaast.
Een hele pagina in één keer: plak dit in het tabblad Console. Het zet een rode rand om elke knop en link die te klein is.
document.querySelectorAll('a, button, input, select, summary') .forEach(function (el) { var r = el.getBoundingClientRect(); if (r.width < 24 || r.height < 24) { el.style.outline = '2px solid red'; console.log(Math.round(r.width) + '×' + Math.round(r.height), el); } });Het lijstje is een beginpunt en geen oordeel. Een knop van 20 bij 20 met 30 pixels ruimte eromheen voldoet gewoon, en een link in een lopende zin is uitgezonderd. Het script kent dat verschil niet.
Doe de test ook op een smal scherm. Knoppen die op een breed scherm ruim staan, komen op een telefoon tegen elkaar aan.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenFocusvolgorde: de volgorde in je HTML
Eén regel lost het meeste op: schrijf de HTML in de volgorde waarin de pagina gelezen moet worden, en gebruik CSS alleen om te bepalen wáár iets staat.
Deze drie eigenschappen verplaatsen het beeld zonder de volgorde te veranderen. Het oog volgt de nieuwe plek, het toetsenbord de oude:
.blok { order: -1; } .raster { grid-row: 1; grid-column: 2; } .zijbalk { position: absolute; right: 0; }Wil je de tekst links en het beeld rechts, zet de tekst dan eerst in de HTML. Op een smal scherm komt alles onder elkaar in die volgorde te staan, en dan klopt het daar ook.
<div class="tweeluik"> <div class="tekst">…</div> <!-- eerst lezen, eerst in de code --> <figure class="beeld">…</figure> </div> .tweeluik { display: grid; grid-template-columns: 1fr 1fr; }Gebruik geen positieve
tabindex. Een getal boven nul zet het onderdeel vooraan in de rij, vóór alles wat geen tabindex heeft. Eén zo’n onderdeel zet de hele volgorde op zijn kop.tabindex="0"entabindex="-1"zijn wel in orde.Let daarnaast op twee plekken waar de volgorde met script wordt bepaald. Een venster dat opengaat hoort de focus mee te nemen en bij het sluiten terug te geven aan de knop waarop is gedrukt. Een menu dat uitklapt hoort zijn onderdelen meteen na de knop te hebben staan, niet onderaan de pagina.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenFocusvolgorde: zo test je het
De focusvolgorde is te toetsen met het toetsenbord en het oog. Er is geen software voor nodig.
Ga als volgt te werk:
- Klik bovenaan de pagina, buiten een link of invoerveld.
- Druk op Tab en volg met je ogen waar de focus heen springt.
- Teken die route in gedachten na: loopt hij van links naar rechts en van boven naar beneden?
Springt de focus vooruit en dan weer terug omhoog, dan is de afwijking gevonden. Begin bij formulieren: daar heeft een verkeerde volgorde de meeste gevolgen.
Drie plekken waar het vaak misgaat:
- Een venster dat opengaat en de focus achterlaat op de pagina erachter.
- Een uitklapmenu waarvan de onderdelen onderaan de pagina in de code staan.
- Een tweeluik met beeld en tekst waarvan de code omgekeerd is.
Zoek in de bronbestanden daarnaast naar een positieve tabindex. Elke treffer is vrijwel zeker een fout:
tabindex="1" tabindex="2"Zoek ook naar
order:enflex-direction: row-reversein het stijlbestand. Dat hoeft geen fout te zijn, maar het is wel de plek waar je moet kijken.DoelgroepenSuccescriteriaWie het raaktHulpmiddelenZichtbare focus: zo test je het
De zichtbaarheid van de focus is met het toetsenbord te toetsen. Er is geen software voor nodig.
Ga als volgt te werk:
- Open de pagina en klik één keer bovenaan, buiten een link of invoerveld.
- Druk op Tab, en blijf drukken tot je onderaan de pagina bent.
- Kijk bij elke druk of zichtbaar is welk onderdeel is geselecteerd.
Let daarbij op vier dingen:
- Verdwijnt de focus? Er verandert niets in beeld, terwijl er wel iets is geselecteerd.
- Springt de focus heen en weer? Dan klopt de volgorde niet met wat er staat. Dat valt onder 2.4.3.
- Kom je ergens niet meer weg? Een venster of videospeler die je met Tab niet uit komt is een toetsenbordval.
- Schuift de pagina mee? Staat het geselecteerde onderdeel half onder een vaste balk, dan valt dat onder 2.4.11.
Is de focus nergens te zien, zoek dan in het stijlbestand naar deze regels:
outline: none; outline: 0;Staan die er, en staat er geen eigen rand voor in de plaats, dan is de oorzaak gevonden.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenTooltips: zo test je het
Zoek eerst alles op wat verschijnt bij aanwijzen of bij focus. Dat zijn meestal vraagtekens, pictogrammen, menu’s en linkvoorbeelden.
Ga daarna als volgt te werk:
- Wijs het onderdeel aan tot de uitleg verschijnt.
- Beweeg de aanwijzer langzaam naar de uitleg toe. Blijft hij staan?
- Ga met de aanwijzer over de uitleg heen. Blijft hij nog steeds staan?
- Druk op Escape zonder de aanwijzer te verplaatsen. Verdwijnt hij?
- Wijs opnieuw aan en wacht tien seconden. Verdwijnt hij vanzelf?
Doe de test daarna met het toetsenbord. Tab naar hetzelfde onderdeel: verschijnt de uitleg ook dan? Zo niet, dan mist een deel van de bezoekers hem helemaal.
Vind je een tooltip met informatie die nergens anders staat, dan is dat meer dan een afwijking op dit criterium. Dan mist een deel van de bezoekers inhoud.
DoelgroepenSuccescriteriaHulpmiddelenKlik annuleren: zo test je het
Deze test duurt tien seconden per knop en vraagt alleen een muis of een vinger.
Ga als volgt te werk:
- Druk een knop in en houd vast.
- Schuif de muis of vinger van de knop af, ernaast.
- Laat los.
Er hoort niets te gebeuren. Gebeurt het toch, dan reageert de knop op het indrukken en is de afwijking gevonden.
Test niet alle knoppen. Begin bij de knoppen waar een vergissing gevolgen heeft: verwijderen, versturen, betalen, opzeggen, en alles wat een venster sluit zonder op te slaan.
In de console van Chrome is dit ook op te zoeken:
['mousedown', 'pointerdown', 'touchstart'].forEach(function (soort) { document.querySelectorAll('*').forEach(function (el) { if (typeof getEventListeners === 'function' && getEventListeners(el)[soort]) { console.warn(soort, el); } }); });getEventListenersbestaat alleen in de console van Chrome. In andere browsers zoek je in de bronbestanden naar die drie woorden; dat werkt overal.DoelgroepenSuccescriteriaWie het raaktHulpmiddelenSlepen: zo test je het
Zoek eerst alles op wat normaal versleept wordt: schuifregelaars, herschikbare lijsten, kaarten en carrousels.
Ga daarna als volgt te werk:
- Bedien het onderdeel zonder ingedrukt te houden.
- Gebruik alleen losse klikken of tikken.
- Lukt het niet, dan is dat de afwijking.
Doe de test daarna nog eens met alleen het toetsenbord. Dat is 2.1.1 Toetsenbord, maar het gaat vaak om dezelfde onderdelen.
Test ook op een aanraakscherm. Onderdelen die met een muis goed werken zijn met een vinger soms alleen te vegen, en dan is er geen alternatief.
Uitzonderingen waar je geen afwijking op hoeft te melden:
- Een handtekening zetten. Het pad dat wordt getrokken is het resultaat.
- Tekenen of schilderen.
- Een handeling waarbij de precieze plek telt en die niet in stappen te doen is.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenBedekte focus: zo test je het
Bovenaan de pagina staat een vaste balk op zijn plek en bedekt hij niets. De fout laat zich pas zien nadat de pagina is gescrold.
Ga als volgt te werk:
- Scroll een halve pagina naar beneden.
- Klik ergens in de tekst, buiten een link.
- Druk op Tab en kijk of het geselecteerde onderdeel zichtbaar is.
- Doe hetzelfde met Shift en Tab, dus omhoog. Daar gaat het het vaakst mis.
Voor dit criterium mag een deel bedekt zijn. Is er nog een stuk van de knop en de focusrand te zien, dan voldoet het. Is er niets te zien, dan niet. Bij twijfel is het antwoord meestal dat het niet genoeg is: een knop waarvan twee pixels zichtbaar zijn, is niet gevonden.
Dit script meldt elk onderdeel dat bij het krijgen van de focus wordt bedekt. Plak het in de console van de browser en tab daarna door de pagina:
document.addEventListener('focusin', function (e) { var r = e.target.getBoundingClientRect(); var boven = document.elementFromPoint(r.left + 4, r.top + 4); if (boven && boven !== e.target && !e.target.contains(boven)) { console.warn('bedekt door', boven, e.target); } });Elke melding is een plek om na te kijken. Het script vervangt de test niet, want het kent het verschil tussen gedeeltelijk en volledig bedekt niet.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenGrootte van knoppen: het aanwijsgebied
Knoppen hoeven er niet groter uit te zien. Het gaat om het gebied dat op een tik reageert, en dat mag onzichtbaar zijn.
De eenvoudigste oplossing laat het pictogram op 16 pixels staan en maakt de knop eromheen 24:
.icoonknop { min-inline-size: 24px; min-block-size: 24px; display: inline-flex; align-items: center; justify-content: center; }Is er echt geen ruimte, vergroot het gebied dan met een onzichtbare laag over de knop heen. Het beeld blijft klein, het doel wordt groot:
.icoonknop { position: relative; } .icoonknop::after { content: ""; position: absolute; inset: -8px; /* 8 pixels extra aan elke kant */ }Let op dat twee van die vergrote gebieden elkaar niet overlappen. Dan raakt de bezoeker de verkeerde knop.
Waar het meestal misgaat:
- Rijen pictogrammen naast elkaar in een tabel of werkbalk.
- Het sluitkruisje van een venster. Dat is bijna altijd te klein, terwijl het de knop is die iemand onder tijdsdruk zoekt.
- Paginanummers onder een lijst, vaak 20 bij 20 met een paar pixels ertussen.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenSlepen: knoppen ernaast
De oplossing is bijna altijd hetzelfde: het slepen blijft, er komt een manier met losse klikken naast.
Bij een schuifregelaar gebruik je
input type="range", die met de pijltoetsen te bedienen is. Voor de aanwijzer zet je er twee knoppen naast, met het getal erbij zodat zichtbaar is wat er verandert:<button type="button" aria-label="Minder">−</button> <input type="range" id="prijs" min="0" max="500" step="10" value="100"> <button type="button" aria-label="Meer">+</button> <output for="prijs">100 euro</output>Bij een lijst die herschikt kan worden zet je bij elk onderdeel een knop omhoog en een knop omlaag. Dat werkt met de muis, met een aanraakscherm, met een toetsenbord en met een schermlezer:
<li> Nieuwsbrief <button type="button" aria-label="Nieuwsbrief omhoog">↑</button> <button type="button" aria-label="Nieuwsbrief omlaag">↓</button> </li>Bij een carrousel horen er knoppen voor vorige en volgende te zijn naast het vegen. Bij een kaart knoppen om te verschuiven en te zoomen; de meeste kaartbibliotheken hebben die al, maar soms staan ze uit.
Let op de maat van die knoppen. Zijn ze te klein, dan ruil je het ene probleem in voor het andere. Zie het artikel over de grootte van het aanwijsgebied.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenAlles met het toetsenbord
Alle functies op een website moeten te bereiken en gebruiken zijn met alleen het toetsenbord. Sommige bezoekers kunnen geen muis gebruiken door bijvoorbeeld een visuele of motorische beperking. Als alle functionaliteit met het toetsenbord kan worden bediend, dan werkt deze ook met een groot aantal hulptechnologieën. Zorg daarom dat onderdelen zoals links, knoppen, navigatie, invoervelden, selectievakjes, keuzerondjes, keuzelijsten en alle andere interactieve functies de toetsenbordfocus kunnen krijgen en kunnen worden gebruikt.
Standaard HTML-elementen voor links, knoppen en formulierelementen op de website zijn goed toegankelijk met het toetsenbord.
De standaard toetsenbordnavigatie is als volgt:
- Met TAB navigeert de toetsenbordfocus vooruit.
- Met SHIFT + TAB navigeert de toetsenbordfocus achteruit.
- Met de pijltoetsen kan worden genavigeerd in gegroepeerde menu’s of radiobuttons.
Bezoekers die gebruik maken van het toetsenbord gebruiken de TAB-toets om door een website te navigeren. De TAB-toets verplaatst de toetsenbordfocus naar het volgende focuseerbare onderdeel.
DoelgroepenSuccescriteriaFocusvolgorde: wat het criterium vraagt
Wie met het toetsenbord werkt krijgt de pagina als een rij: eerst dit, dan dat. Het overzicht dat een ziende bezoeker in één blik heeft, ontbreekt daarbij. Klopt de volgorde van de focus niet met de volgorde waarin de pagina te lezen is, dan raakt de bezoeker de draad kwijt. Zorg daarom dat de focus in een logische volgorde door de pagina loopt.
De oorzaak is bijna altijd dezelfde. Het ontwerp vraagt het beeld rechts en de tekst links; in de code staat het beeld eerst en wordt het met CSS naar rechts geschoven. Op het scherm klopt dat, maar de focus volgt de code. De bezoeker springt dan eerst naar rechts, dan naar links en dan weer naar rechts.
Bij een formulier heeft dat gevolgen. Gaat de focus van Postcode naar Versturen en pas daarna naar Huisnummer, dan wordt het formulier half ingevuld verstuurd.
Dit criterium gaat over de focusvolgorde: waar Tab naartoe springt. 1.3.2 Betekenisvolle volgorde gaat over de leesvolgorde: waar de tekst over gaat. Vaak is het dezelfde fout, maar niet altijd — een pagina kan goed leesbaar zijn en toch onhandig te bedienen.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenToetsenbordval
Als bezoekers met het toetsenbord naar een onderdeel op de pagina kunnen navigeren, maar er niet meer vandaan kunnen, dan is dit een toetsenbordval. Om uit een toetsenbordval te raken is de enige manier vaak om de muis (of ander aanwijsapparaat) te gebruiken of om de pagina helemaal te herladen. Dit is geen optie voor bezoekers die geen gebruik kunnen maken van de muis. Dit komt soms voor als er plugins worden gebruikt.
Zorg dat met het toetsenbord helemaal over de pagina kan worden genavigeerd.
DoelgroepenSuccescriteriaBedekte focus: wat het criterium vraagt
Een balk die vastgeplakt in beeld blijft staan kan het onderdeel bedekken waar de toetsenbordfocus net naartoe is gesprongen. De bezoeker ziet dan niet welk onderdeel is geselecteerd en weet niet wat er gebeurt bij het indrukken van Enter. Zorg daarom dat het onderdeel met de focus niet volledig bedekt wordt.
Een deel mag bedekt zijn, als de rest maar zichtbaar blijft. Dit criterium is nieuw in WCAG 2.2 en staat op niveau AA, dus het valt onder de wettelijke eis. Er is ook een strengere versie: 2.4.12 Focus niet bedekt (uitgebreid) op niveau AAA, waarbij er niets overheen mag staan.
De oorzaak is bijna altijd een van deze:
- Een menubalk die vastgeplakt bovenaan blijft staan.
- Een cookiemelding onderaan het scherm.
- Een chatknop in de hoek.
- Een balk met acties die verschijnt zodra de bezoeker scrolt.
- Een tabel met een vastgezette kop of kolom.
Het gaat het vaakst mis bij terugspringen. Gaat de bezoeker met Shift en Tab omhoog, dan zet de browser het onderdeel bovenaan het scherm — precies waar een vaste balk staat. Vooruit gaat meestal goed, achteruit niet.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenSchermstand: wat het criterium vraagt
Een website moet werken in zowel de staande als de liggende stand. Niet iedereen kan zijn apparaat draaien: een telefoon in een houder op een rolstoel staat vast, en wie een tablet op een standaard heeft staan of met één hand werkt kan dat ook niet. Een melding als “Draai je scherm voor de beste ervaring” maakt de site voor die bezoekers onbruikbaar.
Je mag geen stand afdwingen, tenzij het echt niet anders kan — een piano-app of het fotograferen van een cheque zijn de gebruikelijke voorbeelden.
Wat er ook onder valt:
- Een pagina die alleen in staande stand een menu toont.
- Een videospeler die in liggende stand het scherm overneemt en niet meer terug wil.
- Een app die in de manifest-instellingen op één stand is vastgezet.
Zo’n melding is zelden een bewuste keuze. Meestal is de liggende stand niet getest, oogt de pagina daar rommelig, en is er een melding geplaatst in plaats van een oplossing.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenZichtbare focus: wat het criterium vraagt
Het onderdeel dat met het toetsenbord is geselecteerd heeft de focus. De browser zet daar standaard een rand omheen, zodat zichtbaar is waar de bezoeker zich bevindt. Ontbreekt die rand, dan is niet te zien welk onderdeel wordt bediend en wat er gebeurt bij het indrukken van Enter. Zorg daarom dat de toetsenbordfocus altijd zichtbaar is.
Dit raakt vooral:
- Bezoekers die geen muis kunnen vasthouden en alles met het toetsenbord doen.
- Bezoekers die een schermvergroting gebruiken en maar een klein deel van het scherm zien. De focus geeft aan waar dat deel moet staan.
- Bezoekers die met een schakelaar of met hun stem werken.
De rand is op de meeste sites ooit bewust weggehaald, met één regel CSS:
outline: none. De standaardrand is niet mooi, maar het antwoord daarop is een betere rand en niet geen rand.Dit criterium gaat alleen over de zichtbaarheid van de focus. Of de rand genoeg contrast heeft valt onder 1.4.11 Contrast van niet-tekstuele content, de volgorde onder 2.4.3 Focus volgorde, en of de rand achter een balk verdwijnt onder 2.4.11.
DoelgroepenSuccescriteriaWie het raaktHulpmiddelenTooltips: wat het criterium vraagt
Verschijnt er extra inhoud zodra een bezoeker iets aanwijst of met het toetsenbord selecteert — een tooltip, een uitklapmenu, een voorbeeldvenster — dan moet die inhoud te lezen zijn. Wie ingezoomd werkt ziet de uitleg buiten zijn deel van het scherm staan en moet er met de aanwijzer naartoe. Verdwijnt de uitleg onderweg, dan is hij onbereikbaar.
Er gelden drie eisen:
- Wegklikbaar. De uitleg is te sluiten met Escape, zonder de aanwijzer te verplaatsen.
- Aanwijsbaar. De aanwijzer kan erheen zonder dat de uitleg verdwijnt.
- Blijvend. De uitleg blijft staan tot de bezoeker wegwijst, hem sluit of de informatie niet meer klopt. Niet tot een tijdklok afloopt.
Waar dit opduikt: tooltips bij een pictogram of vraagteken, uitklapmenu’s die opengaan bij aanwijzen, voorbeeldvensters bij een link, foutmeldingen die bij focus verschijnen, en een winkelmandje dat opengaat bij aanwijzen.
Op een aanraakscherm bestaat aanwijzen niet. Wat alleen bij aanwijzen verschijnt, moet daar op een andere manier bereikbaar zijn — of de informatie hoort gewoon op de pagina te staan.
DoelgroepenSuccescriteriaHulpmiddelenBediening met gebaren
Sommige functionaliteit op een website is alleen te uit te voeren met een moeilijk gebaar. Bijvoorbeeld gebaren waarbij de bezoeker meerdere vingers moet gebruiken (meerpuntsgebaren) of gebaren waarbij de bezoeker een vinger (of de aanwijzer) in een bepaald pad moet bewegen (pad gebaseerde gebaren). Bezoekers kunnen, om verschillende redenen, soms niet in staat zijn om moeilijke gebaren te maken met hun vingers of met een aanwijzer. Bijvoorbeeld door een motorische beperking.
Zorg dat functionaliteit die met gebaren wordt geactiveerd, ook met een klik, dubbelklik of klikken-en-vasthouden van een muis kan worden geactiveerd. Dit kan bijvoorbeeld met een eenvoudige bediening toe te voegen.
DoelgroepenSuccescriteria