<input type="radio">

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

<input>-Elemente vom Typ radio werden in der Regel in Radiogruppen verwendet – Sammlungen von Optionsfeldern, die eine Reihe verwandter Optionen beschreiben.

In einer bestimmten Gruppe kann immer nur ein Optionsfeld ausgewählt werden. Radiobuttons werden typischerweise als kleine Kreise dargestellt, die gefüllt oder hervorgehoben werden, wenn sie ausgewählt sind.

Probieren Sie es aus

<fieldset>
  <legend>Select a maintenance drone:</legend>

  <div>
    <input type="radio" id="huey" name="drone" value="huey" checked />
    <label for="huey">Huey</label>
  </div>

  <div>
    <input type="radio" id="dewey" name="drone" value="dewey" />
    <label for="dewey">Dewey</label>
  </div>

  <div>
    <input type="radio" id="louie" name="drone" value="louie" />
    <label for="louie">Louie</label>
  </div>
</fieldset>
p,
label {
  font:
    1rem "Fira Sans",
    sans-serif;
}

input {
  margin: 0.4rem;
}

Sie werden als Radiobuttons bezeichnet, weil sie aussehen und funktionieren wie die Drucktasten an altmodischen Radios, wie das unten gezeigte.

So sahen Radiobuttons früher aus.

Hinweis: Checkboxes ähneln Radiobuttons, haben jedoch einen wichtigen Unterschied: Radiobuttons sind dafür ausgelegt, einen Wert aus einem Set auszuwählen, während Checkboxes es ermöglichen, einzelne Werte an- und auszuschalten. Wenn mehrere Steuerungen vorhanden sind, kann bei Radiobuttons eine ausgewählt werden, während bei Checkboxes mehrere Werte ausgewählt werden können.

Wert

Das value-Attribut ist ein String, der den Wert des Radiobuttons enthält. Der Wert wird dem Benutzer nie von seinem User-Agent angezeigt. Stattdessen wird er verwendet, um zu identifizieren, welcher Radiobutton in einer Gruppe ausgewählt ist.

Definieren einer Radiogruppe

Eine Radiogruppe wird dadurch definiert, dass jedem Radiobutton in der Gruppe dasselbe name zugewiesen wird. Sobald eine Radiogruppe erstellt ist, wird durch die Auswahl eines Radiobuttons in dieser Gruppe automatisch jeder andere derzeit ausgewählte Radiobutton in derselben Gruppe abgewählt.

Sie können so viele Radiogruppen auf einer Seite haben, wie Sie möchten, solange jede einen eindeutigen name hat.

Beispielsweise, wenn Ihr Formular den Benutzer nach seiner bevorzugten Kontaktmethode fragt, könnten Sie drei Radiobuttons erstellen, jeder mit der name-Eigenschaft auf contact gesetzt, aber einer mit dem Wert email, einer mit dem Wert phone und einer mit dem Wert mail. Der Benutzer sieht den value oder den name nie (es sei denn, Sie fügen ausdrücklich Code hinzu, um ihn anzuzeigen).

Der resultierende HTML-Code sieht folgendermaßen aus:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input type="radio" id="contactChoice1" name="contact" value="email" />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

Hier sehen Sie die drei Radiobuttons, jeder mit name auf contact gesetzt und jeder mit einem eindeutigen value, der diesen einzelnen Radiobutton innerhalb der Gruppe eindeutig identifiziert. Sie haben auch jeweils eine einzigartige id, die vom <label>-Element vom for-Attribut verwendet wird, um die Labels mit den Radiobuttons zu verknüpfen.

Sie können dieses Beispiel hier ausprobieren:

Datenrepräsentation einer Radiogruppe

Wenn das obige Formular mit einem ausgewählten Radiobutton übermittelt wird, enthält die Formular-Daten einen Eintrag im Format contact=value. Zum Beispiel, wenn der Benutzer auf den "Phone"-Radiobutton klickt und dann das Formular absendet, würde die Formulardaten den Eintrag contact=phone beinhalten.

Wenn Sie das value-Attribut im HTML weglassen, wird im übermittelten Formulardaten der Wert on der Gruppe zugewiesen. In diesem Fall, wenn der Benutzer die Option "Phone" klickt und das Formular absendet, würden die resultierenden Formulardaten contact=on sein, was nicht hilfreich ist. Vergessen Sie daher nicht, Ihre value-Attribute einzustellen!

Hinweis: Wenn kein Radiobutton ausgewählt ist, wenn das Formular abgesendet wird, wird die Radiogruppe überhaupt nicht in den übermittelten Formulardaten enthalten, da es keinen Wert gibt, der gemeldet werden könnte.

Es ist ziemlich ungewöhnlich, dass tatsächlich gewünscht wird, dass das Formular ohne eines der Radiobuttons in einer Gruppe absenden wird, daher ist es normalerweise klug, einen als Standard auf den checked-Zustand zu setzen. Siehe Auswählen eines Radiobuttons standardmäßig unten.

Fügen wir ein wenig Code zu unserem Beispiel hinzu, damit wir die vom Formular generierten Daten untersuchen können. Das HTML wird überarbeitet, um einen <pre>-Block hinzuzufügen, um die Formulardaten auszugeben:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input type="radio" id="contactChoice1" name="contact" value="email" />
      <label for="contactChoice1">Email</label>
      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>
      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>
<pre id="log"></pre>

Dann fügen wir etwas JavaScript hinzu, um einen Event Listener auf das submit-Ereignis einzurichten, das ausgelöst wird, wenn der Benutzer auf die "Submit"-Taste klickt:

js
const form = document.querySelector("form");
const log = document.querySelector("#log");

form.addEventListener(
  "submit",
  (event) => {
    const data = new FormData(form);
    let output = "";
    for (const entry of data) {
      output = `${output}${entry[0]}=${entry[1]}\r`;
    }
    log.innerText = output;
    event.preventDefault();
  },
  false,
);

Probieren Sie dieses Beispiel aus und sehen Sie, wie es nie mehr als ein Ergebnis für die contact-Gruppe gibt.

Zusätzliche Attribute

Zusätzlich zu den gemeinsamen Attributen, die alle <input>-Elemente teilen, unterstützen radio-Eingaben die folgenden Attribute.

checked

Ein boolesches Attribut, das, wenn vorhanden, anzeigt, dass dieser Radiobutton standardmäßig in der Gruppe ausgewählt ist.

Im Gegensatz zu anderen Browsern behält Firefox standardmäßig den dynamischen überprüften Zustand eines <input> über Seitenladevorgänge hinweg bei. Verwenden Sie das autocomplete-Attribut, um diese Funktion zu steuern.

value

Das value-Attribut ist eines, das alle <input>s teilen; es dient jedoch einem speziellen Zweck für Eingaben vom Typ radio: wenn ein Formular übermittelt wird, werden nur die derzeit ausgewählten Radiobuttons an den Server übermittelt, und der gemeldete Wert ist der Wert des value-Attributs. Wenn der value nicht anders angegeben ist, ist er standardmäßig die Zeichenfolge on. Dies wird im Abschnitt Wert oben erläutert.

required

Das required-Attribut ist eines, das die meisten <input>s teilen. Wenn irgendein Radiobutton in einer gleichnamigen Gruppe von Radiobuttons das required-Attribut hat, muss ein Radiobutton in dieser Gruppe ausgewählt werden, obwohl es nicht derjenige mit dem angewendeten Attribut sein muss.

Verwendung von Radio-Inputs

Wir haben die Grundlagen von Radiobuttons bereits oben behandelt. Lassen Sie uns nun die anderen häufigen Funktionen und Techniken im Zusammenhang mit Radiobuttons untersuchen, die Sie möglicherweise kennen müssen.

Auswählen eines Radiobuttons standardmäßig

Um einen Radiobutton standardmäßig auszuwählen, fügen Sie das checked-Attribut hinzu, wie in dieser überarbeiteten Version des vorherigen Beispiels gezeigt:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input
        type="radio"
        id="contactChoice1"
        name="contact"
        value="email"
        checked />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

In diesem Fall ist der erste Radiobutton jetzt standardmäßig ausgewählt.

Hinweis: Wenn Sie das checked-Attribut auf mehr als einem Radiobutton setzen, überschreiben spätere Instanzen frühere; das heißt, der zuletzt als checked markierte Radiobutton wird ausgewählt. Dies liegt daran, dass in einer Gruppe immer nur ein Radiobutton gleichzeitig ausgewählt werden kann, und der User-Agent automatisch andere abwählt, sobald ein neuer als checked markiert wird.

Bereitstellen eines größeren Klickbereichs für Ihre Radiobuttons

In den obigen Beispielen haben Sie vielleicht bemerkt, dass Sie einen Radiobutton durch Klicken auf das zugehörige <label>-Element auswählen können, ebenso wie auf den Radiobutton selbst. Dies ist eine wirklich nützliche Funktion von HTML-Formular-Labels, die es Benutzern erleichtert, die gewünschte Option anzuklicken, insbesondere auf Geräten mit kleinem Bildschirm wie Smartphones.

Neben der Barrierefreiheit ist dies ein weiterer guter Grund, <label>-Elemente in Ihren Formularen ordnungsgemäß einzurichten.

Validierung

Im Fall eines Radiobuttons mit gesetztem required-Attribut, oder einer gleichnamigen Gruppe von Radiobuttons, in der mindestens ein Mitglied required gesetzt hat, muss ein Radiobutton ausgewählt werden, damit die Steuerung als gültig betrachtet werden kann. Wenn kein Radiobutton ausgewählt ist, gibt die valueMissing-Eigenschaft eines ValidityState-Objekts true während der Validierung zurück, und der Browser wird den Benutzer auffordern, eine Option auszuwählen.

Styling von Radio-Inputs

Das folgende Beispiel zeigt eine etwas umfassendere Version des Beispiels, das wir im gesamten Artikel gesehen haben, mit etwas zusätzlichem Styling und besseren Semantiken durch die Verwendung spezialisierter Elemente. Das HTML sieht folgendermaßen aus:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input
        type="radio"
        id="contactChoice1"
        name="contact"
        value="email"
        checked />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

Das damit verbundene CSS in diesem Beispiel ist etwas umfangreicher:

css
html {
  font-family: sans-serif;
}

div:first-of-type {
  display: flex;
  align-items: flex-start;
  margin-bottom: 5px;
}

label {
  margin-right: 15px;
  line-height: 32px;
}

input {
  appearance: none;

  border-radius: 50%;
  width: 16px;
  height: 16px;

  border: 2px solid #999;
  transition: 0.2s all linear;
  margin-right: 5px;

  position: relative;
  top: 4px;
}

input:checked {
  border: 6px solid black;
}

button,
legend {
  color: white;
  background-color: black;
  padding: 5px 10px;
  border-radius: 0;
  border: 0;
  font-size: 14px;
}

button:hover,
button:focus {
  color: #999;
}

button:active {
  background-color: white;
  color: black;
  outline: 1px solid black;
}

Am bemerkenswertesten hier ist die Verwendung der appearance-Eigenschaft (mit Präfixen zur Unterstützung einiger Browser). Standardmäßig werden Radiobuttons (und Checkboxes) mit den nativen Betriebssystem-Stilen für diese Steuerungen gestylt. Durch die Angabe von appearance: none können Sie das native Styling vollständig entfernen und eigene Styles dafür erstellen. Hier haben wir eine border zusammen mit border-radius und einer transition verwendet, um eine schöne animierte Auswahl von Radiobuttons zu erstellen. Beachten Sie auch, wie die :checked-Pseudo-Klasse verwendet wird, um die Styles für das Aussehen des Radiobuttons im ausgewählten Zustand anzugeben.

Hinweis: Wenn Sie die appearance-Eigenschaft verwenden möchten, sollten Sie sie sehr sorgfältig testen. Obwohl es in den meisten modernen Browsern unterstützt wird, variiert die Implementierung stark. In älteren Browsern hat selbst das Schlüsselwort none nicht die gleiche Wirkung in verschiedenen Browsern, und einige unterstützen es überhaupt nicht. Die Unterschiede sind in den neuesten Browsern kleiner.

Beachten Sie, dass beim Klicken auf einen Radiobutton ein schöner, sanfter Überblenden-Effekt sichtbar ist, wenn sich die beiden Button-Zustände ändern. Darüber hinaus sind der Stil und die Farbgestaltung der Legende und der "Absenden"-Schaltfläche individuell angepasst, um einen starken Kontrast zu erreichen. Dies ist möglicherweise nicht der Look, den Sie in einer echten Web-Anwendung wünschen, aber es zeigt definitiv die Möglichkeiten auf.

Technische Zusammenfassung

Wert Ein String, der den Wert des Radiobuttons repräsentiert.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte gemeinsame Attribute checked, value und required
IDL-Attribute checked und value
DOM-Schnittstelle

[`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement)

Methoden [`select()`](/de/docs/Web/API/HTMLInputElement/select)
Implizierte ARIA-Rolle radio

Spezifikationen

Specification
HTML
# radio-button-state-(type=radio)

Browser-Kompatibilität

Siehe auch