Accessible Search Form
Woher der Name Ihrer Suche kommt
Suchfeld, Lupe, Trefferansage: drei Stellen, an denen ein Suchformular verstummt.
Anatomie einer Suche
Was Menschen sehen. Was Technik weitergibt.
Eine gute Suche verbindet sichtbare Wörter, Tastaturfokus und Ergebnisstatus.
Im Browser
3 Treffer für „Barrierefreiheit“
- Barrierefreiheit prüfenPrüfverfahren und Fundstellen
- WCAG verständlich erklärtKriterien und Beispiele
- Landmark
role="search"Die Suche erscheint als eigener Bereich in der Landmark-Liste.
- Name des Felds
label[for] → input[id]„Website durchsuchen“ bleibt sichtbar und wird zum zugänglichen Namen.
- Fokus
:focus-visibleDer Rahmen zeigt, welches Element Enter als Nächstes auslöst.
- Neue Information
role="status"Die Trefferzahl wird höflich angesagt. Der Fokus bleibt im Suchfeld.
Nach dem Absenden
Ein Weg, zwei brauchbare Zustände
Treffer
3 Treffer für „Barrierefreiheit“- Ergebnisüberschrift beschreibt das Ziel
- Auszug erklärt den Inhalt vor dem Öffnen
- Ein Link pro Treffer vermeidet Wiederholungen
Keine Treffer
Keine Treffer für „Barrierefreihiet“- Der Suchbegriff bleibt im Feld
- Ein konkreter Korrekturvorschlag hilft weiter
- Die Seitenübersicht bietet einen zweiten Weg
Vollständiges Muster
Die Verbindung steckt im Markup
Das sichtbare Label liefert den Namen. Die Statusregion existiert bereits beim Laden; JavaScript ändert nur ihren Text. Im Beispiel durchsuchen Sie lokale Beispieldaten.
- Tab
- Feld, dann „Suchen“
- Enter
- Suche auslösen
- Danach
- Status hören, im Feld bleiben
<form id="suche" role="search">
<label for="suchfeld">Website durchsuchen</label>
<div class="suchzeile">
<input id="suchfeld" name="q" type="search">
<button type="submit">Suchen</button>
</div>
</form>
<p id="suchstatus" role="status"></p>
<ul id="suchtreffer"></ul>
<script>
const seiten = [
{ titel: 'Barrierefreiheit prüfen', text: 'Prüfverfahren und Fundstellen' },
{ titel: 'WCAG verständlich erklärt', text: 'Kriterien und Beispiele' },
{ titel: 'Barrierefreie Formulare', text: 'Labels und Fehlermeldungen' }
];
const formular = document.querySelector('#suche');
const feld = document.querySelector('#suchfeld');
const status = document.querySelector('#suchstatus');
const liste = document.querySelector('#suchtreffer');
formular.addEventListener('submit', (ereignis) => {
ereignis.preventDefault();
const begriff = feld.value.trim();
const funde = seiten.filter((seite) =>
(seite.titel + ' ' + seite.text)
.toLowerCase()
.includes(begriff.toLowerCase())
);
liste.replaceChildren(...funde.map((fund) => {
const eintrag = document.createElement('li');
const titel = document.createElement('strong');
const text = document.createElement('p');
titel.textContent = fund.titel;
text.textContent = fund.text;
eintrag.append(titel, text);
return eintrag;
}));
status.textContent = funde.length === 1
? `1 Treffer für „${begriff}“`
: `${funde.length} Treffer für „${begriff}“`;
});
</script>Prüfen Sie die vier Verbindungen
- Name: Klick auf „Website durchsuchen“ setzt den Cursor ins Feld.
- Fokus: Tab zeigt einen gut sichtbaren Rahmen an Feld und Schaltfläche.
- Status: Enter aktualisiert die Zahl, ohne den Fokus zu versetzen.
- Leerer Zustand: Null Treffer bleibt eine verständliche Antwort.
Aus dem Prüfbericht
Drei Stellen, drei Befunde
Kritisch Das Suchfeld hat keinen Namen Regel label
Der Platzhalter zählt nicht als Name. Ein label mit for, sichtbar oder visuell verborgen, liefert ihn.
Kritisch Die Lupe hat keinen Namen Regel button-name
Das Symbol allein sagt „Schaltfläche“. aria-label="Suchen" ergänzt das Wort, das vorgelesen wird.
Kritisch aria-live="polit" ist kein Wert Regel aria-valid-attr-value
Der Tippfehler schaltet die Trefferansage ab. aria-live kennt off, polite und assertive.
Zum Mitnehmen
Das Suchformular, korrigiert
Ein label, ein aria-label, ein korrekter Wert.
Korrektur in 2 Schritten ansehen
Suchfeld und Lupe benennen
Das label liefert den Namen des Felds, aria-label den Namen der Schaltfläche. Das Aussehen bleibt.
KorrekturvergleichSchritt 1 · HTML Vorher
<form role="search"> <input type="search" name="q" placeholder="Suchbegriff eingeben"> <button type="submit"> <svg aria-hidden="true"><use href="#icon-lupe"></use></svg> </button> </form>Nachher
<form role="search"> <label for="suche">Website durchsuchen</label> <input id="suche" type="search" name="q" placeholder="Suchbegriff eingeben"> <button type="submit" aria-label="Suchen"> <svg aria-hidden="true"><use href="#icon-lupe"></use></svg> </button> </form>Markierte Zeilen wurden geändert
So prüfen Sie es Tab durch das Formular. Ein Vorleseprogramm sagt „Website durchsuchen, Eingabefeld“ und „Suchen, Schaltfläche“.
Die Trefferansage einschalten
aria-live="polite" sagt die Trefferzahl an, sobald sie im Bereich erscheint.
KorrekturvergleichSchritt 2 · HTML Vorher
<div id="treffer" aria-live="polit"></div>Nachher
<div id="treffer" aria-live="polite"></div>Markierte Zeilen wurden geändert
So prüfen Sie es Suchen Sie nach einem Wort. Ein Vorleseprogramm sagt „3 Treffer für …“, ohne dass Sie den Fokus bewegen.
