So erstellst du Radio Buttons in HTML
Mit Radio Buttons wählt der Leser genau eine Option aus einer Gruppe. Jede Option ist ein <input type="radio">, und derselbe name macht sie zu einer Gruppe. Wähl eine Größe und drück auf Order:
Das Formular sendet ein Paar, size=m: den name der Gruppe und den value des gewählten Buttons. Die Bestandteile:
- Derselbe
namean jedem Button der Gruppe. Wählst du einen aus, werden die anderen abgewählt. - Ein anderer
valuean jedem. Das bekommt der Server. Ein Radio Button ohnevaluesendeton, was dem Server nichts sagt. checkedan der Standardoption.- Ein
<label>um jeden, damit der Text anklickbar ist, und ein<fieldset>mit<legend>, damit Screenreader die Frage („Size“) zusammen mit jeder Option ansagen.
Der name macht die Gruppe
Radio Buttons mit verschiedenen Namen sind getrennte Gruppen, und jede Gruppe hat ihre eigene Auswahl. Dieses Beispiel hat zwei Gruppen und dazu eine kaputte Reihe, in der jeder Radio Button aus Versehen einen eigenen Namen bekommen hat:
Klick in der kaputten Gruppe alle drei an: Sie bleiben alle ausgewählt, und keiner lässt sich wieder abschalten, das Schlechteste aus beiden Welten. Radio Buttons gruppieren sich über name innerhalb desselben Formulars, zwei Formulare können also jeweils ihre eigene Gruppe name="size" haben.
Pflichtgruppen und keine Standardauswahl
required an einem beliebigen Radio Button der Gruppe bedeutet, dass einer davon ausgewählt sein muss, bevor das Formular abgesendet wird. Ohne checked muss der Leser aktiv wählen, und das ist richtig, wenn es keinen sinnvollen Standard gibt:
Drück ohne Auswahl auf Continue, und der Browser stoppt das Absenden mit einer Meldung. Sobald eine Option gewählt ist, ist die ganze Gruppe gültig. Eine Gruppe ohne Auswahl, die nicht required ist, sendet gar nichts, wie eine nicht angehakte Checkbox.
Ein Klick kann einen Radio Button auswählen, aber nie abwählen. Wenn „keine Antwort“ auch nach einer Auswahl möglich sein muss, füg eine ausdrückliche Option dafür hinzu.
Den gewählten Wert in JavaScript auslesen
form.elements.name gibt die ganze Gruppe zurück, und ihr .value ist der Wert des gewählten Radio Buttons (ein leerer String, wenn keiner gewählt ist). Das Event change feuert an dem Radio Button, der ausgewählt wurde:
Der Listener hängt am Formular und fängt so eine Änderung in jedem seiner Felder ab. Außerhalb eines Formulars findest du den gewählten Radio Button mit document.querySelector('input[name="period"]:checked').
Tastaturverhalten
Eine Radio-Gruppe ist ein einziger Halt in der Tab-Reihenfolge. Tab springt in die Gruppe, auf den gewählten Radio Button (oder, wenn keiner gewählt ist, auf den ersten), und die Pfeiltasten bewegen die Auswahl zwischen den Optionen. Ein weiteres Tab verlässt die Gruppe. Das bekommst du bei echten Radio-Inputs mit gemeinsamem name geschenkt, und es ist noch ein Grund, Radio Buttons nicht aus <div>-Elementen nachzubauen.
Radio Buttons stylen
accent-color färbt den nativen Radio Button um. appearance: none lässt dich deinen eigenen Kreis zeichnen. Und weil ein versteckter Radio Button über sein Label trotzdem ausgewählt werden kann, kann eine Gruppe wie eine Reihe von Karten aussehen und dabei das ganze Radio-Verhalten behalten:
Der eigene Kreis ist im angehakten Zustand einfach ein dicker Rahmen. Die Karten verstecken das Input mit opacity: 0 statt display: none, es bleibt also fokussierbar, und die Pfeiltasten funktionieren weiter. :has(input:checked) stylt die gewählte Karte. :has() funktioniert in aktuellen Versionen von Chrome, Firefox und Safari.
Radio Button, Checkbox oder Select?
| Nimm | Wenn |
|---|---|
| Radio Buttons | Eine Auswahl aus wenigen Optionen (etwa 2 bis 6), die alle sichtbar sein sollen |
| Checkboxen | Beliebig viele Auswahlen, auch keine |
Ein <select> | Eine Auswahl aus einer langen Liste, etwa Länder (siehe HTML Select) |
Häufige Fehler
- Verschiedene
names in einer Gruppe. Jeder Radio Button lässt sich auswählen, und keiner lässt sich wieder abwählen. - Kein
value. Der Server bekommton, egal was gewählt wurde. - Das Input mit
display: noneverstecken in einem eigenen Design. Es lässt sich dann weder fokussieren noch per Tastatur bedienen. - Kein
<fieldset>und keine<legend>. Screenreader sagen „Small, Auswahlschalter“ an, ohne die Frage dazu. - Ein einzelner Radio Button für ein Kästchen „Ich stimme zu“. Er lässt sich nie wieder abwählen; nimm eine Checkbox.
checkedan mehreren Radio Buttons einer Gruppe. Am Ende ist nur der letzte ausgewählt.
Häufig gestellte Fragen
Wie erstelle ich Radio Buttons in HTML?
Schreib ein <input type="radio"> pro Option, gib allen denselben name und jeweils einen anderen value und setz jedes in ein <label>: <label><input type="radio" name="size" value="m"> Medium</label>. Der gemeinsame Name macht sie zu einer Gruppe, in der nur einer ausgewählt sein kann.
Warum kann ich mehr als einen Radio Button auswählen?
Die Buttons haben nicht denselben name. Radio Buttons bilden nur über einen identischen name (im selben Formular) eine Gruppe, und pro Gruppe kann nur ein Button ausgewählt sein.
Wie lese ich den Wert des gewählten Radio Buttons in JavaScript aus?
Mit form.elements.size.value, wobei size der Name der Gruppe ist; das gibt den Wert des gewählten Buttons zurück oder einen leeren String, wenn keiner gewählt ist. Ohne Formular: document.querySelector('input[name="size"]:checked')?.value.
Wie lege ich einen Standard-Radio-Button fest?
Füg einem Button der Gruppe checked hinzu: <input type="radio" name="plan" value="free" checked>. Haben mehrere es, gewinnt der letzte.
Kann man einen Radio Button abwählen?
Nicht per Klick; ein Klick wählt nur aus. Biete eine Option „Keine“ an, setz das Formular zurück oder setz in JavaScript button.checked = false. Wenn die Auswahl optional und entfernbar sein soll, passt eine Checkbox oder ein Select vielleicht besser.