> For the complete documentation index, see [llms.txt](https://gitbook.dev-becker.de/barrierefreie-webseiten/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gitbook.dev-becker.de/barrierefreie-webseiten/aria-live-regionen.md).

# ARIA-Live-Regionen

ARIA-Live-Regionen sind ein leistungsstarkes Werkzeug, um dynamische Inhalte für Nutzer zugänglich zu machen, die Screenreader verwenden. Sie ermöglichen es, Änderungen auf der Webseite sofort an Screenreader zu übermitteln, ohne dass der Nutzer manuell interagieren muss.

Das ist besonders nützlich, wenn Inhalte automatisch aktualisiert werden, z. B. bei Benachrichtigungen, Ladezuständen oder Chatnachrichten. Hier ist eine ausführliche Anleitung zur Anwendung von ARIA-Live-Regionen:

***

#### 1. **Was ist eine ARIA-Live-Region?**

Eine ARIA-Live-Region ist ein HTML-Element mit dem Attribut `aria-live`, das einem Screenreader mitteilt, dass sich der Inhalt ändern könnte. Sobald der Inhalt aktualisiert wird, liest der Screenreader diesen neuen Text automatisch vor. Das ist hilfreich für Benutzer, die visuelle Änderungen nicht wahrnehmen können.

#### 2. **Arten von ARIA-Live-Regionen**

ARIA-Live-Regionen lassen sich an unterschiedliche Situationen anpassen. Die drei häufigsten Werte für `aria-live` sind:

* **`aria-live="polite"`**: Inhalte werden vorgelesen, aber nur, wenn der Screenreader-Nutzer eine Pause macht. Diese Einstellung ist ideal für weniger dringende Informationen, wie etwa Benachrichtigungen.
* **`aria-live="assertive"`**: Inhalte werden sofort und unmittelbar vorgelesen. Dies ist für wichtige und dringende Informationen gedacht, wie Fehlermeldungen oder Warnungen.
* **`aria-live="off"`**: Der Inhalt wird für Screenreader nicht vorgelesen, selbst wenn er aktualisiert wird. Dies kann bei Elementen nützlich sein, die nur visuell relevant sind.

#### 3. **Wie ARIA-Live-Regionen implementiert werden**

Eine Live-Region kann jedem HTML-Element hinzugefügt werden, typischerweise jedoch `<div>`, `<span>`, oder `<p>`.

**Beispiel:**

```html
<div aria-live="polite" id="notification">Warten auf neue Nachrichten...</div>
```

> In diesem Beispiel wird der Inhalt der `div`-Region erst dann vorgelesen, wenn der Screenreader-Nutzer eine Pause macht, da `aria-live="polite"` verwendet wird.

#### 4. **Weitere ARIA-Live-Attribute**

Es gibt zusätzliche Attribute, die du zusammen mit `aria-live` verwenden kannst, um die Funktionsweise genauer zu steuern:

* **`aria-atomic`**: Bestimmt, ob der gesamte Inhalt des Elements oder nur die Änderung vorgelesen wird.
  * `aria-atomic="true"`: Der gesamte Inhalt wird gelesen, wenn eine Änderung eintritt.
  * `aria-atomic="false"` (Standard): Nur der geänderte Teil wird vorgelesen.
* **`aria-relevant`**: Bestimmt, welche Arten von Änderungen vorgelesen werden sollen.
  * Mögliche Werte sind:
    * `additions`: Neu hinzugefügte Inhalte werden vorgelesen.
    * `removals`: Gelöschte Inhalte werden vorgelesen.
    * `text`: Textänderungen werden vorgelesen.
    * `all`: Jegliche Änderungen (hinzugefügt, entfernt oder geändert) werden vorgelesen.

**Beispiel mit `aria-atomic` und `aria-relevant`:**

```html
<div aria-live="assertive" aria-atomic="true" aria-relevant="additions text">
  <p id="status">Keine neuen Nachrichten.</p>
</div>
```

> In diesem Beispiel würde der Screenreader den gesamten Inhalt neu vorlesen, sobald eine Textänderung oder eine neue Nachricht hinzugefügt wird, da `aria-atomic="true"` und `aria-relevant="additions text"` gesetzt sind.

#### 5. **Praktische Anwendungsfälle für ARIA-Live-Regionen**

**a) Ladeanzeigen und Statusmeldungen**

Beim Laden von Inhalten kannst du `aria-live="polite"` verwenden, um den Nutzer darüber zu informieren, dass etwas im Hintergrund passiert, ohne dass es den Lesefluss unterbricht.

```html
<div aria-live="polite" id="loading-status">Lädt, bitte warten...</div>

<script>
  // Simuliert eine Ladeanzeige, die nach dem Laden verschwindet
  setTimeout(() => {
    document.getElementById('loading-status').textContent = 'Ladevorgang abgeschlossen!';
  }, 3000);
</script>
```

**b) Fehlermeldungen**

Für Fehlermeldungen eignet sich `aria-live="assertive"`, da diese sofort vorgelesen werden sollen, um dem Nutzer klar zu signalisieren, dass ein Problem aufgetreten ist.

```html
<div aria-live="assertive" id="error-message" style="color: red;"></div>

<script>
  function showError(message) {
    document.getElementById('error-message').textContent = message;
  }

  showError("Fehler: Die E-Mail-Adresse ist ungültig.");
</script>
```

**c) Eingehende Benachrichtigungen**

Für eingehende Chatnachrichten oder Benachrichtigungen kannst du ebenfalls `aria-live="polite"` verwenden, damit der Nutzer die Nachricht erfährt, aber nicht zu stark abgelenkt wird.

```html
<div aria-live="polite" id="notification-area">Keine neuen Nachrichten.</div>

<script>
  function newMessage(msg) {
    document.getElementById('notification-area').textContent = msg;
  }

  // Beispiel: Neue Nachricht wird hinzugefügt
  setTimeout(() => {
    newMessage("Neue Nachricht von Alex: Hallo!");
  }, 5000);
</script>
```

#### 6. **Best Practices und Tipps**

* **Übertreibe es nicht mit `aria-live="assertive"`**: Da `assertive` die Lesefolge sofort unterbricht, kann es störend sein, wenn zu viele `assertive`-Regionen auf einer Seite vorhanden sind. Verwende es daher nur bei wichtigen Benachrichtigungen.
* **Überlege, ob der gesamte Inhalt oder nur Änderungen vorgelesen werden sollen**: Mit `aria-atomic="true"` kannst du sicherstellen, dass der gesamte Inhalt gelesen wird, was in manchen Fällen nützlicher ist. In anderen Situationen reicht es aus, nur die Änderung vorzulesen.
* **Setze `aria-live` in Intervallen ein**: Besonders wenn du Inhalte in bestimmten Intervallen aktualisierst (z. B. Echtzeitdaten), achte darauf, die Frequenz der Updates anzupassen, damit der Screenreader nicht überfordert wird.
* **Teste mit einem Screenreader**: Stelle sicher, dass die ARIA-Live-Regionen funktionieren, indem du sie mit einem Screenreader wie NVDA (Windows) oder VoiceOver (macOS) testest. Live-Regionen können je nach Screenreader unterschiedlich interpretiert werden.

***

#### Zusammenfassung

1. **Grundsätzliches**: Verwende `aria-live="polite"` für weniger dringende Änderungen und `aria-live="assertive"` für wichtige Inhalte, die sofort vorgelesen werden sollen.
2. **Feinsteuerung**: Nutze `aria-atomic` und `aria-relevant`, um die Steuerung der vorgelesenen Inhalte zu verfeinern.
3. **Gezielte Anwendung**: Setze Live-Regionen gezielt für Benachrichtigungen, Ladeanzeigen oder Fehlermeldungen ein.
4. **Testen und optimieren**: Teste alle ARIA-Live-Regionen mit einem Screenreader, um sicherzustellen, dass sie funktionieren und den Nutzer nicht überfordern.

Mit dieser Anleitung solltest du in der Lage sein, ARIA-Live-Regionen sinnvoll und gezielt einzusetzen, um dynamische Inhalte für Screenreader-Nutzer zugänglich zu machen!
