Offerte audit
Typ iets om te zoeken...

Wcag uitgelegd

Custom dropdown die niet met toetsen werkt

Custom dropdown die niet met toetsen werkt — WCAG 2.1.1 Toetsenbord (post 3/9)

Een prachtig gestylede dropdown. Hover erop: de opties verschijnen. Klik op een optie: geselecteerd.

Tab ernaartoe. Druk op Enter. Niets. Druk op Spatie. Niets. Pijltje omlaag. Niets.

De dropdown is een compleet eigen bouwwerk van divs, spans en onclick-handlers. Mooi. Maar onbruikbaar zonder muis.

Een native <select>-element doet alles wat je nodig hebt:

  • Focusbaar met Tab
  • Openen met Enter, Spatie of pijltje omlaag
  • Navigeren met pijltjestoetsen
  • Sluiten met Escape
  • Werkt met schermlezers
<!-- Niet doen: custom dropdown zonder toetsenbord -->
<div class="dropdown" onclick="toggleMenu()">
  <span>Kies een optie</span>
  <ul style="display:none;">
    <li onclick="selecteer('a')">Optie A</li>
    <li onclick="selecteer('b')">Optie B</li>
  </ul>
</div>

<!-- Wel doen: native element -->
<label for="keuze">Kies een optie</label>
<select id="keuze">
  <option value="a">Optie A</option>
  <option value="b">Optie B</option>
</select>

“Maar het native element is lelijk.”

In 2026? Niet meer. Moderne browsers stijlen <select> behoorlijk. En met appearance: none en wat CSS kun je het bijna alles laten doen.

Wil je toch custom? Dan moet je het ARIA-combobox-patroon volgen. Dat is dagen werk. En het moet in elke browser en met elke schermlezer werken. Weet je zeker dat je dat wilt?

Zelf verder met dit onderwerp

Related Posts

Labels

Labels

Klik eens op het woord naast een checkbox. Als er niks gebeurt, is het label niet gekoppeld aan het invoerveld. Dat is een gemiste kans, niet alleen voor toegankelijkheid, maar voor iedereen.

Witte tekst op een foto

Witte tekst op een foto

“Welkom bij ons” In wit. Op een foto van een zonnig landschap. Links voldoende contrast. Rechts? Waar de lucht wit is? Onleesbaar.

CSS order die de logica verbreekt

CSS order die de logica verbreekt

Stap 1: Maak een account. Stap 2: Kies een template. Stap 3: Publiceer.