Menu

HTML Radio Button: Gruppen, Standardauswahl und Styling

So funktionieren Radio Buttons in HTML: Gruppieren mit dem Attribut name, eine Standardauswahl mit checked, Pflichtgruppen, den gewählten Wert in JavaScript auslesen, Tastaturverhalten und Styling als eigene Kreise oder Karten.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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 name an jedem Button der Gruppe. Wählst du einen aus, werden die anderen abgewählt.
  • Ein anderer value an jedem. Das bekommt der Server. Ein Radio Button ohne value sendet on, was dem Server nichts sagt.
  • checked an 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?

NimmWenn
Radio ButtonsEine Auswahl aus wenigen Optionen (etwa 2 bis 6), die alle sichtbar sein sollen
CheckboxenBeliebig 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 bekommt on, egal was gewählt wurde.
  • Das Input mit display: none verstecken 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.
  • checked an 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.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S