Button group
Buttons, zu einem Element verbunden, mit gemeinsamen Nähten, Trennern, Text-Addons, Verschachtelung und vertikalen Stapeln.
pnpm dlx shadcn@latest add https://hextaui.com/r/button-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 class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/button-group.tsx components/ui/separator.tsx Passe die Importpfade an dein Projekt-Setup an.
Button group verbindet die Buttons, die du schon benutzt. Installiere auch <Button />.
Größen
Setze size an jedem Button. Verbundene Ecken bleiben bei jeder Größe eckig, und die äußeren Ecken behalten den Radius des Buttons.
Split-Button
Gefüllte Buttons sitzen bündig, füge daher einen <ButtonGroupSeparator /> dazwischen ein. Ein Dropdown-Trigger kann jedes Segment sein.
Trennzeichen
Trennzeichen zwischen Icon-Buttons, mit einem Toggle, der seinen gedrückten Zustand meldet.
Feedback in einer Gruppe
Wenn sich die Breite des Labels eines Buttons beim Laden, bei Erfolg oder Fehler ändert, rutschen die folgenden Segmente mit, statt zu springen.
Vertikal
orientation="vertical" stapelt die Segmente. Trennzeichen werden automatisch horizontal.
Verschachtelte Gruppen
Gruppen in einer Gruppe werden zu eigenen Clustern mit Abstand dazwischen, jeweils für sich verbunden.
Mit Text und Input
<ButtonGroupText /> fügt ein Label oder Präfix hinzu. Rendere es als <label>, um das Input zu benennen. Das Input dehnt sich, um die Zeile zu füllen.
Deaktiviert und ungültig
Deaktiviere oder markiere ein einzelnes Segment mit aria-invalid. Ein ungültiges Segment hebt sich über seine Nachbarn, damit sein roter Ring nie verdeckt wird.
Volle Breite
Gib der Gruppe eine Breite und jedem Button flex-1, um den Platz gleichmäßig aufzuteilen.
Als Fieldset
Nutze render, um in Formularen ein <fieldset> auszugeben.
Rechts nach links
Verbundene Ecken, Trennzeichen und verschachtelte Cluster werden in Rechts-nach-links-Layouts gespiegelt.
| Taste | Aktion |
|---|---|
| Tab | Geht die Segmente der Reihe nach durch. Das fokussierte Segment hebt sich an, damit sein Ring und sein Rand nie verdeckt werden. |
| EnterSpace | Aktiviert den fokussierten Button. |
- Die Gruppe hat
role="group". Gib ihr einaria-label, das die Gruppe beschreibt, etwa „Message actions“. - Segmente nur mit Icon brauchen ein eigenes
aria-label. - Trennzeichen werden als Separatoren mit der richtigen Ausrichtung bereitgestellt. Füge
decorativehinzu, wenn die Linie nur visuell ist.
Jeder Teil rendert ein <div> und akzeptiert dessen Attribute.
| Prop | Typ | Standard |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="button-group" | Gruppen in CSS ansprechen. |
data-orientation | Die aktuelle Orientierung. |
| Prop | Typ | Standard |
|---|---|---|
orientationStandardmäßig das Gegenteil der Ausrichtung der Gruppe. | "horizontal" | "vertical" | – |
decorativeDie Linie vor Screenreadern verbergen. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="button-group-separator" | Trennzeichen in CSS ansprechen. |
data-orientation | Die aufgelöste Ausrichtung. |
| Prop | Typ | Standard |
|---|---|---|
renderRendere ein <label>, um ein Input in der Gruppe zu benennen. | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="button-group-text" | Textsegmente in CSS ansprechen. |
- SeparatorEine Haarlinie, die Inhalte horizontal oder vertikal trennt, mit optionalem Label und einem dekorativen Modus für rein visuelle Linien.
- ButtonButtons in allen Varianten und Größen, mit eingebautem Lade-, Erfolgs- und Fehlerablauf, der den Spinner bei schnellen Anfragen überspringt.
- ToggleEin Button, der an oder aus bleibt, mit einer Füllung, die sich beim Drücken setzt, einem klaren Übergang beim Hover zu „an“ und Icons, die sich mit dem Zustand füllen können.
- Toggle groupEine Reihe von Toggles für eine oder mehrere Auswahlen, mit einer Füllung, die zum gewählten Element gleitet, verbundenen oder abgesetzten Elementen und Pfeiltasten-Fokus.