Progress Bar in HTML
Der Balken nennt seinen Vorgang
Fortschritt, Messanzeige, Attributwerte: drei Stellen am Balken.
Fortschritt richtig abbilden
Ein Balken hat Wert, Zustand und Stimme
Die sichtbare Füllung ist nur eine Ebene. Native HTML-Semantik liefert den Wert, eine Statuszeile meldet ausgewählte Zwischenstände – und unbekannte Dauer bleibt ehrlich ohne Prozentzahl.
Datei wird gelesen
- Element
<progress>- Name
- Datei wird gelesen
- Wert
- 42 von 100
Verbindung wird aufgebaut
Fehlt value, zeigt das Element Aktivität, aber keine erfundene Restdauer. Der Name erklärt weiterhin, welcher Vorgang läuft.
Der Wert läuft. Die Ansage setzt Marken.
Das Balken-Element darf jeden Messwert erhalten. Die Live-Region meldet nur ausgewählte Zwischenstände und den Abschluss, damit sie andere Inhalte nicht übertönt.
- 0Bereit
- 2525 Prozent
- 5050 Prozent
- 7575 Prozent
- 100Fertig
Die wichtige Abzweigung
Ein fester Stand ist kein Fortschritt
Belegter Speicher verändert sich, aber keine Aufgabe läuft auf ein Ende zu. Dafür ist meter gedacht. Die Bereiche geben dem Wert Kontext; sichtbarer Text trägt die Einordnung zusätzlich zur Farbe.
72 GBvon 100 GB belegt · beobachten
Bestimmt und unbestimmt in HTML
index.html<label for="datei">Datei auswählen</label>
<input id="datei" type="file">
<div id="lesebereich" aria-busy="false">
<label for="lesefortschritt">Datei wird gelesen</label>
<progress id="lesefortschritt" value="0" max="100">
0 Prozent
</progress>
</div>
<p id="lesestatus" role="status">Bereit.</p>
<label for="verbindung">Verbindung wird aufgebaut</label>
<progress id="verbindung"></progress> Der Text im progress-Element ist Rückfallinhalt, kein zugänglicher Name. Diesen liefert das verknüpfte label.
Echte Werte aus FileReader
progress.jsconst input = document.querySelector('#datei');
const feld = document.querySelector('#lesebereich');
const balken = document.querySelector('#lesefortschritt');
const status = document.querySelector('#lesestatus');
const reader = new FileReader();
let naechsteMeldung = 25;
input.addEventListener('change', () => {
const datei = input.files[0];
if (!datei) return;
feld.ariaBusy = 'true';
balken.value = 0;
naechsteMeldung = 25;
status.textContent = 'Datei wird gelesen.';
reader.readAsArrayBuffer(datei);
});
reader.addEventListener('progress', (event) => {
if (!event.lengthComputable) {
balken.removeAttribute('value');
return;
}
balken.max = event.total;
balken.value = event.loaded;
const prozent = Math.round(event.loaded / event.total * 100);
if (prozent < naechsteMeldung) return;
status.textContent = prozent + ' Prozent gelesen.';
naechsteMeldung = Math.floor(prozent / 25) * 25 + 25;
});
reader.addEventListener('load', () => {
feld.ariaBusy = 'false';
status.textContent = 'Datei vollständig gelesen.';
});
reader.addEventListener('error', () => {
feld.ariaBusy = 'false';
status.textContent = 'Datei konnte nicht gelesen werden.';
});lengthComputable entscheidet, ob loaded / total eine belastbare Spanne bildet. Andernfalls entfernt das Skript value.
Die Messanzeige daneben
low, high und optimum ordnen den Stand ein. Der Wortlaut „beobachten“ bleibt sichtbar, weil Farbe allein die Aussage nicht trägt.
<label for="speicher">Belegter Speicherplatz</label>
<meter id="speicher" min="0" max="100"
low="60" high="85" optimum="20" value="72">
72 von 100 Gigabyte belegt
</meter>
<p>72 GB belegt · Bereich beobachten</p>So prüfen Sie es
- Lesen Sie Name und Wert des bestimmten Balkens mit einem Vorleseprogramm aus.
- Entfernen Sie
value. Es darf anschließend keine Prozentangabe geben. - Starten Sie die Aufgabe. Der Fokus bleibt, die Statusmeldungen werden trotzdem ausgegeben.
- Prüfen Sie feste Messstände getrennt: Dafür verwenden Sie
meter.
Aus dem Prüfbericht
Drei Stellen, drei Befunde
Kritisch Der Fortschrittsbalken hat keinen Namen Regel aria-progressbar-name
Der Balken trägt Rolle und Werte, aber keine Beschriftung. aria-label nennt den laufenden Vorgang.
Kritisch Die Messanzeige daneben hat keinen Namen Regel aria-meter-name
Eine Messanzeige zeigt einen festen Stand, keinen Fortschritt. Auch role="meter" braucht ein aria-label.
Kritisch aria-valuenow trägt keine Zahl Regel aria-valid-attr-value
Werte wie „40%“ oder „unbekannt“ sind ungültig. aria-valuenow nimmt nur eine Zahl; bei unbekannter Dauer entfällt es.
Zum Mitnehmen
Der Fortschrittsbalken, korrigiert
Ein Name, gültige Werte, eine benannte Messanzeige.
Korrektur in 3 Schritten ansehen
Dem Balken einen Namen geben
Die benachbarte Überschrift benennt den Balken nicht automatisch. aria-label sagt, welcher Vorgang hier läuft.
KorrekturvergleichSchritt 1 · ARIA Vorher
<div class="fortschritt" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="40"> </div>Nachher
<div class="fortschritt" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="40" aria-label="Datei wird hochgeladen"> </div>Markierte Zeilen wurden geändert
So prüfen Sie es Fahren Sie mit einem Vorleseprogramm auf den Balken. Es nennt jetzt den Vorgang vor dem Wert.
Gültige Werte setzen
aria-valuenow nimmt nur eine Zahl ohne Einheit. Ist die Dauer unbekannt, lassen Sie das Attribut ganz weg.
KorrekturvergleichSchritt 2 · ARIA Vorher
<div role="progressbar" aria-valuenow="40%" aria-label="Datei wird hochgeladen"></div>Nachher
<div role="progressbar" aria-valuenow="40" aria-label="Datei wird hochgeladen"></div>Markierte Zeilen wurden geändert
So prüfen Sie es Ein Vorleseprogramm sagt jetzt „40 Prozent“, statt den Wert zu überspringen.
Messanzeige und Fortschritt trennen
Ein fester Stand ist eine Messanzeige, kein Fortschritt. Beide brauchen einen Namen, auch wenn der Text im Element steht.
KorrekturvergleichSchritt 3 · ARIA Vorher
<div role="meter" aria-valuenow="3" aria-valuemin="0" aria-valuemax="5">Speicherplatz</div>Nachher
<div role="meter" aria-valuenow="3" aria-valuemin="0" aria-valuemax="5" aria-label="Speicherplatz">Speicherplatz</div>Markierte Zeilen wurden geändert
So prüfen Sie es Ein Vorleseprogramm sagt „Speicherplatz, 3 von 5“ statt nur die Zahl.
