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 Site status Skeleton Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed OverviewColor PalettesCustomizingDevelopers All PatternsAccordionCall 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

Provides page navigation for content using stepper buttons, numbered links, and a page-input field. Authors MUST provide an <ol> with <li><a> page links. SHOULD use aria-current="page" on the active link. Screen readers announce the <nav> landmark via label. Tab moves focus through steppers and input; Enter activates.

import '@rhds/elements/rh-pagination/rh-pagination.js';
<meta itemprop="description" content="Default pagination with page links and numeric input.">
<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 = () => (
  <meta itemprop="description" content="Default pagination with page links and numeric input." />
  <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 'open' for transparent backgrounds with bottom borders, or null for the default box variant. Defaults to null.

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