Toggle
Ein 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.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle.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/toggle.tsx Passe die Importpfade an dein Projekt-Setup an.
Das Hovern eines ausgeschalteten Toggles zeigt eine helle Tönung; das Einschalten setzt eine stärkere Füllung und bringt das Label auf vollen Kontrast, sodass „an“ nie wie Hover aussieht.
Outline
variant="outline" fügt Rahmen und Fläche hinzu, für Toggles, die für sich stehen.
Mit Text
Icons und Labels stehen nebeneinander. Toggles mit sichtbarem Text brauchen kein aria-label.
Gefüllt, wenn an
Füge group-data-pressed/toggle:fill-current zu einem Outline-Icon hinzu, und es füllt sich, wenn der Toggle einschaltet.
Größen
sm, default und lg. Toggles nur mit Icon bleiben quadratisch.
Pill
shape="pill" rundet die Enden vollständig ab, für Toggles in abgerundeten Flächen wie einem Chat-Composer.
Deaktiviert
Ein deaktivierter Toggle zeigt weiterhin, ob er an ist, kann aber nicht gedrückt oder fokussiert werden.
Kontrolliert
Übergib pressed und onPressedChange. Das Label bleibt gleich, während das Icon dem Zustand folgt.
Rechts nach links
Icons führen das Label von rechts an.
| Taste | Aktion |
|---|---|
| SpaceEnter | Schaltet den fokussierten Toggle an oder aus. |
| Tab | Setzt den Fokus auf den nächsten Toggle. |
- Der Toggle ist ein
buttonmitaria-pressed, sodass Screenreader ansagen, ob er an ist. - Gib Toggles nur mit Icon ein
aria-label, das die Aktion benennt („Mikrofon stummschalten“), und behalte es in beiden Zuständen bei. Es zusätzlich zum Pressed-Zustand zu ändern, wirkt wie eine doppelte Verneinung. - Auf Touchscreens wächst die Trefferfläche auf mindestens 44px, außer in einer Toggle group, wo sich Nachbarn überlappen würden.
- Bei reduzierter Bewegung skaliert nichts; die Füllung blendet nur ein.
| Prop | Typ | Standard |
|---|---|---|
variant | "default" | "outline" | "default" |
size | "default" | "sm" | "lg" | "default" |
shape | "default" | "pill" | "default" |
pressed | boolean | – |
defaultPressed | boolean | false |
onPressedChange | (pressed, details) => void | – |
disabled | boolean | false |
valueIdentifiziert den Toggle in einer Toggle group. | string | – |
className | string | (state) => string | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Beschreibung |
|---|---|
data-slot="toggle" | Der Button, mit data-variant und data-size. |
data-pressed | Vorhanden, wenn der Toggle an ist. |
data-disabled | Vorhanden, wenn der Toggle deaktiviert ist. |
- ButtonButtons in allen Varianten und Größen, mit eingebautem Lade-, Erfolgs- und Fehlerablauf, der den Spinner bei schnellen Anfragen überspringt.
- Button groupButtons, zu einem Element verbunden, mit gemeinsamen Nähten, Trennern, Text-Addons, Verschachtelung und vertikalen Stapeln.
- 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.
In Blocks verwendet
Blocks, die auf Toggle aufbauen.
- ArtifactDas Panel neben einem KI-Chat, das zeigt, was das Modell erzeugt hat. Webseiten, SVGs, Dokumente und Code streamen live ein und wechseln dann zu einer Sandbox-Vorschau, mit Versionen zum Vergleichen und Wiederherstellen, einem anpassbaren Split und einem Bottom Sheet auf Smartphones.
- Code BlockCodeblöcke für KI-Antworten. Syntaxhervorhebung, die mit dem Streaming Schritt hält, Kopieren, Herunterladen und Umbrechen, Zeilennummern und hervorgehobene Zeilen, Diffs mit Annehmen und Ablehnen sowie ein Terminal für Befehle.