button
Markerer et element som en knap — en kontrol, der udløser en handling ved aktivering. Brug det native HTML-element <button> først; brug kun role="button" på et <div> eller <span>, når det native element ikke er muligt.
Hvornår skal det bruges
Næsten aldrig — brug det native <button>-element. Det native element håndterer fokus, aktivering med mellemrum og enter, den deaktiverede tilstand og form-indsendelsessemantik uden ekstra arbejde. At bruge role="button" på et <div> betyder, at man skal genimplementere alt dette, og de fleste forfattere gør det ikke.
De legitime tilfælde for role="button" er snævre:
- Du er begrænset af et tredjeparts designsystem, der leverer ikke-knap-komponenter.
- Du arbejder i et miljø, hvor
<button>ikke er tilgængeligt (nogle ældre CMS-skabeloner). - Du opgraderer et
<div>til tilgængelighed på kort sigt, mens du planlægger en refaktorering.
Hvis du bruger role="button", skal du også:
- Gøre elementet fokuserbart med
tabindex="0". - Tilslutte
keydownfor bådeEnterogSpace(medevent.preventDefault()på Space for at forhindre siderul). - Håndtere den deaktiverede tilstand selv via
aria-disabled="true"og forhindre click-handlere i at udløses.
Skifteknapper
Hvis knappen er en skifteknap (slå lyd fra / til, afspil / pause, følg / stop med at følge), skal du sætte aria-pressed til "true" eller "false". Skærmlæsere annoncerer tilstanden sammen med etiketten: “Slå lyd fra, skifteknap, ikke trykket”.
Hyppige fejl
<div onclick="…">Indsend</div>— ikke fokuserbart, ikke tastatur-operabelt, ingen rolle. Musbrugere kan bruge det; ingen andre kan.<a href="#" onclick="…">forklædt som en knap. Browseren behandler det som et link, skærmlæseren annoncerer det som et link, og brugeren forventer navigation.role="button"udentabindex="0"— skærmlæseren annoncerer “knap”, men tastaturet kan ikke nå det.- Brugerdefinerede knapper, der reagerer på Enter men ikke Space.
- Knapper uden tilgængeligt navn — ikonknapper uden
aria-labeler den hyppigste fejl, som axe-core registrerer.
Eksempel
<!-- Foretrukket -->
<button type="button" aria-pressed="false">Slå lyd fra</button>
<!-- Kun når <button> er umuligt -->
<div
role="button"
tabindex="0"
aria-pressed="false"
onclick="toggleMute()"
onkeydown="if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); toggleMute(); }"
>
Slå lyd fra
</div>