Skip to main content Home About the Design SystemRoadmap OverviewDesignersDevelopers OverviewColorGridIconographyInteractionsSpacingTypography Overview Global colorBox shadowTypographyBorderOpacitySpaceLengthIconBreakpointsMedia queries All elements Accordion Alert Announcement Audio player Avatar Back to top Badge Blockquote Breadcrumb Button group Button Card Chip Code block Call to action Dialog Disclosure Footer Health index Icon Jump links Menu dropdown Navigation link Navigation (primary) Navigation (secondary) Navigation (vertical) Pagination PopoverPlanned Progress stepper Readtime Scheme toggle Select Site status Skeleton Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed OverviewColor PalettesCustomizingDevelopers All PatternsAccordionAlertCall to ActionCardFilterFormLink with iconLogo wallSearch barSticky bannerSticky cardTabsTagTile All Personalization PatternsAnnouncement FundamentalsAccessibility toolsAssistive technologiesCI/CDContentContributorsDesignDevelopmentManual testingResourcesScreen readers Design/code status Release notes Get support

Pagination

OverviewStyleGuidelinesCodeAccessibilityDemos
OverviewStatusWhen to useStatus checklistOverviewStatusWhen to useStatus checklist

Overview

Pagination allows users to navigate between pages of related content. Use it when content is too long for a single view. Authors must provide a single <ol> with <li><a> page links where the active page should have aria-current="page". Tab navigates between controls; Enter activates. Supports box and open variants, default and small sizes.

import '@rhds/elements/rh-pagination/rh-pagination.js';
<rh-pagination>
  <ol>
    <li><a href="./">1</a></li>
    <li><a href="?page=2">2</a></li>
    <li><a href="?page=3">3</a></li>
    <li><a href="?page=4">4</a></li>
    <li><a href="?page=5">5</a></li>
  </ol>
</rh-pagination>

<link rel="stylesheet" href="../rh-pagination-lightdom.css">
import { Pagination } from "@rhds/elements/react/rh-pagination/rh-pagination.js";

// NOTE: React 19+ does not require these wrapper imports.
// You can use the custom elements directly as-is.

export const Demo = () => (
  <Pagination>
    <ol>
      <li><a href="./">1</a></li>
      <li><a href="?page=2">2</a></li>
      <li><a href="?page=3">3</a></li>
      <li><a href="?page=4">4</a></li>
      <li><a href="?page=5">5</a></li>
    </ol>
  </Pagination>
  <link rel="stylesheet" href="../rh-pagination-lightdom.css" />
);

Controls which end(s) of the page list are truncated with ellipsis. Accepts 'start' | 'end' | 'both' | null. Computed automatically from page count and current index. Reflected to the host attribute so light-DOM CSS can hide overflow <li> elements. Defaults to null.

Accessible label for the <nav> landmark. Should be unique when multiple paginations exist on a page. Defaults to 'Page navigation'.

Accessible label for the first-page stepper button. Used by screen readers. Defaults to 'first page'.

Accessible label for the previous-page stepper button. Used by screen readers. Defaults to 'previous page'.

Accessible label for the next-page stepper button. Used by screen readers. Defaults to 'next page'.

Accessible label for the last-page stepper button. Used by screen readers. Defaults to 'last page'.

Controls pagination size. Accepts 'sm' for smaller touch targets (WCAG AA) or null for default (WCAG AAA). Defaults to null.

Visual variant. Accepts 'borderless' for transparent backgrounds with bottom borders, or null for the default box variant. Defaults to null.

View source on GitHub

Status

When to use

  • When you need to divide large quantities of data or content into chunks
  • When you need to enable users to navigate to through pages or locate a specific page number
  • When you need to improve the loading performance of a system

Status checklist

© 2026 Red Hat Deploys by Netlify