progressbar
Markerar ett element som en förloppsmätare. Använd <progress> först — det levererar semantiken, den bestämda visualiseringen och värdeattributen inbyggt. Nå för role="progressbar" när du måste formatera bortom vad det inbyggda elementet tillåter.
När ska det användas
Använd <progress value="42" max="100">. Det inbyggda elementet är svårt att formatera konsekvent i olika webbläsare, vilket är huvudskälet till att nå för role="progressbar" på en anpassad <div> i stället.
Två varianter:
- Bestämd — du vet totalen. Sätt
aria-valuemin,aria-valuemaxoch uppdateraaria-valuenowallteftersom arbetet fortskrider. - Obestämd — du vet inte totalen. Utelämna
aria-valuenow(eller sätt det inte). Skärmläsaren meddelar “pågående” / “läser in” utan en procentsats.
Sätt aria-valuetext när det bara siffra inte är meningsfullt — t.ex. aria-valuetext="Laddar upp foto 3 av 8" läses bättre än “37 procent”.
En progressbar är INTE ett levande område — skärmläsare meddelar inte varje aria-valuenow-förändring. Om du vill att förändringen ska läsas upp, använd också role="status" på ett kompanjonelement med den lättlästa framstegstext.
Vanliga fel
role="progressbar"på en spinner utanaria-label. Rollen meddelas men det finns inget namn på uppgiften.- Att använda
role="progressbar"för en obestämd spinner OCH sättaaria-valuenow="0". Det meddelar “0 procent klart” för alltid. - Att glömma att ta bort progressbar (eller dess
aria-busy) när arbetet är klart. Vissa skärmläsare fortsätter att avfråga. - Att kombinera en progressbar med en visuellt dold procentsats men inte uppdatera någotdera när uppladdningen stannar. Användare får ett fruset tillstånd utan meddelande.
- Att placera
role="progressbar"på den omslutande behållaren OCH på den inre fyllningsstapeln. Duplicerade roller; välj en.
Exempel
<!-- Föredraget -->
<label for="upload">Uploading</label>
<progress id="upload" value="42" max="100">42%</progress>
<!-- Anpassad bestämd -->
<div id="uploadLabel">Uploading photo 3 of 8</div>
<div
role="progressbar"
aria-labelledby="uploadLabel"
aria-valuemin="0"
aria-valuemax="100"
aria-valuenow="37"
></div>