Nach bestem Wissen und Gewissen, basierend auf meiner letzten Zusammenstellung der am meisten gewünschten CSS-Features, war das Styling von Formularsteuerelementen eine große Bitte. Top 5, würde ich sagen. Und von den nativen Formularelementen, die die Leute stylen möchten, hat Greg Whitworth einige Daten, dass das <select>-Element häufiger gewünscht wird als jedes andere Element – mehr als doppelt so oft wie das nächstgelegene Element – und es ist das Element, das Entwickler am häufigsten in irgendeiner Weise anpassen.
Entwickler möchten offensichtlich Select-Dropdowns stylen.
Sie tun tatsächlich ein wenig. Vielleicht mehr, als Sie denken.
Der beste Ansatz dafür stammt von Scott Jehl im Blog der Filament Group. Ich werde eine Kopie hier einbetten, damit sie leicht zu sehen ist.
Siehe den Pen
select-css von Scott/Filament Group von Chris Coyier (@chriscoyier)
auf CodePen.
Bemerkenswert ist, dass dies eine vollständig browserübergreifende Lösung ist. Es ist nichts, das nur auf die fortschrittlichsten Desktop-Browser beschränkt ist. Es gibt einige visuelle Unterschiede zwischen Browsern und Plattformen, aber insgesamt ist es ziemlich konsistent und gibt Ihnen eine Basis, von der aus Sie es weiter anpassen können.
Das ist nur die „Außenseite“
Öffnen Sie das Select. Hm, es sieht aus und verhält sich, als hätten Sie nichts daran geändert.

<select>-Elements hat keine Auswirkung auf das geöffnete Dropdown mit den Optionen. (Screenshot von macOS Chrome)Einige Browser erlauben es, die Innenseite zu stylen, aber es ist sehr begrenzt. Jedes Mal, wenn ich mich damit beschäftigt habe, hatte ich eine schlechte Erfahrung, die Kompatibilität über verschiedene Browser hinweg zu gewährleisten.

Gregs Daten zeigen, dass nur 14 % (dritter Platz) der Entwickler das Styling der Außenseite als den schmerzhaftesten Teil von Select-Elementen empfanden. Ich werde mir seinen Chart stehlen, weil er absolut faszinierend ist.
| Frustration | % | Anzahl |
|---|---|---|
| Nicht in der Lage sein, eine gute Benutzererfahrung für die Suche innerhalb der Liste zu schaffen | 27.43% | 186 |
| Nicht in der Lage sein, das <option>-Element bis zum gewünschten Grad zu stylen | 17.85% | 121 |
| Nicht in der Lage sein, den Standardzustand zu stylen (Dropdown-Pfeil usw.) | 14.01% | 95 |
| Nicht in der Lage sein, das Pop-up-Fenster auf dem Desktop zu stylen (z. B. den Rand, Schatten usw.) | 11.36% | 77 |
| Einfügen von Inhalten über einfachen Text hinaus in die <select>-Steuerung oder deren <option>s | 11.21% | 76 |
| Einfügen von beliebigem HTML-Inhalt in ein <option>-Element | 7.82% | 53 |
| Nicht in der Lage sein, einen unverwechselbaren Stil und ein Verhalten für nicht ausgewählte/Platzhalter zu erstellen | 3.39% | 23 |
| Möglichkeit, neue Optionen aus einem großen Datensatz zu generieren, während das Popup geöffnet ist | 3.10% | 21 |
| Nicht in der Lage sein, die aktuell ausgewählte(n) <option>(en) bis zum gewünschten Grad zu stylen | 1.77% | 12 |
| Nicht in der Lage sein, das Pop-up-Fenster auf Mobilgeräten zu stylen | 1.03% | 7 |
| Möglichkeit, dass sich die Optionen beim Scrollen automatisch wiederholen (d. h. wenn Sie eine Liste von Optionen von 1 bis 100 haben, erscheint 1 unter 100, anstatt dass der Benutzer zum Anfang zurückscrollen muss) | 1.03% | 7 |
Zusammenfassend lässt sich sagen, dass die schmerzhaftesten Teile des Stylings von Select-Elementen sind:
- Suche
- Styling des geöffneten Dropdowns, einschließlich der einzelnen Optionen, einschließlich mehr als nur Text
- Aktualisieren des Elements, ohne es zu schließen
- Styling für Fälle, in denen „nichts“ ausgewählt ist und wenn ein Element ausgewählt ist
Ich bin überrascht, dass Multi-Select nicht dabei war. Vielleicht kommt es für <select> nicht in Frage, da es nicht abwärtskompatibel wäre?
Browser-Entwicklung
Edge hat kürzlich angekündigt, dass sie das Aussehen von Formularsteuerelementen verbessern, aber es gibt noch keine Informationen über Standards oder wie sie angepasst werden können.

Es scheint jedoch eine gute Dynamik zu geben. Wenn Sie mehr Informationen wünschen und diesen Fortschritt verfolgen möchten (ich werde es tun!)
- Hören Sie sich Nicole Sullivan darüber sprechen an (beginnt etwa bei Minute 16).
- Lesen Sie Greg Whitworths „Können wir das
<select>-Steuerelement bitte stylen?!“. Es geht tief in all dies ein.
Was ist mit Lösungen wie select2?
Wenn es kein jQuery erfordern würde, vielleicht. Eine native Lösung wäre vorzuziehen.
Wir haben unsere Anwendung kürzlich von selectBoxIt (das meiner Meinung nach von select2 abgeleitet ist) migriert. Es ist ein ziemlich guter Ersatz, und die Website behauptet, dass er barrierefrei ist, aber Screenreader haben Probleme damit. Es scheint, dass es keine Aria-Rollen gibt, die man anwenden kann, um den Screenreader korrekt unterstützen zu lassen.
Wir haben uns für das Styling des geschlossenen Zustands entschieden (da gibt es viel Flexibilität beim Styling) und lassen das native geöffnete Menü nativ sein.
Mozilla experimentiert/experimentierte mit durchsuchbaren
<select>-Elementen [1]. Das scheint eine nette Idee zu sein, leidet aber derzeit unter einigen Performance-Problemen.1: https://www.ghacks.net/2017/01/21/firefox-53-search-in-large-select-fields/
Scott Jehls
select-Stile haben einen Fehler in Windows Chrome, bei dem ein grauer Rand oben, links und unten auf Monitoren mit Auflösungsskalierung (d. h. den meisten 4K-Monitoren) angezeigt wird.Hier ist ein Screenshot: https://pasteboard.co/IEdxP0W.png
Das eingebettete Hintergrund-SVG ist sehr begrenzt, wenn wir CSS-Variablen für die Website-Thematisierung verwenden wollen. Sicher, bei einem einfachen Dark/Light-Thema wäre es kein großes Problem, zwei separate Hintergrundbilder zu erstellen, aber darüber hinaus wird es unübersichtlich. Wir sind auf ein Glyph angewiesen, das ziemlich schwierig einzufärben ist.
Hm, aber Suchen ist einfach und auf einem Mac enthalten?! Öffnen Sie das Select-Dropdown-Menü und beginnen Sie zu tippen... Die Auswahl springt zum besten Ergebnis.
Das tut es! Ich glaube nicht einmal, dass das unbedingt eine Mac-Sache ist. Aber es filtert die Ergebnisse nicht so, wie man es vielleicht möchte. Oder es stimmt nicht mit unscharfen Abgleichen überein. Oder wer-weiß-was, über das Entwickler gerne Kontrolle hätten.
Glücklicherweise nutzt mein Team React. Wir sind fast zu 100 % zufrieden mit react-select: https://github.com/JedWatson/react-select
Ich empfehle es auszuprobieren, wenn Ihr Projekt React.js verwendet.
Ich möchte nur auf Sarah Higleys Artikel hinweisen:
<select>Ihre WahlBuh! Sie haben den Code zum Stylen von gehoverten Select-Elementen von Firefox nicht gezeigt :(