Skip to content

Pagination

The Pagination component provides a flexible and customizable way to create pagination controls for navigating through multi-page content. It automatically generates page numbers, previous/next buttons, and handles active states.

  • Metro UI Core
  • DOM library
// Create pagination with 100 total items, 10 items per page, current page 1
const pagination = Metro.pagination({
length: 100,
rows: 10,
current: 1,
target: "#pagination-container"
});
<!-- Container for pagination -->
<div id="pagination-container"></div>
<!-- JavaScript to create pagination -->
<script>
Metro.pagination({
length: 100,
rows: 10,
current: 1,
target: "#pagination-container"
});
</script>
// Create pagination with custom styling
Metro.pagination({
length: 100,
rows: 10,
current: 1,
target: "#pagination-container",
clsPagination: "rounded primary"
});

The Pagination component accepts the following configuration options:

ParameterTypeDefaultDescription
lengthnumber0Total number of items/rows
rowsnumber0Number of items per page (page size)
currentnumber0Current page number
targetstring"body"Selector for the container element
clsPaginationstring""Additional CSS classes for the pagination
prevTitlestring""Custom text for the previous button (defaults to localized “Previous”)
nextTitlestring""Custom text for the next button (defaults to localized “Next”)
distancenumber5Number of pages to show before/after current page
islandSizenumber3Number of pages to show around current page when in middle
shortTracknumber10Threshold for showing all pages without ellipsis
langstringundefinedLanguage for localization (defaults to container’s lang attribute or “en”)

The Pagination component provides the following method:

  • Metro.pagination(options) - Creates and returns a pagination element with the specified options.

To handle pagination clicks, you can attach a click event handler to the pagination items:

// Create pagination
const pagination = Metro.pagination({
length: 100,
rows: 10,
current: 1,
target: "#pagination-container"
});
// Handle pagination clicks
$("#pagination-container").on("click", ".page-item", function() {
const page = $(this).find(".page-link").data("page");
if (page === "prev") {
// Handle previous page
loadPage(currentPage - 1);
} else if (page === "next") {
// Handle next page
loadPage(currentPage + 1);
} else if (page !== null) {
// Handle specific page
loadPage(page);
}
});

The Pagination component can be styled using the following CSS variables:

VariableDefault (Light)Dark ModeDescription
--pagination-page-item-backgroundvar(—default-background)var(—default-background)Background color of pagination items
--pagination-page-item-colorvar(—default-color)var(—default-color)Text color of pagination items
--pagination-page-item-background-hover#e4e4e4rgba(106, 106, 106, 0.44)Background color on hover
--pagination-page-item-color-hovervar(—default-color)var(—default-color)Text color on hover
--pagination-page-item-background-disabledvar(—default-background-disabled)var(—default-background-disabled)Background color of disabled items
--pagination-page-item-color-disabledvar(—default-color-disabled)var(—default-color-disabled)Text color of disabled items
--pagination-page-item-background-activergba(217, 217, 217, 0.44)rgba(106, 106, 106, 0.44)Background color of active item
--pagination-page-item-color-activevar(—default-color)var(—default-color)Text color of active item
--pagination-page-item-border-colorvar(—border-color)var(—border-color)Border color of pagination items
--pagination-page-item-border-radius4px6pxBorder radius of pagination items
/* Custom styling for pagination */
.custom-pagination {
--pagination-page-item-background: #f0f8ff;
--pagination-page-item-color: #0d47a1;
--pagination-page-item-background-hover: #bbdefb;
--pagination-page-item-border-color: #2196f3;
--pagination-page-item-background-active: #2196f3;
--pagination-page-item-color-active: #ffffff;
--pagination-page-item-border-radius: 8px;
}
  • .pagination - Main container for pagination
  • .page-item - Individual pagination item
  • .page-link - Link inside pagination item
  • .page-item.active - Active page
  • .page-item.disabled - Disabled page
  • .page-item.no-link - Item without link (ellipsis)
  • .page-item.service - Service items (prev/next)
  • .pagination.rounded - Rounded pagination items
  • .pagination.no-gap - Pagination without gaps between items
  • .pagination.size-large - Large pagination
  • .pagination.size-small - Small pagination

The pagination component supports all Metro UI color variants:

  • .pagination.primary - Primary color variant
  • .pagination.secondary - Secondary color variant
  • .pagination.success - Success color variant
  • .pagination.alert - Alert color variant
  • .pagination.warning - Warning color variant
  • .pagination.yellow - Yellow color variant
  • .pagination.info - Info color variant
  • .pagination.light - Light color variant
  • .pagination.dark - Dark color variant
  • And many other color variants defined in Metro UI

The pagination component generates the following structure:

<ul class="pagination [additional-classes]">
<!-- Previous button -->
<li class="page-item service prev-page [disabled]">
<a class="page-link" data-page="prev">Previous</a>
</li>
<!-- First page -->
<li class="page-item [active]">
<a class="page-link" data-page="1">1</a>
</li>
<!-- Ellipsis if needed -->
<li class="page-item no-link">
<a class="page-link">...</a>
</li>
<!-- Page numbers -->
<li class="page-item [active]">
<a class="page-link" data-page="n">n</a>
</li>
<!-- Last page -->
<li class="page-item [active]">
<a class="page-link" data-page="last">last</a>
</li>
<!-- Next button -->
<li class="page-item service next-page [disabled]">
<a class="page-link" data-page="next">Next</a>
</li>
</ul>
  1. Use appropriate page sizes to balance content density and number of pages
  2. Consider using the distance and islandSize parameters to control pagination complexity for large datasets
  3. Add clear visual indication of the current page
  4. Ensure pagination controls are large enough for touch interaction on mobile devices
  5. Consider using the .size-large modifier on touch devices for better usability
  6. Use color variants that match your application’s color scheme
  7. Provide appropriate ARIA attributes for accessibility when implementing click handlers