TL;DR
- En kontrols navn, tilstand og feedback har forskellige opgaver.
- aria-pressed passer til en toggle-knap; aria-expanded passer til udfoldet indhold.
- En kort status kan annonceres uden at flytte fokus, hvis live regionen er oprettet før ændringen.
Tilstand er mere end farve
Et fyldt hjerte kan vise, at en vare er valgt som favorit. Gør tilstanden tilgængelig på knappen, ikke kun via ikon eller CSS:
<button class="favorite-button" type="button" aria-label="Favorit, Nova Runner" aria-pressed="false"> <span aria-hidden="true">♡</span></button>const favorite = document.querySelector(".favorite-button");
favorite.addEventListener("click", () => { const pressed = favorite.ariaPressed === "true"; favorite.ariaPressed = String(!pressed); favorite.querySelector("span").textContent = pressed ? "♡" : "♥";});Bevar navnet, når du bruger dette toggle-mønster; aria-pressed fortæller
ændringen. En disclosure bruger derimod aria-expanded.
aria-disabled beskriver, at en kontrol er utilgængelig, men stopper ikke
selv klik eller fokus. Foretræk native disabled på en knap, når det passer
til interaktionen.
En kort besked uden fokusskift
Når en vare lægges i kurven, kan fokus blive på købsknappen. En kort kvittering kan komme fra en eksisterende statusregion:
<p id="cart-status" role="status"></p>Efter en gennemført handling opdateres dens indhold:
const status = document.querySelector("#cart-status");status.textContent = "Nova Runner er lagt i kurven.";role="status" giver implicit en høflig live region: Beskeden kan annonceres,
når skærmlæseren har mulighed for det, uden at afbryde som en alarm.
Opret regionen før opdateringen, og begræns den til beskeden.
W3C’s status-teknik.
Test med en skærmlæser. Et inspector-panel kan vise rollen, men ikke bevise, at beskeden faktisk annonceres. Samme tekst indsat igen giver ikke nødvendigvis en ny annoncering; genindlæs mellem identiske forsøg, eller brug meningsfulde ændringer som et opdateret antal varer.