aria-modal am Dialog

Der Dialog sperrt, was hinter ihm liegt

Dialog und Hintergrundseite: zwei Stellen, an denen Modalität stimmen muss.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 4.1.2Erreichbarer Link im verborgenen Bereich

Semantik und Sperre

aria-modal ist das Schild, nicht die Tür

Erst vier zusammenhängende Schichten machen aus einem Fenster einen modalen Dialog.

Röntgenbild eines modalen DialogsKonzeptionelle Darstellung, keine bedienbare Oberfläche
1

Namearia-labelledby="dialog-titel"

2

Semantikrole="dialog" aria-modal="true"

dialog · modal

Newsletter abbestellen?

Sie erhalten danach keine Hinweise mehr.

AbbrechenAbbestellen
Fokus bleibt innerhalb des Dialogs Tab führt von Abbrechen zu Abbestellen. Eine weitere Tab-Taste führt zurück zu Abbrechen. Umschalt und Tab laufen in die Gegenrichtung.

Tab läuft zwischen den Dialogaktionen im Kreis.

3

SperreDer Hintergrund ist sichtbar verdeckt und inert.

4

FokusEr beginnt innen, bleibt innen und kehrt danach zurück.

aria-modal="true"teilt den Zustand mit
Fokus + inert + Darstellungsetzt den Zustand um
modalfür alle

Drei ähnliche Zeilen, drei verschiedene Ergebnisse

Nur eine Variante baut die Sperre des Browsers auf.

aria-modal="true"

Ansage ohne Verhalten

  • jaModalität im Accessibility Tree
  • neinHintergrund automatisch inert
  • neinFokus automatisch eingeschlossen

dialog.show()

Nicht modaler Dialog

  • janatives Dialogelement sichtbar
  • neinHintergrund inert
  • nein::backdrop im Top Layer

dialog.showModal()

Modales Verhalten

  • jaDialog im Top Layer
  • jaübriges Dokument inert
  • ja::backdrop verfügbar

Der Fokusweg muss geschlossen sein

Auslöser

Fokus steht auf „Newsletter abbestellen“.

öffnet
Dialog

Fokus zieht ein. Tab und Umschalt + Tab bleiben hier.

Escape oder schließen
Rückkehr

Fokus landet wieder am Auslöser.

Die native Kurzform

showModal() setzt den Dialog in den Top Layer und macht das übrige Dokument inert. Der explizite close-Handler hält die Rückkehr des Fokus eindeutig.

<button type="button" id="oeffnen">
  Newsletter abbestellen
</button>

<dialog id="abmelden" aria-labelledby="dialog-titel">
  <h2 id="dialog-titel">Newsletter abbestellen?</h2>
  <p>Sie erhalten danach keine Hinweise mehr.</p>
  <form method="dialog">
    <button value="abbrechen" autofocus>Abbrechen</button>
    <button value="bestaetigen">Abbestellen</button>
  </form>
</dialog>

<script>
  const oeffner = document.getElementById('oeffnen');
  const dialog = document.getElementById('abmelden');

  oeffner.addEventListener('click', () => dialog.showModal());
  dialog.addEventListener('close', () => oeffner.focus());
</script>

So prüfen Sie es

TabKein Ziel hinter dem offenen Dialog erhält Fokus.

Umschalt + TabDer Fokus kreist auch rückwärts.

EscapeDer Dialog schließt über die Plattformaktion.

ZeigerDer verdeckte Hintergrund reagiert nicht.

VorlesenName und Rolle des Dialogs werden erkannt.

SchließenDer Fokus kehrt zum sinnvollen Ausgangspunkt zurück.

Aus dem Prüfbericht

Zwei Stellen, zwei Befunde

Zum Mitnehmen

Der Dialog, korrigiert

Das native Element, modal geöffnet, mit gesperrtem Hintergrund.

Korrektur in 3 Schritten ansehen
  1. Den nativen Dialog verwenden

    Das Element dialog bringt Rolle und Modalität mit. Ein aria-modal am div beschreibt nur etwas, das nicht passiert.

    KorrekturvergleichSchritt 1 · HTML

    Vorher

    <div class="dialog" aria-modal="true">
      <h2>Newsletter abbestellen</h2>
    </div>

    Nachher

    <dialog id="abmelden">
      <h2>Newsletter abbestellen</h2>
    </dialog>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Öffnen Sie den Dialog und drücken Sie mehrfach die Tabulatortaste. Der Fokus bleibt darin.

  2. Den Dialog modal öffnen

    show öffnet ohne Sperre, showModal mit. Nur showModal hält Fokus und Bedienung innerhalb des Dialogs.

    KorrekturvergleichSchritt 2 · JavaScript

    Vorher

    document.getElementById('abmelden').show();

    Nachher

    document.getElementById('abmelden').showModal();

    Markierte Zeilen wurden geändert

    So prüfen Sie es Klicken Sie neben den Dialog. Die Seite dahinter reagiert nicht mehr.

  3. Den Hintergrund richtig sperren

    Wo kein nativer Dialog möglich ist, macht inert den Hintergrund stumm und unbedienbar. aria-hidden tut nur das Erste.

    KorrekturvergleichSchritt 3 · HTML

    Vorher

    <main id="inhalt" aria-hidden="true">…</main>

    Nachher

    <main id="inhalt" inert>…</main>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Tabben Sie bei offenem Dialog weiter. Kein Link der Seite dahinter bekommt Fokus.

Werbung

Kostenloser Website-Barrierefreiheits-Check

Website auf Barrierefreiheit prüfen.

Technische WCAG-Warnsignale erkennen. Kritische Stellen zuerst prüfen.

Der Website-Check ist bereit.

Werbung

Ein letzter Schritt

Prüfen, bevor Sie gehen.

Finden Sie automatisch erkennbare Barrieren auf Ihrer eigenen Website.

Website prüfen

Kostenlos starten · keine Installation

Automatisches Screening. Tastaturbedienung und Screenreader bleiben manuelle Prüfung.