Barrierefreies Kontaktformular: Labels, Fehler und Fokus

Ein Kontaktformular muss nicht kompliziert sein. Entscheidend sind verständliche Labels, erkennbare Fehler und eine sichere Übermittlung – auch mit Tastatur und Screenreader.

Ein Formular kann visuell hervorragend aussehen und trotzdem schwer benutzbar sein. Häufige Probleme sind fehlende Labels, unklare Pflichtfelder, verschwindende Fehlermeldungen und eine Bestätigung, die nur durch Farbe sichtbar wird.

Diese Anleitung zeigt, wie du ein Kontaktformular mit semantischem HTML und wenigen gezielten Ergänzungen aufbaust. Der Fokus liegt auf Bedienbarkeit, nicht auf einem bestimmten Framework.

Fünf Grundlagen, die jedes Formular braucht

  1. Sichtbare Labels: Ein Platzhalter ist kein Ersatz für ein korrekt zugeordnetes label.
  2. Pflichtfelder klar markieren: Nicht nur mit einem roten Stern, sondern auch sprachlich.
  3. Fehler neben dem Feld erklären: Was ist falsch und wie lässt es sich beheben?
  4. Tastaturzugriff erhalten: Alle Felder, Buttons und Hilfelinks müssen erreichbar sein.
  5. Rückmeldung nach dem Absenden geben: Erfolg oder Fehler muss als Text verfügbar sein.

Das W3C empfiehlt, Beschriftungen und Eingabefelder ausdrücklich miteinander zu verbinden. Wichtig ist: Der Wert von for am Label muss zur id des Formularfelds passen. Siehe W3C WAI – Labeling Controls.

Ein einfaches HTML-Grundgerüst

<form action="/dein-sicherer-endpunkt" method="post">
  <p>Mit „Pflichtfeld“ gekennzeichnete Angaben sind erforderlich.</p>

  <div class="form-field">
    <label for="contact-name">Name (Pflichtfeld)</label>
    <input
      id="contact-name"
      name="name"
      type="text"
      autocomplete="name"
      required
    >
  </div>

  <div class="form-field">
    <label for="contact-email">E-Mail (Pflichtfeld)</label>
    <input
      id="contact-email"
      name="email"
      type="email"
      autocomplete="email"
      required
      aria-describedby="contact-email-help"
    >
    <p id="contact-email-help">
      An diese Adresse senden wir dir unsere Antwort.
    </p>
  </div>

  <div class="form-field">
    <label for="contact-message">Nachricht (Pflichtfeld)</label>
    <textarea
      id="contact-message"
      name="message"
      rows="6"
      required
    ></textarea>
  </div>

  <button type="submit">Anfrage absenden</button>
</form>

Nicht ungeprüft produktiv einsetzen: Die URL /dein-sicherer-endpunkt ist ein Platzhalter. Es fehlt noch der echte sichere PHP- oder Backend-Endpunkt mit serverseitiger Validierung, CSRF-Schutz und geeigneter Spam-Abwehr.

Das Formular setzt absichtlich auf native HTML-Felder. Sie bringen viele Tastatur- und Validierungsfunktionen bereits mit.

aria-describedby: Hilfetexte sauber zuordnen

Ein Feld darf einen erklärenden Text haben. Durch aria-describedby="contact-email-help" kann dieser Text von Assistenztechnologien dem Eingabefeld zugeordnet werden.

Das ist vor allem bei Formatvorgaben hilfreich: etwa bei einer Auftragsnummer oder einer Längenbegrenzung.

Fehlermeldung direkt am Feld

Wenn die E-Mail-Adresse nach einer serverseitigen Prüfung ungültig ist, könnte das gerenderte Feld so aussehen:

<label for="contact-email">E-Mail (Pflichtfeld)</label>
<input
  id="contact-email"
  name="email"
  type="email"
  aria-invalid="true"
  aria-describedby="contact-email-help contact-email-error"
  value=""
  required
>
<p id="contact-email-help">An diese Adresse senden wir die Antwort.</p>
<p id="contact-email-error">
  Bitte gib eine gültige E-Mail-Adresse ein.
</p>

Setze aria-invalid="true" nur, wenn tatsächlich ein Fehler vorliegt. Bei einer erfolgreichen Korrektur sollte der Fehlerzustand wieder verschwinden.

Bei mehreren Fehlern ist eine Fehlerzusammenfassung am Formularanfang hilfreich. Nach einem fehlgeschlagenen Absenden kann der Fokus gezielt dorthin gesetzt werden. Die einzelnen Einträge sollten möglichst zu den betroffenen Feldern springen.

Das W3C beschreibt diesen Ansatz unter Eingaben prüfen und Fehler mitteilen.

Fokus, Farbe und Kontrast

Ein Formular darf nicht nur für die Maus gestaltet werden. Mindestens genauso wichtig ist der sichtbare Tastaturfokus.

.form-field input,
.form-field textarea,
form button {
  font: inherit;
  max-width: 100%;
}
.form-field input:focus-visible,
.form-field textarea:focus-visible,
form button:focus-visible {
  outline: 3px solid currentColor;
  outline-offset: 3px;
}
.form-field [aria-invalid="true"] {
  border: 2px solid currentColor;
}

Für echte Projekte braucht der Fehlerzustand zusätzlich eine Textmeldung. Nur eine rote Umrandung genügt nicht. Prüfe Kontrast, Zoom und das Verhalten bei hoher Textvergrößerung.

Was passiert nach dem Klick auf „Absenden“?

Ein gutes Formular kommuniziert den Zustand verständlich:

Zustand Erwartete Rückmeldung
Eingaben fehlen Pflichtfeld klar benennen
Formular wird übertragen Visuellen Zustand anzeigen, Mehrfachübertragung verhindern
Versand erfolgreich Verständliche Textbestätigung, nicht nur grünes Häkchen
Versand fehlgeschlagen Fehler erklären und erneuten Versuch ermöglichen

Bei einer JavaScript-Übermittlung darf der Erfolg nicht einfach außerhalb des Sichtbereichs erscheinen. Verwende einen passenden Statusbereich, etwa mit role="status", oder setze den Fokus gezielt auf eine sichtbare Bestätigung. Bei Formularfehlern ist eine eindeutige Fokusstrategie besonders wichtig.

Sicherheit und Datenschutz gehören dazu

Barrierefreiheit ersetzt keine Backend-Sicherheit. Der Server muss die Daten erneut prüfen. Zusätzlich solltest du die Übermittlung auf HTTPS beschränken, Spam-Schutz einplanen und nur erforderliche Daten abfragen.

Eine Telefonnummer ist beispielsweise oft kein Pflichtfeld, wenn ein Kontakt auch per E-Mail möglich ist. Sammle nicht mehr Informationen als für die Anfrage erforderlich.

Wichtig ist außerdem eine funktionierende Datenschutzerklärung. Rechtliche Anforderungen hängen vom konkreten Einsatz ab. Dieser Artikel ist keine Rechtsberatung.

Checkliste für den Praxistest

Teste den vollständigen Ablauf mit Tab, Shift+Tab, Enter und der Bildschirmtastatur auf dem Smartphone. Wiederhole ihn bei 200 % Zoom. Gib falsche Werte ein, verlasse Pflichtfelder leer und simuliere einen Serverfehler.

Kontrolliere dann, ob alle Hinweise ohne Farbe verständlich sind, keine Inhalte abgeschnitten werden und eingegebene Werte nach einem Fehler erhalten bleiben.

Weitere technische Grundlagen findest du in unserer Website-Relaunch-Checkliste. Unterstützung bei Planung und Umsetzung bietet Webdesign für Unternehmen.

Fazit

Ein barrierefreies Kontaktformular beginnt mit echten Labels, verständlichen Fehlermeldungen und einem verlässlichen Fokus. JavaScript kann die Bedienung verbessern, sollte grundlegende HTML-Funktionen aber nicht unnötig ersetzen.

War dieser Artikel hilfreich?

Dein Feedback hilft uns, unsere Ratgeber zu verbessern.

Mit Digitalhaus Kunze gearbeitet?

Dann freuen wir uns über deine ehrliche Erfahrung auf Google – unabhängig davon, ob sie positiv oder kritisch war.

Auf Google bewerten

Artikel teilen

WhatsApp ↗ LinkedIn ↗ E-Mail ↗

Alle Ratgeberartikel

DIGITALHAUS / REGIONEN

In deiner Region aktiv.

Entdecke die verfügbaren regionalen Leistungsseiten. Betreut aus Wettin-Löbejün im Saalekreis.

Rhein-Neckar

Auch im Umfeld: Heidelberg · Ludwigshafen am Rhein · Schwetzingen · Viernheim

Halle & Saalekreis

Auch im Umfeld: Bad Dürrenberg · Landsberg · Leuna · Petersberg · Salzatal · Schkopau · Wettin-Löbejün

Leipzig & Umgebung

Auch im Umfeld: Delitzsch · Markkleeberg · Markranstädt · Schkeuditz · Taucha

Salzlandkreis

Auch im Umfeld: Alsleben (Saale) · Arnstein · Barby · Bördeland · Calbe (Saale) · Güsten · Ilberstedt · Könnern · Nienburg (Saale) · Seeland

Anhalt-Bitterfeld

Auch im Umfeld: Aken (Elbe) · Muldestausee · Osternienburger Land · Raguhn-Jeßnitz · Sandersdorf-Brehna · Südliches Anhalt · Zörbig

Magdeburg & Umgebung

Auch im Umfeld: Biederitz · Sülzetal · Wolmirstedt

Dessau-Roßlau & Umgebung

Auch im Umfeld: Aken (Elbe) · Coswig (Anhalt) · Oranienbaum-Wörlitz

Mansfeld-Südharz

Auch im Umfeld: Gerbstedt · Goldene Aue · Großörner · Klostermansfeld · Mittelhausen · Niederröblingen · Oberröblingen · Siebigerode · Vatterode · Walbeck · Wettelrode · Wolferstedt

Rhein-Main-Gebiet

Auch im Umfeld: Aschaffenburg · Bruchköbel · Budenheim · Bürgel · Dreieich · Flörsheim am Main · Friedrichsdorf · Griesheim · Groß-Gerau · Hofheim am Taunus · Ingelheim am Rhein · Kaiserlei · Langen (Hessen) · Maintal · Ober-Eschbach · Oberursel (Taunus) · Pfungstadt · Raunheim · Schwalbach am Taunus · Sulzbach (Taunus) · Taunusstein · Weiterstadt

Thüringen

Auch im Umfeld: Apolda · Arnstadt · Gotha · Rudolstadt · Stadtroda · Weimar

Sachsen

Auch im Umfeld: Freiberg · Freital · Mittweida · Pirna · Radebeul · Zwickau

Harz

Auch im Umfeld: Allrode · Bad Suderode · Ballenstedt · Derenburg · Drei Annen Hohne · Friedrichsbrunn · Gernrode · Heimburg · Hüttenrode · Huy · Ilsenburg · Langenstein · Osterwieck · Schierke · Treseburg