docs(pagination): put current page on link element for a11y (#41154)
BrowserStack / browserstack (push) Has been cancelled Details
Bundlewatch / bundlewatch (push) Has been cancelled Details
cspell / cspell (push) Has been cancelled Details
CSS / css (push) Has been cancelled Details
Docs / docs (push) Has been cancelled Details
JS Tests / JS Tests (push) Has been cancelled Details
Lint / lint (push) Has been cancelled Details
CSS (node-sass) / css (push) Has been cancelled Details
Release notes / update_release_draft (push) Has been cancelled Details
CodeQL / Analyze (push) Has been cancelled Details

* docs(pagination): put current page on link element for a11y

* Reorganize and rewrite

* Update pagination.mdx

---------

Co-authored-by: Mark Otto <markdotto@gmail.com>
This commit is contained in:
MarkoOleksiyenko 2025-04-29 18:40:45 +02:00 committed by GitHub
parent 1184417397
commit ba5b5a6300
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 37 additions and 25 deletions

View File

@ -42,11 +42,33 @@ Looking to use an icon or symbol in place of text for some pagination links? Be
</ul>
</nav>`} />
## Disabled and active states
## Active
Pagination links are customizable for different circumstances. Use `.disabled` for links that appear un-clickable and `.active` to indicate the current page.
Add `.active` to indicate a `.page-item` is the one currently being viewed. If using an `<a>` on the current page, `aria-current="page"` should be added for assistive technologies.
While the `.disabled` class uses `pointer-events: none` to _try_ to disable the link functionality of `<a>`s, that CSS property is not yet standardized and doesnt account for keyboard navigation. As such, you should always add `tabindex="-1"` on disabled links and use custom JavaScript to fully disable their functionality.
<Example code={`<nav aria-label="...">
<ul class="pagination">
<li class="page-item"><a href="#" class="page-link">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<a class="page-link" href="#" aria-current="page">2</a>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>`} />
If using a non-interactive element, like a `<span>` for the current page, you may omit the `aria-current` attribute.
```html
<li class="page-item active">
<span class="page-link">2</span>
</li>
```
## Disabled
Add `.disabled` to a `.page-item` to make it appear un-clickable. While `.disabled` uses `pointer-events: none` to disable the links interactivity, that CSS property is not yet standardized and doesnt account for keyboard navigation. As such, you should always add `tabindex="-1"` on disabled links and use custom JavaScript to fully disable their functionality.
<Example code={`<nav aria-label="...">
<ul class="pagination">
@ -54,8 +76,8 @@ While the `.disabled` class uses `pointer-events: none` to _try_ to disable the
<a class="page-link">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active" aria-current="page">
<a class="page-link" href="#">2</a>
<li class="page-item active">
<a class="page-link" href="#" aria-current="page">2</a>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
@ -64,23 +86,13 @@ While the `.disabled` class uses `pointer-events: none` to _try_ to disable the
</ul>
</nav>`} />
You can optionally swap out active or disabled anchors for `<span>`, or omit the anchor in the case of the prev/next arrows, to remove click functionality and prevent keyboard focus while retaining intended styles.
And just like active page items, you can swap out the disabled `<a>` for a `<span>` to remove click functionality and prevent keyboard focus while retaining intended styles.
<Example code={`<nav aria-label="...">
<ul class="pagination">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active" aria-current="page">
<span class="page-link">2</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>`} />
```html
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
```
## Sizing
@ -88,8 +100,8 @@ Fancy larger or smaller pagination? Add `.pagination-lg` or `.pagination-sm` for
<Example code={`<nav aria-label="...">
<ul class="pagination pagination-lg">
<li class="page-item active" aria-current="page">
<span class="page-link">1</span>
<li class="page-item active" >
<a class="page-link" aria-current="page">1</a>
</li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
@ -98,8 +110,8 @@ Fancy larger or smaller pagination? Add `.pagination-lg` or `.pagination-sm` for
<Example code={`<nav aria-label="...">
<ul class="pagination pagination-sm">
<li class="page-item active" aria-current="page">
<span class="page-link">1</span>
<li class="page-item active">
<a class="page-link" aria-current="page">1</a>
</li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>