Pagination
Navigate through pages of property listings, search results, and data tables.
Standard Pagination
Default Pagination
With Ellipsis
...
...
Size Variants
Pagination with Info
Property Listings
Showing 21-30 of 157 properties
Alternative Styles
Simple Pagination
Page 3 of 16
Mini Pagination
3 / 16
Load More
Showing 20 of 157 properties
Implementation Guide
HTML Structure
<!-- Standard Pagination -->
<div class="lyd-pagination">
<button class="lyd-pagination-item" disabled>
<svg>...</svg>
</button>
<button class="lyd-pagination-item">1</button>
<button class="lyd-pagination-item active">2</button>
<button class="lyd-pagination-item">3</button>
<span class="lyd-pagination-ellipsis">...</span>
<button class="lyd-pagination-item">10</button>
<button class="lyd-pagination-item">
<svg>...</svg>
</button>
</div>
<!-- With Info -->
<div class="lyd-pagination-wrapper">
<div class="lyd-pagination-info">
Showing 1-10 of 100 results
</div>
<div class="lyd-pagination">
<!-- Pagination items -->
</div>
</div>
React/Next.js Component
// components/Pagination.tsx
interface PaginationProps {
currentPage: number;
totalPages: number;
onPageChange: (page: number) => void;
showInfo?: boolean;
totalItems?: number;
itemsPerPage?: number;
size?: 'small' | 'medium' | 'large';
}
export const Pagination = ({
currentPage,
totalPages,
onPageChange,
showInfo = false,
totalItems = 0,
itemsPerPage = 10,
size = 'medium'
}: PaginationProps) => {
const getPageNumbers = () => {
const pages = [];
const showEllipsis = totalPages > 7;
if (!showEllipsis) {
for (let i = 1; i <= totalPages; i++) {
pages.push(i);
}
} else {
if (currentPage <= 4) {
for (let i = 1; i <= 5; i++) pages.push(i);
pages.push('...');
pages.push(totalPages);
} else if (currentPage >= totalPages - 3) {
pages.push(1);
pages.push('...');
for (let i = totalPages - 4; i <= totalPages; i++) pages.push(i);
} else {
pages.push(1);
pages.push('...');
for (let i = currentPage - 1; i <= currentPage + 1; i++) pages.push(i);
pages.push('...');
pages.push(totalPages);
}
}
return pages;
};
const startItem = (currentPage - 1) * itemsPerPage + 1;
const endItem = Math.min(currentPage * itemsPerPage, totalItems);
return (
<div className="lyd-pagination-wrapper">
{showInfo && (
<div className="lyd-pagination-info">
Showing {startItem}-{endItem} of {totalItems} results
</div>
)}
<div className={`lyd-pagination ${size}`}>
<button
className="lyd-pagination-item"
onClick={() => onPageChange(currentPage - 1)}
disabled={currentPage === 1}
>
<svg width="16" height="16" viewBox="0 0 24 24">
<path d="M15 19l-7-7 7-7" />
</svg>
</button>
{getPageNumbers().map((page, index) => (
page === '...' ? (
<span key={index} className="lyd-pagination-ellipsis">...</span>
) : (
<button
key={index}
className={`lyd-pagination-item ${page === currentPage ? 'active' : ''}`}
onClick={() => onPageChange(page as number)}
>
{page}
</button>
)
))}
<button
className="lyd-pagination-item"
onClick={() => onPageChange(currentPage + 1)}
disabled={currentPage === totalPages}
>
<svg width="16" height="16" viewBox="0 0 24 24">
<path d="M9 5l7 7-7 7" />
</svg>
</button>
</div>
</div>
);
};
API Reference
| Class | Description |
|---|---|
.lyd-pagination |
Pagination container |
.lyd-pagination-item |
Individual page button |
.lyd-pagination-ellipsis |
Ellipsis separator |
.lyd-pagination-wrapper |
Container with info |
.lyd-pagination-info |
Results info text |
.lyd-pagination-simple |
Simple pagination style |
.lyd-pagination-mini |
Compact pagination |
.lyd-pagination-loadmore |
Load more container |
.active |
Current page indicator |
.small, .large |
Size variants |