Menu

HTML Select: Dropdown mit option, optgroup und multiple

So erstellst du eine Dropdown-Liste in HTML mit <select> und <option>: Werte, eine Standard- oder Platzhalter-Option, required, Optionsgruppen, Mehrfachauswahl, den Wert in JavaScript lesen und setzen und den Pfeil stylen.

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

So erstellst du ein Dropdown in HTML

Eine Dropdown-Liste ist ein <select>-Element mit einem <option> für jede Auswahl. Der value jeder Option ist das, was das Formular sendet; der Text zwischen den Tags ist das, was der Leser sieht. Wähl eine aus und drück auf Submit:

Das Formular sendet language=js: den name des Select und den value der gewählten Option. selected legt den Standard fest; ohne ist die erste Option gewählt. Hat eine Option keinen value, wird stattdessen ihr Text gesendet.

Verbinde das Label über for und id mit dem Select (oder indem du es drumherum legst), damit ein Klick auf das Label das Dropdown fokussiert und Screenreader es ansagen.

Attribute von select und option

ElementAttributMacht
<select>nameDer Schlüssel, unter dem der Wert gesendet wird
<select>requiredEine echte Option muss gewählt sein, keine leere erste Platzhalter-Option
<select>multipleMehrere Optionen können gewählt werden
<select>sizeWie viele Zeilen sichtbar sind (macht daraus ein Listenfeld)
<select>disabledDas ganze Dropdown ist aus und wird nicht gesendet
<option>valueWas gesendet wird, wenn sie gewählt ist
<option>selectedGewählt, wenn die Seite lädt
<option>disabledWird angezeigt, kann aber nicht gewählt werden
<optgroup>labelDie Überschrift der Gruppe

Eine Platzhalter-Option mit required

Ein Select hat immer einen Wert, ohne Platzhalter wird also die erste echte Option gesendet, auch wenn der Leser das Dropdown nie angefasst hat. Eine leere erste Option behebt das, und required stoppt das Absenden, bis eine echte Option gewählt ist:

Drück auf Continue, bevor du etwas wählst: Der Browser verweigert und bittet dich, einen Eintrag auszuwählen. Der Platzhalter hat value="", was required als leer behandelt, und disabled, damit er nicht wieder gewählt werden kann, sobald ein Land ausgewählt ist.

Optionen mit optgroup gruppieren

<optgroup label="..."> setzt eine Überschrift über eine Reihe von Optionen. Die Überschrift ist nicht auswählbar:

Gruppen lassen sich nicht verschachteln: Eine Liste bekommt eine Ebene von Überschriften, mehr nicht. disabled an einer <optgroup> deaktiviert jede Option darin.

Mehrfachauswahl

Mit multiple kann der Leser mehrere Optionen wählen, und aus dem Dropdown wird ein Listenfeld. Halte Strg (Cmd auf dem Mac) gedrückt, um Optionen einzeln hinzuzufügen, oder Shift, um einen Bereich auszuwählen:

Das Formular sendet skills=html und skills=css: denselben Namen einmal pro gewählter Option. Viele kennen die Geste Strg+Klick nicht, bei einer Handvoll Optionen ist eine Gruppe von Checkboxen also leichter zu bedienen.

Den Wert in JavaScript lesen und setzen

select.value liest und setzt den Wert der gewählten Option, und das Event change feuert, wenn der Leser eine andere Option wählt. Ein häufiger Einsatz ist ein zweites Dropdown, dessen Optionen vom ersten abhängen:

new Option(text, value) erzeugt eine Option. select.selectedIndex ist die Position der gewählten Option, und select.selectedOptions listet die gewählten auf; so liest du ein Mehrfach-Select aus.

Ein Select stylen

Die geöffnete Liste des Dropdowns zeichnen Browser und Betriebssystem, und nur wenig davon lässt sich stylen. Den geschlossenen Kasten schon: appearance: none entfernt den nativen Pfeil, und ein Hintergrundbild setzt deinen eigenen an seine Stelle:

Der zusätzliche Innenabstand am Ende lässt Platz für den Pfeil, damit langer Optionstext nicht darunter läuft. font: inherit ist hier so wichtig wie bei Buttons: Selects verwenden standardmäßig die kleine Formularschrift des Browsers. Die Optionen in der geöffneten Liste behalten das native Aussehen. Chrome kann auch die geöffnete Liste stylen, wenn du dich mit appearance: base-select dafür entscheidest; Browser ohne diese Unterstützung zeigen die native Liste. Volle Kontrolle überall braucht ein eigenes Widget mit ARIA, und das richtig hinzubekommen ist viel mehr Arbeit, als es aussieht.

Select, Radio Buttons oder datalist?

NimmWenn
<select>Eine Auswahl aus einer langen Liste, oder wenn wenig Platz ist
Radio ButtonsEine Auswahl aus wenigen Optionen, die alle sichtbar sein sollen (siehe HTML Radio Button)
<input> mit <datalist>Vorschläge, aber jeder getippte Wert ist erlaubt

Häufige Fehler

  • Kein Platzhalter bei einer Pflichtauswahl. Die erste echte Option wird gesendet, auch wenn der Leser sie nie gewählt hat.
  • Ein Platzhalter mit echtem Wert, etwa value="none". required behandelt ihn als gültige Auswahl. Nimm value="".
  • Optionen ohne value, wenn der Text lang oder übersetzt ist. Der Server bekommt den sichtbaren Text, der sich mit der Sprache ändert.
  • multiple bei wenigen Optionen. Checkboxen sind leichter zu bedienen.
  • Auf click an Optionen hören. Nimm change am <select>; es feuert auch bei Änderungen per Tastatur.
  • Kein Label. Ein Select, das nur einen Platzhalter hat, hat keinen Namen mehr, sobald eine Option gewählt ist.

Häufig gestellte Fragen

Wie erstelle ich eine Dropdown-Liste in HTML?

Mit <select> und einem <option> pro Auswahl: <select name="color"><option value="red">Red</option><option value="blue">Blue</option></select>. Gib dem Select einen name und ein <label>.

Wie lege ich die Standardoption eines Select fest?

Füg dieser Option selected hinzu: <option value="blue" selected>Blue</option>. Ohne ist die erste Option ausgewählt. In JavaScript setzt du select.value = 'blue'.

Wie füge ich einem Select einen Platzhalter hinzu?

Mach die erste Option leer und nicht auswählbar: <option value="" disabled selected>Choose a country</option>. Füg dem <select> required hinzu, damit das Formular erst abgesendet werden kann, wenn eine echte Option gewählt ist.

Wie lese ich den gewählten Wert eines Select in JavaScript aus?

select.value ist der Wert der gewählten Option. Für ihren sichtbaren Text nimm select.selectedOptions[0].text, und hör auf das Event change, um auf eine geänderte Auswahl zu reagieren. Bei einem Mehrfach-Select gehst du mit map über select.selectedOptions.

Was ist der Unterschied zwischen select und datalist?

Ein <select> erlaubt nur die aufgelisteten Optionen. Ein <input> mit <datalist> schlägt Optionen vor, während der Leser tippt, akzeptiert aber jeden Text. Nimm select, wenn die Antwort eine deiner Optionen sein muss.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S