Pagination
Seitennavigation, die jeden Button an seinem Platz hält, zur aktuellen Seite gleitet und über die Auslassungspunkte zu jeder Seite springt.
Showing 1–10 of 248 results
pnpm dlx shadcn@latest add https://hextaui.com/r/pagination.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/pagination.tsx components/ui/button.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Gib Pagination ein count, und es baut die ganze Leiste. Sie zeigt immer gleich viele Slots, sodass Previous, Next und die Zahlen beim Durchklicken nie unter deinem Cursor wandern. Lass count weg, um die Teile selbst zusammenzusetzen.
Zu einer Seite springen
Klicke auf eine Ellipse, um eine Seitenzahl einzugeben. Enter springt, eine Zahl außerhalb des Bereichs lässt das Feld wackeln, und Esc stellt die Ellipse wieder her. Schalte es mit jump={false} ab.
Kompakt
Passt die Leiste nicht in ihren Container, wechselt sie zu Previous, „Page 4 of 24“ und Next und wechselt zurück, sobald Platz ist. Das Label ist auch ein Sprungfeld. Erzwinge eines der Layouts mit compact.
Links
Mit getPageHref ist jede Seite ein echter Link, der sich in einem neuen Tab öffnen lässt. Normale Klicks rufen weiterhin onPageChange auf.
Zusammensetzbar
Ohne count baust du die Leiste wie in shadcn/ui aus den Teilen. Übergib render, um den Link deines Routers zu nutzen.
Rechts nach links
usePagination gibt die Seiten- und Ellipsen-Items für eigene Layouts zurück. Chevrons drehen sich in rechts-nach-links-Text um.
| Taste | Aktion |
|---|---|
| Tab | Bewegt sich in die Leiste hinein und wieder hinaus. Previous und Next bleiben an den Enden fokussierbar. |
| ←→ | Wechselt zwischen Previous, den Seiten und Next. Kehrt sich in rechts-nach-links-Layouts um. |
| HomeEnd | Springt zum ersten oder letzten Eintrag. |
| Enter | Öffnet die fokussierte Seite oder das Seitenfeld. Im Feld springt es zu dieser Seite und fokussiert sie. |
| Esc | Schließt das Seitenfeld und gibt den Fokus an die Ellipse zurück. |
- Das Root ist ein
<nav>mit dem Label „Pagination“, und die aktuelle Seite hataria-current="page". - Auf der ersten und letzten Seite nutzen Previous und Next
aria-disabledstattdisabled, damit der Fokus nicht verloren geht, wenn du das Ende erreichst. - Der gleitende Indikator wird bei reduzierter Bewegung zu einem Fade.
| Prop | Typ | Standard |
|---|---|---|
countGesamtzahl der Seiten. Wenn gesetzt, wird die Leiste für dich gebaut; lass es weg, um die Teile selbst zusammenzusetzen. | number | – |
page | number | – |
defaultPage | number | 1 |
onPageChange | (page: number) => void | – |
getPageHrefRendert Seiten als Links statt als Buttons. | (page: number) => string | – |
siblingsSeiten, die auf jeder Seite der aktuellen angezeigt werden. | number | 1 |
boundariesSeiten, die immer am Anfang und Ende angezeigt werden. | number | 1 |
compactauto wechselt zu Previous, „Page x of y“ und Next, wenn die Leiste nicht passt. | boolean | "auto" | "auto" |
jumpLässt die Ellipse ein Seitenfeld öffnen. | boolean | true |
| Attribut | Beschreibung |
|---|---|
data-slot="pagination" | Die Navigation. |
data-slot="pagination-indicator" | Der Hintergrund, der zur aktuellen Seite gleitet. |
| Prop | Typ | Standard |
|---|---|---|
isActiveMarkiert die aktuelle Seite mit aria-current="page". | boolean | false |
disabledSetzt aria-disabled und ignoriert Klicks. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <a> |
| Attribut | Beschreibung |
|---|---|
data-slot="pagination-link" | Seitenlinks per CSS ansprechen. |
data-active | Vorhanden auf der aktuellen Seite. |
| Prop | Typ | Standard |
|---|---|---|
textÜbergib null für einen Button nur mit Icon. | ReactNode | "Previous" / "Next" |
disabled | boolean | false |
| Prop | Typ | Standard |
|---|---|---|
onJumpMacht die Ellipse zu einem Seitenfeld. Ohne das ist die Ellipse Dekoration. | (page: number) => void | – |
countDie höchste Seite, die das Feld akzeptiert. | number | – |
| Prop | Typ | Standard |
|---|---|---|
page | number | – |
count | number | – |
siblings | number | 1 |
boundaries | number | 1 |
Gibt items, die begrenzte page und count sowie hasPrevious und hasNext zurück. Wie du einen eigenen Pager baust, steht im usePagination-Guide.
- ButtonButtons in allen Varianten und Größen, mit eingebautem Lade-, Erfolgs- und Fehlerablauf, der den Spinner bei schnellen Anfragen überspringt.
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- usePaginationMacht aus einer Seite und einer Seitenzahl die Liste der zu rendernden Seiten und Ellipsen und hält ihre Länge beim Blättern konstant.
- BreadcrumbEine Linkspur zur aktuellen Seite, die sicher umbricht, sich in Right-to-left-Layouts spiegelt und eingeklappte Segmente an Ort und Stelle erweitert.
- Navigation menuSeitennavigation mit Dropdowns oder einem Panel in voller Breite, das offen bleibt, während der Inhalt zwischen Menüs gleitet.
- SidebarEine App-Seitenleiste, die zu Icons oder off-canvas einklappt, unter deinem Header fixiert bleibt und auf Smartphones zu einem wischbaren Sheet wird.