Radio group
Wähle eine Option aus einer Menge, mit einem Punkt, der zwischen den Optionen übergeben wird, und Karten, deren Auswahlring zur neuen Wahl gleitet.
pnpm dlx shadcn@latest add https://hextaui.com/r/radio-group.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 cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/radio-group.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Ändert sich die Auswahl, schrumpft der alte Punkt weg, während der neue hereinfedert, sodass das Auge der Wahl folgt, statt dass zwei Dinge gleichzeitig blinken. Umschließe jedes Item mit einem <label>, damit die ganze Zeile klickbar ist.
Karten
Mit variant="card" nutze RadioGroupCard für Optionen mit mehr zu sagen. Der Auswahlring gleitet zur neuen Karte, während ihre Fläche einblendet.
Horizontal
Karten können in einer Zeile oder einem beliebigen Raster stehen. Der Ring folgt ihnen, wo immer sie sind.
Form
In Field und FieldSet erhält die Gruppe eine Legende, Pflichtvalidierung und eine Fehlermeldung.
Deaktiviert und schreibgeschützt
Deaktiviere eine einzelne Option oder setze die ganze Gruppe auf readOnly, um einen unveränderlichen Wert zu zeigen.
Kontrolliert
Übergib value und onValueChange. Änderungen von außen werden genauso animiert wie Klicks.
Rechts nach links
Radios und Karten folgen der Leserichtung.
| Taste | Aktion |
|---|---|
| Tab | Setzt den Fokus in die Gruppe, auf die gewählte oder die erste Option. |
| ↑↓←→ | Wechselt zur vorherigen oder nächsten Option und wählt sie, an den Enden umlaufend. |
| Space | Wählt die fokussierte Option. |
- Benenne die Gruppe mit
aria-label,aria-labelledbyoder einerFieldLegend. - Jedes Radio hat eine 36px große Trefferfläche, auf Touchscreens 44px, bleibt aber auf dem Bildschirm 16px groß.
- Punkt und Kartenring bewegen sich bei reduzierter Bewegung nicht.
| Prop | Typ | Standard |
|---|---|---|
variantcard fügt den gleitenden Auswahlring hinzu. | "default" | "card" | "default" |
value | Value | – |
defaultValue | Value | – |
onValueChange | (value, details) => void | – |
name | string | – |
required | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="radio-group" | Die Gruppe, mit data-variant. |
data-slot="radio-group-highlight" | Der Ring, der zwischen Karten gleitet. |
data-disabled | Die Gruppe ist deaktiviert. |
| Prop | Typ | Standard |
|---|---|---|
value | Value | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Beschreibung |
|---|---|
data-slot="radio-group-item" | Das Radio. |
data-checked / data-unchecked | Ob es die gewählte Option ist. |
data-disabled / data-readonly | Vorhanden, wenn es nicht geändert werden kann. |
| Prop | Typ | Standard |
|---|---|---|
value | Value | – |
disabled | boolean | false |
radioClassNameKlassen für das Radio in der Karte. | string | – |
Ein <label> mit eingebautem Radio. Setze RadioGroupCardTitle und RadioGroupCardDescription oder beliebigen anderen Inhalt hinein.
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- 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.
- Date pickerEin Button, der einen Kalender in einem Popover öffnet, auf Smartphones als Bottom Sheet, für einzelne Daten und Zeiträume.
- FieldLabels, Beschreibungen und Fehler, mit ihrem Steuerelement verbunden, mit Validierungszuständen und Layouts für Formulare.