Pagination
La pagination est un système de navigation où l'utilisateur peut passer d'une page à une autre pour un ensemble donné via les numéros de ces pages (généralement affichés en bas de page).
Règles d’implémentation pour l’accessibilité
Titre du document HTML
Le titre de la page HTML (élément title
du document HTML) sera mis à jour avec le numéro de page.
Exemple : <title> Page 8 sur 20 - ...</title>
Système de pagination
- La pagination est contenu dans un élément HTML
nav
possédant le rôlerole="navigation
et l’attributaria-label
annonçant qu’il s’agit d’un système de pagination. - L’ensemble des liens est structuré à l’aide d’une liste non ordonnée. L’utilisation d’une liste ordonnée créerait de la confusion pour l’utilisateur d’une synthèse vocale qui aurait accès au nombre d’items de la liste et au numéro de page ; ces deux éléments étant contradictoires (dans l’exemple ci-après, l’item numéro 6 est celui de la page 8.).
- Pour empêcher l’annonce par le lecteur d’écran des flèches de direction, celles-ci sont cachées via l’attribut
aria-hidden="true"
- Pour donner de l’information supplémentaire au lecteur d’écran, le texte précisant la page sera posé avec la classe
sr-only
. - L’élément représentant la page en cours possède l’attribut
aria-current="page"
.
Visuel
Extraits de code
Code HTML
Le texte informatif pour les logiciels de synthèse vocale est ajouté avec la classe sr-only
.
Les éléments ne devant pas être vocalisés sont implémentés avec l’attribut aria-hidden="true"
.
<nav role="navigation" aria-label="Pagination" class="pagination">
<ul>
<li><a href="path/to/page1"><span class="sr-only">Première page</span><span aria-hidden="true">«</span></a></li>
<li><a href="path/to/page"><span class="sr-only">Page Précédente</span><span aria-hidden="true"><</span></a></li>
<li><span class="ellipsis">…</span></li>
<li><a href="path/to/page"><span class="sr-only">Page </span>6</a></li>
<li><a href="path/to/page"><span class="sr-only">Page </span>7</a></li>
<li><a href="#" aria-label="Page en cours 8" aria-current="page">8</a></li>
<li><a href="path/to/page"><span class="sr-only">Page </span>9</a></li>
<li><a href="path/to/page"><span class="sr-only">Page </span>10</a></li>
<li><span class="ellipsis" >…</span></li>
<li><a href="path/to/page"><span class="sr-only">Page suivante</span><span aria-hidden="true">></span></a></li>
<li><a class="pagination_derniere" href="path/to/pagefin"><span class="sr-only">Dernière page</span><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
Code CSS
.sr-only {
border: 0 !important;
clip: rect(1px, 1px, 1px, 1px) !important;
-webkit-clip-path: inset(50%) !important;
clip-path: inset(50%) !important;
height: 1px !important;
overflow: hidden !important;
padding: 0 !important;
position: absolute !important;
width: 1px !important;
white-space: nowrap !important;
}
.pagination {
display: flex;
justify-content: center;
border-top: 1px solid #eee;
margin: 1em 0;
padding-top: 0.5em;
}
.pagination ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
}
.pagination li {
margin: 0 1px;
}
.pagination a,
.pagination .ellipsis {
display: block;
padding: 0.5em 1em;
border: 1px solid #999;
border-radius: 0.2em;
text-decoration: none;
}
.pagination a[aria-current="page"] {
background-color: #333;
color: #fff;
}
.pagination a:hover,
.pagination a:focus {
display: block;
padding: 0.5em 1em;
border: 1px solid #999;
background-color: #999;
border-radius: 0.2em;
text-decoration: none;
}