Wcag uitgelegd

Drag-and-drop zonder alternatief

Drag-and-drop zonder alternatief — WCAG 2.1.1 Toetsenbord (post 4/9)

Sleep item 1 naar positie 3. Simpel. Met een muis.

Met een toetsenbord? Onmogelijk. Er is geen alternatief.

Drag-and-drop is niet uitgezonderd van de toetsenbordeis. Veel developers denken van wel. “Het gaat om het pad van de muis, dat kan niet met een toetsenbord.” Maar dat klopt niet.

De uitzondering geldt alleen als het pad zelf de functionaliteit is — zoals vrij tekenen of een handtekening zetten. Bij drag-and-drop om te sorteren gaat het om het eindresultaat: item 1 staat nu op positie 3. En dat eindresultaat kun je prima met een toetsenbord bereiken.

De simpelste oplossing: knoppen.

<!-- Niet doen: alleen drag-and-drop -->
<ul>
  <li draggable="true">Item 1</li>
  <li draggable="true">Item 2</li>
</ul>

<!-- Wel doen: met toetsenbordknoppen -->
<ul>
  <li>
    Item 1
    <button aria-label="Item 1 omhoog">&#9650;</button>
    <button aria-label="Item 1 omlaag">&#9660;</button>
  </li>
  <li>
    Item 2
    <button aria-label="Item 2 omhoog">&#9650;</button>
    <button aria-label="Item 2 omlaag">&#9660;</button>
  </li>
</ul>

Dit geldt ook voor:

  • Kanban-borden (sleep kaartjes tussen kolommen)
  • Afbeeldingsgalerijen (sleep om te herordenen)
  • Bestandsupload zones (sleep bestanden)
  • Puzzels en interactieve oefeningen

Bij bestandsupload: een <input type="file"> is het toetsenbordalternatief. Die werkt altijd.

Related Posts

Zelfgemaakte focusindicator die onzichtbaar is

Zelfgemaakte focusindicator die onzichtbaar is

Tab. Tab. Tab. Waar ben ik? Je navigeert met je toetsenbord door een website. Elke knop en link zou een zichtbare focus moeten hebben. Maar je ziet… niets. Of een vage lichtblauwe gloed.

Kolommen die niet onder elkaar gaan

Kolommen die niet onder elkaar gaan

Sidebar links. Content rechts. Op een groot scherm: perfect. Bij 400% zoom: twee kolommen gepropt in 320 pixels. De sidebar neemt de helft in beslag. De content wordt zo smal dat je twee woorden per regel leest. Of je moet horizontaal scrollen.

JavaScript dat de focus actief verwijdert

JavaScript dat de focus actief verwijdert

element.addEventListener("focus", function() { this.blur(); }); Een element krijgt focus. JavaScript verwijdert de focus direct. Het element heeft een fractie van een seconde focus gehad. De gebruiker merkt niets.