Native select
Das native Select des Browsers, passend zu Input gestylt, mit dezentem Platzhalter, Field-Unterstützung und dem Picker des Betriebssystems auf jedem Gerät.
pnpm dlx shadcn@latest add https://hextaui.com/r/native-select.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/native-select.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Eine Option mit leerem value dient als Platzhalter: Sie erscheint in gedämpftem Text, bis etwas gewählt wird. Setze className am Select, um seinen Wrapper zu dimensionieren, zum Beispiel w-full.
Gruppen
<NativeSelectOptGroup /> ordnet Optionen im Picker des Betriebssystems unter Überschriften.
Größen
Größen, Rahmen, Fokusringe und Invalid-Styles entsprechen genau Input, sodass beide in einer Zeile fluchten.
Field
In einem <Field /> verbinden sich Label und Beschreibung von selbst, und Fehler erscheinen, sobald sich der Wert ändert. Sende ohne Tarif ab, und das Select wird rot, wackelt einmal, und der Browser springt dorthin.
Ungültig
Setze aria-invalid und verknüpfe die Meldung mit aria-describedby.
Deaktiviert
Deaktiviere das ganze Select oder einzelne nicht verfügbare Optionen.
Kontrolliert
Übergib value und onChange wie bei einem normalen Select.
Langer Inhalt
Lange ausgewählte Labels enden mit einer Ellipse, statt unter dem Chevron zu verlaufen.
Rechts nach links
Chevron und Padding wechseln auf die andere Seite.
- Nutze Native select für einfache Listen, besonders auf Smartphones, wo der Picker des Betriebssystems der schnellste und vertrauteste Weg zur Auswahl ist.
- Nutze Combobox, wenn Leute suchen müssen oder Optionen Icons, Beschreibungen oder eigene Layouts brauchen.
| Taste | Aktion |
|---|---|
| Tab | Fokussiert das Select. |
| SpaceEnter | Öffnet den Picker des Betriebssystems. |
| ↑↓ | Ändert die Auswahl oder bewegt sich im geöffneten Picker. |
| A–Z | Springt zur Option, die mit dem getippten Text beginnt. |
<NativeSelect /> akzeptiert alle select-Attribute. Die Option-Teile akzeptieren die Attribute ihres Elements.
| Prop | Typ | Standard |
|---|---|---|
size | "sm" | "default" | "lg" | "default" |
htmlSizeDas native size-Attribut, umbenannt, weil size die Variante ist. | number | – |
shakeWackelt einmal, wenn ein Formular-Submit es als ungültig findet. | boolean | true |
classNameWird auf den Wrapper angewendet und dimensioniert so das ganze Steuerelement. | string | – |
value | string | – |
defaultValue | string | – |
disabled | boolean | false |
required | boolean | false |
| Attribut | Beschreibung |
|---|---|
data-slot="native-select-wrapper" | Der Wrapper, mit data-size. |
data-slot="native-select" | Das select-Element. |
data-slot="native-select-icon" | Das Chevron. Wird bei Hover und Fokus dunkler. |
data-invalid | Vorhanden, wenn ein umgebendes Field ungültig ist. |
| Attribut | Beschreibung |
|---|---|
data-slot="native-select-option" | Eine Option. |
data-slot="native-select-optgroup" | Eine beschriftete Gruppe von Optionen. |
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.
- useComposedRefBehält eine Ref auf dein eigenes Element und leitet sie trotzdem an die Ref weiter, die der Parent übergeben hat.
- useInvalidShakeLässt ein Formularelement wackeln, wenn ein Absendeversuch es als ungültig findet, und nie, während noch getippt wird.
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
- ComboboxEin filterbares Select mit Chips, Gruppen und asynchronen Ergebnissen, in einem Popup, das sich beim Tippen anpasst.
In Blocks verwendet
Blocks, die auf Native select aufbauen.