Auf dieser Seite39
- TL;DR
- Wann man Funkgeräte verwendet (Entscheidungsbaum)
- Anatomie einer richtigen Radiogruppe
- Semantische Grundlinie kopieren und einfügen (noch kein ausgefallenes CSS)
- Minimales CSS für Benutzerfreundlichkeit (natives Aussehen, große Ziele, klarer Fokus)
- Sanfte, zugängliche Validierung (verwendet zuerst den Browser)
- Custom-Styled “Card” Radios (without breaking accessibility)
- Copy-paste HTML
- Minimales, robustes CSS
- Verhaltenshinweise (warum dieses Muster funktioniert)
- Optional: sanfte Validierung (nativ zuerst)
- Validierungsstrategien, die nicht stören
- Prinzipien
- Grundlinie (nur nativ)
- Freundliche Inline-Fehler (progressive Verbesserung)
- Sanfte Validierung pro Schritt (mehrstufige Formulare)
- Benutzerdefinierte Nachrichten mit der Constraint API (optional)
- Fehlerzusammenfassung (für lange Formulare)
- Serverseitige und Netzwerk-Fallbacks
- Formspree-Integration (progressive Erweiterung)
- Natives HTML (funktioniert immer)
- JS-Verbesserung (schöne UX, besseres Tracking)
- Spam-Kontrolle ohne Beeinträchtigung der Conversions
- Betreffzeilen, die die Radioauswahl widerspiegeln (sauberer Posteingang)
- Häufige Fallstricke, die es zu vermeiden gilt
- Internationalisierung und Inklusivität
- Sprache, Bezeichnungen und Ton
- Lange Beschriftungen und mehrzeilige Optionen
- Rechts-nach-links-Unterstützung (RTL)
- Barrierefreiheit über ARIA hinaus
- Test-Checkliste (druckfreundlich)
- Leistung und Wartbarkeit
- Analytik und Experimente
- Anti-Patterns (Tu das nicht)
- Abschließende Checkliste
- Ressourcen
- Spezifikationen und Erstellungsmuster
- Referenzhandbücher
- Prüfung und Werkzeugbau
Optionsfelder sehen einfach aus. Ein Klick, eine Wahl. Allerdings sind sie auch eine der einfachsten Möglichkeiten, UX und Barrierefreiheit zu gefährden. Blenden Sie die native Eingabe aus und überspringen SieFeldsatzundLegendeOder führen Sie eine zu aggressive Validierung durch, und Sie erhalten ein Formular, das Tastaturbenutzer verwirrt, Bildschirmleser frustriert und zu Konvertierungsverlusten führt.
Dieser Leitfaden zeigt Ihnen, wie Sie Radios im Jahr 2025 richtig machen: schnell auszuwählen, einfach zu scannen, vollständig zugänglich und messbar. Wir beginnen mit einer klaren, semantischen Grundlinie und fügen dann modernes CSS hinzu, damit Radios wie Karten oder segmentierte Steuerelemente aussehen können, ohne das Tastatur- oder Bildschirmleseverhalten zu beeinträchtigen.
Sie werden praktische Validierungsmuster sehen, die nicht stören, responsive Layouts, die die Ziele auf Mobilgeräten groß halten, und Produktions-Snippets, die Sie in jeden Stapel einfügen können. Wir behandeln außerdem Analysen, A/B-Ideen und ein Formspree-Setup, damit Sie Ergebnisse sofort erfassen können.
Für wen ist das gedacht: Designer, Front-End-Entwickler und Vermarkter, denen beides am Herzen liegtZugänglichkeitundKonvertierung. Es sind keine umfangreichen Frameworks erforderlich, nur solides HTML, fokussiertes CSS und ein wenig progressive Verbesserung.
Am Ende wissen Sie:
- Wenn Radios schlagen, werden
- ausgewählt, Kontrollkästchen aktiviert oder umgeschaltet So erstellen Sie eine zugängliche Radiogruppe (
Fieldset,Legende, Beschriftung, Fokus) - So gestalten Sie benutzerdefinierte „Karten“-Radios, ohne die Eingabe zu verbergen
- So validieren Sie mit der HTML-Einschränkungs-API (und dem Nachrichtenbereich)
- Wie man Funkgeräte mit Formspree verbindet und Auswahlen misst
TL;DR
- Verwenden SieRadiosfür genaueinsAuswahl innerhalb einer wohldefinierten Menge (idealerweise2–6 Optionen), diesein sollte sofort sichtbar.
- Wickeln Sie Radios immer in
ein+, gib ihnen dasdasselbeName, und machen Sie jede Option zu einemanklickbar. - Eingaben mit
nicht ausblenden Anzeige:keine; behalte siefokussierbar(z. B.opacity:0; position:absolute; inset:0) alsoTab/Pfeile/Leertastearbeiten. - Machen Sie sich große Ziele: mindestens44×44px, mit einemFokusringdas ist deutlich zu erkennen.
- Bestätigen Sie mitHTML-Einschränkungs-API(
erforderlich,reportValidity()), dann Nachrichten verbessern, nicht umgekehrt. - Wenn Sie viele Optionen haben oder diese Ihnen nicht bekannt sind, fügen Siehinzu Hilfstextunter jedem Label und berücksichtigen SieSuche oder Gruppierungstattdessen.
- Auf Mobilgeräten stapeln Sieeine Spalte; auf Breitbildschirmen,2–3 Spaltenüber CSS-Raster.
- Maß: SpurEindrücke, Auswahl und Absenden, und A/B-TestOptionsreihenfolgeundkopieren.
- Behalten Sie für Formspreebei nativer POSTals Ersatz;hinzufügen holennur als progressive Steigerung.
Wann man Funkgeräte verwendet (Entscheidungsbaum)
Q1. Wählt der Benutzer genau eine Option?
- Nein →Verwenden SieKontrollkästchen(0–viele) oder einumschalten(binär) oder überdenken Sie die Aufgabe.
- Ja →Gehen Sie zu Q2.
Q2. Müssen die Optionen auf einen Blick sichtbar sein?
- Ja →Verwenden SieRadios(am besten zum Scannen und zur schnellen Auswahl geeignet).
- Nein (der Platz ist knapp / viele Optionen)→ Betrachten Sie einWählen Sie(runterfallen). Wenn die Auswahl entscheidend ist und von Vergleichen profitiert, bevorzugen Sie Radios und gestalten Sie das Layout neu.
Q3. Wie viele Optionen?
- 2–6→ Radios sind ideal.
- 7–10→ Radios funktionieren möglicherweise weiterhin mit Gruppierung oder einemzweispaltigNetz; andernfalls verwenden Sie eine Auswahlliste oder eine durchsuchbare Liste.
- >10→ Verwenden Sie einMit der Suche auswählenoder einSchrittDas schränkt die Menge zunächst ein.
Q4. Schließen sich die Optionen gegenseitig aus?
- Ja →Radios.
- Keine / Kombinationen machen Sinn →Kontrollkästchen.
F5. Wird die Wahl unterschiedliche Folgefragen auslösen?
- Ja →Radios immer noch in Ordnung. Follow-ups anzeigenbedingt, aber versteckte Felder beibehaltenaußerhalb der Tab-Reihenfolgeund SR-Fluss bis zur Offenlegung.
- Nein →Einfache Radiogruppe.
F6. Vertraut oder beschreibend?
- Bekannte Labels(z. B. „Klein / Mittel / Groß“) → kurze Beschriftungen reichen aus.
- Unbekannt oder risikoreich(z. B. „Technisches SEO vs. Content-SEO“) →hinzufügen Mikrokopie(einzeilige Beschreibung) unter jedem Etikett.
F7. Mobile-first?
- Ja (immer)→ Verwenden Sieeinspaltiger Stapelmit großzügigem Abstand und 16–18 Pixel Text. Bewerben Sie dasam häufigsten ausgewähltOption nach oben.
Praxisbeispiele
- Ihr Formular: „Welcher Dienst?“ → Radios schlagen eine Auswahl, da Benutzer Optionen nebeneinander vergleichen sollten. Behalten Sie 3 Karten (Linkbuilding, SEO, Web Dev) mit kurzem Subtext.
- Versandgeschwindigkeit: 3–4 sich gegenseitig ausschließende Geschwindigkeiten → Radios (mit Preisdeltas im Subtext).
- Newsletter-Häufigkeit: Täglich/Wöchentlich/Monatlich → Radios.
- Interessen (mehrere möglich)→ Keine Radios; Verwenden Sie Kontrollkästchen.
Anatomie einer richtigen Radiogruppe
Semantische Grundlinie kopieren und einfügen (noch kein ausgefallenes CSS)
Warum jeder Teil wichtig ist
+Gibt der Gruppe einen Namen für Screenreader und legt den Kontext für alle fest.- Gleiches
NameDadurch schließen sich die Eingaben gegenseitig aus. - Anklickbar
um jeden Eingangbietet Ihnen einen riesigen Tipp-/Klickbereich (44 Pixel+). erforderlichim ersten RadioErmöglicht dem Browser, die Gruppe nativ zu validieren.- Hilfstext(
service-hint) undFehlertext(service-error) sind separat, sodass Sie Fehler ein-/ausblenden können, ohne Dinge zu verschieben. - Keine ARIA-Rollen erforderlich.Native Radios stellen bereits die korrekte Semantik bereit.
Minimales CSS für Benutzerfreundlichkeit (natives Aussehen, große Ziele, klarer Fokus)
/* Layout und Abstand */
.Feldbezeichnung {
Anzeige: Flex;
align-items: center;
Lücke: .6rem;
Polsterung: .65rem .8rem; /* Big-Tap-Ziel */
Randradius: .6rem;
Cursor: Zeiger;
}
/* Tastaturfokus: Hebt die gesamte Beschriftung hervor, wenn die Eingabe fokussiert ist */
.field label:has(input:focus-visible) {
Umriss: 3px solide #3b82f6;
Umriss-Offset: 2px;
}
/* Ausgewählter Status (optional, nativer Punkt wird weiterhin angezeigt) */
.field label:has(input:checked) {
Hintergrund: #f1f5ff;
}
/* Fehlertext */
.error { color: #b91c1c; Rand oben: .5rem; Schriftgröße: .9rem; }
Tipp:
:has()gibt Ihnen den „Fokusring auf der gesamten Karte“, ohne die eigentliche Eingabe zu verbergen. Wenn ein älterer Browser dies nicht unterstützt, erhalten Benutzer weiterhin den nativen Fokusring am Radio selbst.
Sanfte, zugängliche Validierung (verwendet zuerst den Browser)
Lassen Sie den Browser den Teil „Sie müssen einen auswählen“ verarbeiten und zeigen Sie dann bei Bedarf Ihren Inline-Fehler an.
const form = document.getElementById('quote-form');
const group = document.getElementById('service-group');
const error = document.getEementById('service-error');
form.addEventListener('submit', (e) => {
// Native Validierungs-UI auslösen (funktioniert, weil das erste Radio „erforderlich“ ist)
if (!form.reportValidity()) {
// Optional: auch einen freundlichen Inline-Fehler anzeigen
error.hidden = false;
group.setAttribute('aria-invalid', 'true');
e.preventDefault();
. } else {
. error.hidden = true
.
Verhalten, das Sie erwarten (und testen) sollten:
Tastatur:
Einmal die Tabulatortaste drücken, um der Gruppe beizutreten; Verwenden Sie
- Pfeiltastensich bewegen;Leerzeichenwählt.Bildschirmleseprogramme:Die Legende wird als Gruppenbezeichnung gelesen; Jede Option wird mit dem Status „ausgewählt/nicht ausgewählt“ angekündigt.
- Berühren Sie:Durch Antippen des Etiketts wird das Radio umgeschaltet (dank Etikettenumhüllung).
- Maßgeschneiderte „Karten“-Radios (ohne Beeinträchtigung der Zugänglichkeit)HTML kopieren und einfügen
Custom-Styled “Card” Radios (without breaking accessibility)
Copy-paste HTML
Minimales, robustes CSS
:root{
--brand:#0b5cff; --ring: rgba(11,92,255,.35);
--border:#e5e7eb; --bg:#fff; --muted:#6b7280;
--radius:14px;
}
/* Gitter */
.card-group{
Anzeige:Gitter; Lücke:16px;
Rastervorlagenspalten: wiederholen(3, minmax(0,1fr));
}
@media (max-width:900px){ .card-group{ grid-template-columns:1fr 1fr; } }
@media (max-width:640px){ .card-group{ grid-template-columns:1fr; } }
/* Kartenetikett */
.card{
Position:relativ;
Anzeige:Gitter; place-items:center; text-align:center;
Lücke:6px; Polsterung:18px;
border:1px solid var(--border); Grenzradius:var(--radius);
Hintergrund:var(--bg);
Cursor:Zeiger; Benutzerauswahl: keine;
Übergang: Box-Shadow .15s, Border-Color .15s, Transformation .02s;
}
.card:hover{ box-shadow:0 8px 20px rgba(0,0,0,.06); }
/* Die native Eingabe fokussierbar halten: nein display:none */
.card-Eingabe{
Position:absolut; Einschub:0; Deckkraft:0;
}
/* Tastaturfokusring auf der gesamten Karte */
.card:has(input:focus-visible){
box-shadow:0 0 0 3px var(--ring);
Rahmenfarbe: var(--brand);
}
/* Ausgewählter Zustand */
.card:has(input:checked){
Rahmenfarbe: var(--brand);
box-shadow:0 0 0 3px var(--ring);
}
/* Inhalt */
.card-title{ Schriftgröße:700; Farbe:#111; }
.card-sub{ Schriftgröße:14px; color:var(--muted); }
/* Fehlertext */
.error{ color:#b91c1c; margin-top:.5rem; Schriftgröße:.9rem; }
Verhaltenshinweise (warum dieses Muster funktioniert)
- Nein
Anzeige:keineüber die Eingabe → Tastaturbenutzer können Tab eingeben;PfeiltastenAuswahl verschieben;Leerzeichenwählt. - Die gesamte Karte ist anklickbar, da sich die Eingabe innerhalb von
befindet Etikett. :has()Lass unsstylen FokusundüberprüftStaaten auf der übergeordneten Karte ohne ARIA-Hacks.- Responsives Raster ergibt1–3 Spaltenautomatisch; Touch-Ziele bleiben groß.
Optional: sanfte Validierung (nativ zuerst)
const form = document.getElementById('plan');
const err = document.getElementById('plan-error');
form.addEventListener('submit', (e) => {
if (!form.reportValidity()) { // verwendet das „erforderliche“ beim ersten Radio
err.hidden = false;
e.preventDefault();
} else {
err.hidden = true;
}
});
Validierungsstrategien, die nicht stören
Eine großartige Validierung ist unsichtbar, bis sie benötigt wird. Hier ist ein funkspezifischer Ansatz, der schnell, zugänglich und für Benutzer beruhigend ist.
Prinzipien
- Zuerst die Einheimischen.Überlassen Sie HTML die Verarbeitung von „Einer muss ausgewählt werden“.
- Fehler aufschieben.Schreien Sie Benutzer nicht an, bevor sie versuchen, fortzufahren.
- Weisen Sie auf das Problem hin.Machen Sie Fehler bekannt, verschieben Sie den Fokus intelligent und halten Sie den Text kurz.
- Klar über Veränderung.Sobald eine gültige Auswahl getroffen wurde, beseitigen Sie den Fehler.
Grundlinie (nur nativ)
HTML allein kann die Regel mitdurchsetzen erforderlichauf einem Radio in der Gruppe.
Damit erhalten Sie bereits Folgendes: Tastaturpfeile, Leertaste zum Auswählen und Validierung auf Browserebene.
Freundliche Inline-Fehler (progressive Verbesserung)
Deaktivieren Sie das Popup des Browsers und verarbeiten Sie die Nachrichten inline, sodass sie Ihrem Design entsprechen.
HTML (Fehlerbereich hinzufügen)
CSS (einfacher Stil)
.error { color:#b91c1c; margin-top:.5rem; Schriftgröße:.9rem; }
JS (Fehler aufschieben, richtig ankündigen)
const form = document.getElementById('quote');
const group = document.getElementById('svc');
const err = document.getElementById('svc-err');
const radios = form.querySelectorAll('input[name="service"]');
letversuched = false; // Fehler nur anzeigen, nachdem der Benutzer versucht, fortzufahren
Funktion hasSelection() {
return [...radios].some(r => r.checked);
}
function showError(msg='Bitte wählen Sie eine Option.') {
err.textContent = msg;
err.hidden = false;
group.setAttribute('aria-invalid', 'true');
// Fehler an „beschrieben von“ anhängen, damit SRs ihn als nächstes ankündigen
group.setAttribute('aria-describedby', 'svc-hint svc-err');
}
Funktion clearError() {
err.hidden = true;
group.removeAttribute('aria-invalid');
group.setAttribute('aria-describedby', 'svc-hint');
}
form.addEventListener('submit', (e) => {
versuchte = true;
if (!hasSelection()) {
e.preventDefault();
showError();
// Bringen Sie die Gruppe ins Blickfeld und platzieren Sie den Fokus auf dem ersten Radio
radios[0].focus();
group.scrollIntoView({ behavior: 'smooth', block: 'center' });
} else {
. clearError();
}
.
// Nicht zu früh nörgeln; klar, sobald sie etwas auswählen
radios.forEach(r => {
r.addEventListener('change', () => {
if (versucht) clearError();
});
});
Warum das funktioniert
- Keine Browser-Tooltip-Blasen; Benutzer sehen Fehlerinlineneben der Gruppe.
- Bildschirmleser hören das ZeichenLegende, dann dasFehler, danke an
Arie-beschrieben von. - Fehler treten nurauf nachein Absendeversuch (oder bei der Rückkehr zum Fix).
Sanfte Validierung pro Schritt (mehrstufige Formulare)
Wenn Sie mit der Schaltfläche „Weiter“ starten, bestätigen Sie nur diesen Schritt.
document.getElementById('nextBtn').addEventListener('click', () => {
if (!hasSelection()) {
showError();
} else {
clearError();
// weiter zum nächsten Schritt...
}
});
Benutzerdefinierte Nachrichten mit der Constraint API (optional)
Wenn Sie lieber das Gültigkeitsmodell des Browsers beibehalten möchten, legen Sie eine benutzerdefinierte Nachricht imfest zuerstRadio in der Gruppe.
const firstRadio = radios[0];
form.addEventListener('submit', (e) => {
if (!hasSelection()) {
firstRadio.setCustomValidity('Bitte wählen Sie eine Option.');
// Löst die native Benutzeroberfläche aus; oder rufen Sie form.reportValidity() auf
e.preventDefault();
form.reportValidity();
} else {
firstRadio.setCustomValidity('');
}
});
Verwenden Sie diese Option, wenn Sie die native „Blase“ plus Ihren eigenen Text wünschen. Andernfalls bleiben Sie für eine konsistente Benutzeroberfläche bei der oben genannten Inline-Methode.
Fehlerzusammenfassung (für lange Formulare)
Wenn Ihr Formular lang ist, fügen Sie einhinzu Top-Zusammenfassungdas auf den Problembereich verweist.
Funktion showSummary() {
const sum = document.getElementById('error-summary');
sum.hidden = false;
sum.querySelector('a').focus(); // SRs kündigen den Alarm an
}
Serverseitige und Netzwerk-Fallbacks
Clientseitige Validierung verbessert UX, aberimmerValidierung auch auf dem Server (oder durch Ihren Übermittlungsdienst). Wenn die Übermittlung fehlschlägt, kehren Sie zur Seite zurück mit:
- Das vorherigeAuswahl blieb bestehen, und
- DasGleicher Inline-Fehlerneben der Gruppe.
Formspree-Integration (progressive Erweiterung)
Sorgen Sie dafür, dass Radios auch dann funktionieren, wenn JavaScript ausfällt, und verbessern Sie sie dann für ein reibungsloseres Dankeschön und bessere Analysen.
Natives HTML (funktioniert immer)
Was Ihnen das bringt:
- Funktioniert mit ausgeschaltetem JS (gut für SEO, Zuverlässigkeit).
- Der Browser verarbeitet „eines muss ausgewählt werden“ (
erforderlichim ersten Radio). - Formspree erhält
Dienst,Name,E-Mail, und_Betreff.
JS-Verbesserung (schöne UX, besseres Tracking)
Fangen Sie die Übermittlung ab, validieren Sie sie und senden Sie sie mitholen, und zeigen Sie ein Inline-Dankeschön (oder eine Weiterleitung) an.
Notizen
- Setze
Akzeptieren: application/jsonFormspree gibt also JSON zurück und Sie können sauber über Erfolg/Misserfolg entscheiden. - Verwenden Sie
form.reportValidity()Daher erzwingt der Browser die Radioauswahl und das E-Mail-Format, bevor Sie senden. - Behalten Sie das native
bei Aktion/MethodeDas Formular funktioniert also auch ohne JS.
Spam-Kontrolle ohne Beeinträchtigung der Conversions
- Honeypot(oben enthalten) fängt viele Bots ohne Reibungsverluste ab.
- Zeiteinteilung: Füge ein verstecktes
hinzu Gestartet_atwenn die Seite geladen wird; Ignorieren Sie Einsendungen schneller als beispielsweise 2 Sekunden. - Inhaltssignale: Wenn Sie wiederholt Junk-Werte sehen, filtern Sie diese in Ihren Formspree-Regeln oder in der Nachbearbeitung.
// im Submit-Handler vor dem Senden:
const gestartet = Number(fd.get('started_at'));
if (Date.now() - gestartet < 2000) return; // sieht aus wie ein Bot
Betreffzeilen, die die Radioauswahl widerspiegeln (sauberer Posteingang)
Sie könnenanpassen _Betreffvom ausgewählten Radio:
const service = fd.get('service'); // z. B. „seo“
fd.set('_subject', `Neuer ${service}-Lead aus dem Kontaktformular`);
Häufige Fallstricke, die es zu vermeiden gilt
- Radios ausblenden mit
Anzeige:keine.Verwenden SieDeckkraft:0; Position:absolut; Einschub:0innerhalb des Etiketts, sodass Tastaturen weiterhin funktionieren. - Vergessen
Feldsatz/Legende.Screenreader verlassen sich auf sie, um den Kontext zu ermitteln. - Frühe Übervalidierung.Fehler nach „Senden/Weiter“ anzeigen und löschen, sobald der Benutzer die Gruppe korrigiert.
- Der Kontext wird nicht erfasst. Add
hinzufügen page_url,Referrer, und UTM-Felder, Sie werden es sich später danken.
Internationalisierung und Inklusivität
Sprache, Bezeichnungen und Ton
- Verwenden Sie das
der Seite lang(und die Seiten pro Gebietsschema wechseln):… - Halten Sie die Beschriftungen kurz undbeschreibendVermeiden Sie kulturspezifischen Jargon.
- Bevorzugen SieneutralFormulierungen („Wählen Sie einen Plan“) über Annahmen („Wie hoch ist Ihr Budget?“).
- LokalisierenFehlerundHilfstextmit einem einfachen Wörterbuch mit dem Schlüssel
document.documentElement.lang.
const i18n = {
de: { Choose: 'Bitte wählen Sie eine Option.' },
es: { wählen: 'Wählen Sie eine Option, por favor.' },
ar: { wählen: 'يُرجى اختيار خيار واحد.' }
};
const t = (k) => (i18n[document.documentElement.lang] || i18n.en)[k];
errorEl.textContent = t('choose');
Lange Beschriftungen und mehrzeilige Optionen
- Lassen Sie Etikettenwickeln; Schneiden Sie niemals entscheidende Wörter ab.
- Halten Sie den Trefferbereich auch bei Textumbrüchen groß: Verwenden Sie Abstand fürEtikett, nicht nur die Eingabe.
.card { Inline-Größe: 100 %; Polsterung: 16px; }
.card .card-title { Schriftgröße: 700; Zeilenhöhe: 1,25; }
.card .card-sub { Schriftgröße: 14px; Zeilenhöhe: 1,4; }
Rechts-nach-links-Unterstützung (RTL)
Verwenden Sie CSSlogische Eigenschaftenund:dir()Sie benötigen also keine separaten Stile.
/* Abstand, der in RTL automatisch umgedreht wird */
.card { padding-inline: 16px; Polsterblock: 16px; }
/* Fokusring, der die Richtung berücksichtigt */
.card:has(input:focus-visible) {
Gliederung: 3px solid var(--ring);
Umriss-Offset: 2px;
}
/* Optional: richtungsspezifische Anpassungen */
:dir(rtl) .card-group { Direction: rtl; }
Barrierefreiheit über ARIA hinaus
- Stellen Sie sicher, dassKontrast ≥ 4,5:1für Beschriftungen und Fokuszustände.
- Berühre Ziele ≥44×44 px(Auffüllung statt Schriftgröße).
- Kommunizieren Sie den Zustand nicht allein durch die Farbe; Verwenden SieRahmen, Symbole oder Text.
Test-Checkliste (druckfreundlich)
- Semantik: Radios sind drinnen
Feldsatzmit einem sichtbarenLegende. - Tastatur: Tab betritt die Gruppe;Pfeilebewegen;Leerzeichenwählt.
- Bildschirmleseprogramme: Legende angekündigt; Bei jeder Option steht „ausgewählt/nicht ausgewählt“.
- Fokus: Sichtbarer Ring amganze Karte(und auf der nativen Eingabe).
- Trefferbereich: Das gesamte Etikett ist anklickbar; Funktioniert auf dem Handy.
- Validierung: Keine Fehler bis zum Absenden/Weiter; Fehler werden bei Änderung deutlich.
- Kopieren: Optionen sind kurz; Hilfstext verdeutlicht Unterschiede.
- Layout: 1 Spalte zu Telefonen; 2–3 auf dem Desktop; Kein Overflow-Clipping.
- i18n: Fehler/Beschriftungen lokalisiert; langer Text wird elegant umbrochen; RTL OK.
- Analytik: Ereignisse zur Impression, Auswählen, Senden.
- Leistung: Keine umfangreichen UI-Bibliotheken; minimales CSS; keine Layoutverschiebung.
Leistung und Wartbarkeit
- Gefallennative Eingaben+ leichtes CSS; Vermeiden Sie es, Radios durch Divs zu ersetzen.
- Halten Sie CSS modular (benutzerdefinierte Eigenschaften für Farben, Radius, Ring).
- Vermeiden Sie
Anzeige:keineauf Eingaben; Verwenden SieDeckkraft:0; Position:absolut; Einschub:0so bleibt die Zugänglichkeit erhalten. - Unkritisches JS zurückstellen; Halten Sie die Erweiterungen nach Möglichkeit unter ca. 2–5 KB.
- Verwenden SieContainerabfragen(sofern verfügbar) anstelle komplexer Medienhaltepunkte für eingebettete Formulare.
@container (min-width: 680px) {
.card-group { Grid-Template-Columns: 1fr 1fr 1fr; }
}
Analytik und Experimente
Verfolgen Sie Absichten und Reibungspunkte:
// Auslösen, wenn die Funkgruppe sichtbar wird
gtag?.('event','form_step_view', { step: 1, form: 'contact' });
// Bei Auswahl auslösen
document.querySelectorAll('input[name="service"]').forEach(r => {
r.addEventListener('change', () => {
gtag?.('event','radio_select', { group: 'service', value: r.value });
});
});
// Bei erfolgreicher Übermittlung auslösen
gtag?.('event','generate_lead', { form: 'contact', service: form.service.value });
A/B-Test:
- Optionsreihenfolge(am häufigsten zuerst ausgewählt)
- CTA-Kopie(„Mein kostenloses Angebot einholen“ vs. „Mein Angebot einholen“)
- HilfstextPräsenz
Anti-Patterns (Tu das nicht)
- Eingaben mit
ausblenden Anzeige:keine(bricht Tastatur und SRs). - Fehlt
Feldsatz/Legende. - Winzige Trefferbereiche (nur der kleine Punkt anklickbar).
- Nur-Farb-Auswahlstatus; unsichtbarer Fokus.
- ValidierungvorDer Benutzer versucht fortzufahren.
- Packen von 10–20 Optionen in Radios; Verwenden Sie stattdessen eine durchsuchbare Auswahl.
Abschließende Checkliste
Feldsatz+Legendevorhanden- Gleiches
Name, einzigartigWerts - Beschriftungen umschließen Eingaben; gesamte Karte anklickbar
- Fokusring deutlich sichtbar
erforderlichim ersten Radio; sanfte Inline-Fehler- 1–3 Spaltenraster, responsive, große Touch-Ziele
- Lokalisierte Zeichenfolgen; RTL-sicher über logische Eigenschaften
- Analysen zum Anzeigen/Auswählen/Senden
- Die serverseitige Validierung spiegelt Clientregeln wider
Ressourcen
Spezifikationen und Erstellungsmuster
- HTML-Standard –
: native Semantik, Gruppierung nachName, Formverhalten. - WAI-ARIA Autorenpraktiken 1.2 – Radio Group: erwartetes Tastaturverhalten (Tab in Gruppe,Pfeilzum Verschieben,Leertastezum Auswählen), Beschriftungsmuster.
- WCAG 2.2Essentials für Radios:
- 2.1.1Tastatur(alles über Tastatur bedienbar)
- 2.4.7Fokus sichtbar(deutlich sichtbarer Fokus)
- 2.5.5Zielgröße(≥44×44px empfohlen)
- 1.4.3Kontrast (Minimum)
Referenzhandbücher
- MDN: Funkeingang,
Etikett,Feldsatz/Legende, Formularvalidierung (Constraint Validation API). - GOV.UK Design System – Radios: ausgezeichnete, kampferprobte Anleitung zu Formulierungen und Fehlern.
- Inklusive Komponenten (Heydon Pickering): praktische a11y-Muster und Kritiken.
Schauen Sie sich unseren aktuellen Blog aufan So suchen Sie nach Möglichkeiten für Gastbeiträge auf Ahrefs (Schritt-für-Schritt-Anleitung)
Prüfung und Werkzeugbau
- ax DevTools(Browsererweiterung) – automatisierte A11Y-Prüfungen.
- Einblicke in die Barrierefreiheit– schnelle geführte Tests.
- Leuchtturm– Leistungs- und Zugänglichkeitssignale.
- WebAIM-Kontrastprüfer– Überprüfen Sie den Farbkontrast.
- Bildschirmleseprogrammeum echtes Verhalten stichprobenartig zu überprüfen:
- NVDA(Windows),Kiefer(Windows),VoiceOver(macOS/iOS),TalkBack(Android).
- Manueller Tastaturdurchlauf: Tab in die Gruppe → Pfeile bewegen → Leertaste wählt → Fokusring bleibt sichtbar.
Schauen Sie sich unserean Rezension von Notions Marketing
FAQs (kurz und praktisch)
Ziel ist2–6. Wenn Sie 7–10 haben, gruppieren Sie sie oder verwenden Sie ein zweispaltiges Raster. Wechseln Sie über ~10 zu einemauswählen (mit Suche)oder neu gestalten, um zunächst die Auswahl einzugrenzen.
Nur wenn es eingibt klarer Mehrheitsausfallund es wird die Daten nicht verfälschen. Eine Vorauswahl beschleunigt den Abschluss, kann jedoch die bewusste Auswahl einschränken. Wenn Sie unsicher sind,don’t preselectnicht vorauswählen .
Radios: Einzelauswahl, Optionen solltensein sichtbarSeite an Seite.
Wählen Sie: Nur eine Wahl, wenn der Platz knapp ist oder es viele Optionen gibt.
Kontrollkästchen:0–vieleWahlmöglichkeiten (die sich nicht gegenseitig ausschließen).
Ja. Behalten Sie dasnative Eingabe fokussierbar(verwenden Sie nichtdisplay:none). Geben Sie die Eingabeein innerhalb des, setzen Sie es aufDeckkraft:0; Position:absolut; Einschub:0;, und gestalten Sie das Etikett. Verwenden Sie:has(input:focus-visible)und:has(input:checked)um Fokus/ausgewählte Zustände zu steuern.
Verwenden Sie zuerst HTML: puterforderlichim ersten Radiound rufeauf form.reportValidity()(oder überlassen Sie die Übermittlung dem Browser). Für eine schönere Benutzeroberfläche zeigen Sie ein kurzesan Inline-Fehlerin der Nähe der Gruppenachder erste Versuch, undklar bei Änderung.
? role="radiogroup"? Nicht für native Radios. Ein richtigesFeldsatz+Legendegibt Screenreadern bereits den richtigen Kontext. Fügen Sie ARIA nur hinzu, wenn Sie einerstellen vollständig individuellWidget (wenn möglich vermeiden).
Follow-ups ein-/ausblendennacheine Auswahl. Wenn ausgeblendet, auchdeaktivierenDiese Steuerelemente sind daher nicht in der Tab-Reihenfolge und werden nicht übermittelt. Verschieben Sie den Fokus beim Aufdecken vernünftig und stellen Sie sicher, dass die Beschriftungen klar bleiben.
Tastaturfluss, sichtbarer Fokus, Screenreader-Ankündigungen (Legende vorgelesen, ausgewählter Status geäußert), mobile Trefferbereiche, Validierungszeitpunkt (kein frühes Nörgeln) und die ausgewählten Wertebestehen bleibenauf serverseitigem Fehler.
