Pagination

Navigation aid that divides content into discrete pages, allowing users to navigate through large sets of data.

Class name Type
.prs-pagination Component Container
.prs-pagination-pager Component Page navigation
.prs-pagination-pager_disabled State Page navigation disabled
  • Default

    Just use browser accessible markup aria-current="true" to show the current page.

    <nav class="prs-pagination" role="navigation" aria-label="Pagination">
      <ul>
        <li class="prs-pagination-pager prs-pagination-pager_disabled"><a href="#" aria-label="Previous Page"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#chevron-left" /></svg></a></li>
        <li><a href="#" aria-label="Current Page, Page 1" aria-current="true" aria-label="Go to Page 1">1</a></li>
        <li><a href="#" aria-label="Go to Page 2">2</a></li>
        <li><a href="#" aria-label="Go to Page 3">3</a></li>
        <li><a href="#" aria-label="Go to Page 4">4</a></li>
        <li><a href="#" aria-label="Go to Page 5">5</a></li>
        <li class="prs-pagination-pager"><a href="#" aria-label="Next Page"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#chevron-right" /></svg></a></li>
      </ul>
    </nav>
    
    <!-- this is just for demo purposes -->
    <script>
      document.querySelectorAll('.prs-pagination a').forEach(link => { link.addEventListener('click', function(event) { event.preventDefault() }) });
    </script>
    

CSS

Full Library

Component Only

.prs-pagination {
  > ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
  }

  a {
    width: 2.125rem;
    height: 2.125rem;
    color: var(--prs-c-aqua);
    display: flex;
    align-items: center;
    justify-content: center;
    transition-property: var(--prs-transition-property);
    transition-timing-function: var(--prs-transition-timing);
    transition-duration: var(--prs-transition-duration);

    &:hover {
      background-color: var(--prs-c-gray-200);
      color: var(--prs-c-gray-900);
    }

    &:focus-visible {
      outline: 2px solid var(--prs-c-aqua);
      outline-offset: 1px;
    }

    &[aria-current="true"],
    &[aria-current="true"]:hover {
      background-color: var(--prs-c-aqua);
      color: var(--prs-c-white);
    }
  }

  .prs-pagination-pager {
    display: flex;
    align-items: center;
    justify-content: center;

    &:first-child {
      padding-right: 1.5rem;
    }

    &:last-child {
      padding-left: 1.5rem;
    }

    a {
      width: 1.5rem;
      height: 1.5rem;

      &:hover {
        background-color: transparent;
        color: var(--prs-c-gray-900);
      }
    }
  }

  .prs-pagination-pager_disabled a {
    color: var(--prs-c-gray-400);
    pointer-events: none;
  }
}

Figma

Coming soon...