Foundation 分页
Foundation 分页组件用于在多页内容之间进行导航。本章将介绍分页的各种用法。
基本分页
使用 .pagination 类创建基本分页:
html
<nav aria-label="分页">
<ul class="pagination">
<li class="pagination-previous disabled">上一页</li>
<li class="current"><span class="show-for-sr">当前页</span>1</li>
<li><a href="#" aria-label="第2页">2</a></li>
<li><a href="#" aria-label="第3页">3</a></li>
<li><a href="#" aria-label="第4页">4</a></li>
<li class="ellipsis" aria-hidden="true"></li>
<li><a href="#" aria-label="第12页">12</a></li>
<li><a href="#" aria-label="第13页">13</a></li>
<li class="pagination-next"><a href="#" aria-label="下一页">下一页</a></li>
</ul>
</nav>居中分页
html
<nav aria-label="分页">
<ul class="pagination text-center">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>简单分页
只显示上一页和下一页:
html
<nav aria-label="分页">
<ul class="pagination">
<li class="pagination-previous"><a href="#">« 上一页</a></li>
<li class="pagination-next"><a href="#">下一页 »</a></li>
</ul>
</nav>禁用状态
html
<ul class="pagination">
<li class="pagination-previous disabled">上一页</li>
<li class="current">1</li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>省略号
使用 .ellipsis 表示省略的页码:
html
<ul class="pagination">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="ellipsis" aria-hidden="true"></li>
<li><a href="#">9</a></li>
<li class="current">10</li>
<li><a href="#">11</a></li>
<li class="ellipsis" aria-hidden="true"></li>
<li><a href="#">19</a></li>
<li><a href="#">20</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>自定义样式
圆角分页
html
<style>
.pagination.rounded li a,
.pagination.rounded li.current {
border-radius: 50%;
width: 40px;
height: 40px;
line-height: 40px;
padding: 0;
text-align: center;
}
</style>
<ul class="pagination rounded">
<li class="pagination-previous"><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">»</a></li>
</ul>按钮式分页
html
<style>
.pagination.buttons li a {
background: #f4f4f4;
border-radius: 4px;
margin: 0 2px;
}
.pagination.buttons li a:hover {
background: #e0e0e0;
}
.pagination.buttons li.current {
background: #1779ba;
color: white;
border-radius: 4px;
padding: 0.1875rem 0.625rem;
}
</style>
<ul class="pagination buttons">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>彩色分页
html
<style>
.pagination.primary li.current {
background: #1779ba;
}
.pagination.success li.current {
background: #3adb76;
}
.pagination.warning li.current {
background: #ffae00;
}
</style>分页信息
显示当前页信息:
html
<div class="grid-x align-middle">
<div class="cell auto">
<p class="text-muted">显示第 1-10 条,共 100 条记录</p>
</div>
<div class="cell shrink">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous disabled">上一页</li>
<li class="current">1</li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</div>
</div>每页显示数量
结合下拉菜单:
html
<div class="grid-x align-middle">
<div class="cell shrink">
<label style="margin-right: 10px;">
每页显示
<select style="width: auto; display: inline-block; margin: 0 5px;">
<option>10</option>
<option>25</option>
<option>50</option>
<option>100</option>
</select>
条
</label>
</div>
<div class="cell auto text-right">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</div>
</div>跳转到指定页
html
<div class="grid-x align-middle">
<div class="cell auto">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="ellipsis"></li>
<li><a href="#">10</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</div>
<div class="cell shrink">
<div class="input-group" style="margin: 0;">
<span class="input-group-label">跳转到</span>
<input class="input-group-field" type="number" min="1" max="10" style="width: 60px;">
<div class="input-group-button">
<button class="button" type="button">Go</button>
</div>
</div>
</div>
</div>JavaScript 分页
动态生成分页:
javascript
function createPagination(currentPage, totalPages, container) {
var html = '<ul class="pagination">';
// 上一页
if (currentPage > 1) {
html += '<li class="pagination-previous"><a href="#" data-page="' + (currentPage - 1) + '">上一页</a></li>';
} else {
html += '<li class="pagination-previous disabled">上一页</li>';
}
// 页码
for (var i = 1; i <= totalPages; i++) {
if (i === currentPage) {
html += '<li class="current">' + i + '</li>';
} else if (i === 1 || i === totalPages || Math.abs(i - currentPage) <= 2) {
html += '<li><a href="#" data-page="' + i + '">' + i + '</a></li>';
} else if (Math.abs(i - currentPage) === 3) {
html += '<li class="ellipsis"></li>';
}
}
// 下一页
if (currentPage < totalPages) {
html += '<li class="pagination-next"><a href="#" data-page="' + (currentPage + 1) + '">下一页</a></li>';
} else {
html += '<li class="pagination-next disabled">下一页</li>';
}
html += '</ul>';
$(container).html(html);
// 绑定点击事件
$(container).find('a[data-page]').on('click', function(e) {
e.preventDefault();
var page = $(this).data('page');
createPagination(page, totalPages, container);
// 触发页面加载
loadPage(page);
});
}
// 使用
createPagination(1, 10, '#pagination-container');完整示例
html
<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Foundation 分页示例</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/css/foundation.min.css">
<style>
.demo-section {
margin-bottom: 40px;
padding: 20px;
background: #f8f8f8;
border-radius: 4px;
}
.demo-section h3 {
margin-bottom: 20px;
}
.pagination.rounded li a,
.pagination.rounded li.current {
border-radius: 50%;
width: 36px;
height: 36px;
line-height: 36px;
padding: 0;
text-align: center;
}
.pagination.buttons li a {
background: #f4f4f4;
border-radius: 4px;
margin: 0 2px;
}
.pagination.buttons li a:hover {
background: #e0e0e0;
}
.pagination.buttons li.current {
background: #1779ba;
color: white;
border-radius: 4px;
padding: 0.1875rem 0.625rem;
}
.pagination.large li a,
.pagination.large li.current {
padding: 0.5rem 1rem;
font-size: 1.1rem;
}
</style>
</head>
<body>
<div class="grid-container">
<h1>Foundation 分页展示</h1>
<div class="demo-section">
<h3>基本分页</h3>
<nav aria-label="分页">
<ul class="pagination">
<li class="pagination-previous disabled">上一页</li>
<li class="current"><span class="show-for-sr">当前页</span>1</li>
<li><a href="#" aria-label="第2页">2</a></li>
<li><a href="#" aria-label="第3页">3</a></li>
<li><a href="#" aria-label="第4页">4</a></li>
<li><a href="#" aria-label="第5页">5</a></li>
<li class="pagination-next"><a href="#" aria-label="下一页">下一页</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>带省略号的分页</h3>
<nav aria-label="分页">
<ul class="pagination">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="ellipsis" aria-hidden="true"></li>
<li><a href="#">8</a></li>
<li><a href="#">9</a></li>
<li class="current">10</li>
<li><a href="#">11</a></li>
<li><a href="#">12</a></li>
<li class="ellipsis" aria-hidden="true"></li>
<li><a href="#">19</a></li>
<li><a href="#">20</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>居中分页</h3>
<nav aria-label="分页" class="text-center">
<ul class="pagination">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="current">3</li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>简单分页</h3>
<nav aria-label="分页">
<ul class="pagination">
<li class="pagination-previous"><a href="#">« 上一篇文章</a></li>
<li class="pagination-next"><a href="#">下一篇文章 »</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>圆角分页</h3>
<nav aria-label="分页">
<ul class="pagination rounded">
<li class="pagination-previous"><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="current">3</li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="pagination-next"><a href="#">»</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>按钮式分页</h3>
<nav aria-label="分页">
<ul class="pagination buttons">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="current">3</li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>大号分页</h3>
<nav aria-label="分页">
<ul class="pagination large">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<div class="demo-section">
<h3>带信息的分页</h3>
<div class="grid-x align-middle">
<div class="cell auto">
<p class="text-muted" style="margin: 0;">显示第 21-30 条,共 100 条记录</p>
</div>
<div class="cell shrink">
<nav aria-label="分页">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="current">3</li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="ellipsis"></li>
<li><a href="#">10</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div class="demo-section">
<h3>带跳转的分页</h3>
<div class="grid-x align-middle">
<div class="cell auto">
<nav aria-label="分页">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li class="ellipsis"></li>
<li><a href="#">10</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<div class="cell shrink">
<div class="input-group" style="margin: 0;">
<span class="input-group-label">跳转到</span>
<input class="input-group-field" type="number" min="1" max="10" value="2" style="width: 60px;">
<div class="input-group-button">
<button class="button" type="button">Go</button>
</div>
</div>
</div>
</div>
</div>
<div class="demo-section">
<h3>每页数量选择</h3>
<div class="grid-x align-middle">
<div class="cell shrink">
<label style="margin: 0;">
每页显示
<select style="width: auto; display: inline-block; margin: 0 5px;">
<option>10</option>
<option selected>25</option>
<option>50</option>
<option>100</option>
</select>
条
</label>
</div>
<div class="cell auto text-right">
<nav aria-label="分页">
<ul class="pagination" style="margin: 0;">
<li class="pagination-previous"><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li class="current">2</li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li class="pagination-next"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/js/foundation.min.js"></script>
<script>$(document).foundation();</script>
</body>
</html>分页最佳实践
- 可访问性:使用
aria-label和语义化标签 - 当前页显示:清晰标识当前所在页
- 禁用状态:在首/末页时禁用对应按钮
- 省略号:页码过多时使用省略号
- 信息提示:显示总记录数和当前位置
总结
本章我们学习了:
- 基本分页的创建
- 居中和简单分页
- 省略号和禁用状态
- 自定义样式(圆角、按钮式)
- 带信息和跳转功能的分页
- JavaScript 动态分页
下一章,我们将学习 Foundation 价格表。
提示:分页是用户导航的重要组件,确保其易于理解和操作。