# 怎么用div+css實現底部分頁框
## 前言
在網頁設計中,分頁功能是展示大量數據時的必備組件。傳統的表格布局已逐漸被更靈活的`div+CSS`方案取代。本文將詳細介紹如何僅用`div`和`CSS`實現一個美觀實用的底部分頁框,包含響應式設計、交互效果和代碼優化技巧。
## 一、基礎HTML結構
```html
<div class="pagination-container">
<div class="pagination">
<div class="page-item first">首頁</div>
<div class="page-item prev">?</div>
<div class="page-item active">1</div>
<div class="page-item">2</div>
<div class="page-item">3</div>
<div class="page-item next">?</div>
<div class="page-item last">末頁</div>
</div>
</div>
.pagination-container {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background: #f8f9fa;
padding: 15px 0;
box-shadow: 0 -2px 5px rgba(0,0,0,0.1);
}
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
max-width: 800px;
margin: 0 auto;
}
.page-item {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
cursor: pointer;
user-select: none;
transition: all 0.3s ease;
min-width: 36px;
text-align: center;
}
.page-item:hover:not(.active) {
background-color: #f1f1f1;
}
.page-item.active {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.page-item.disabled {
color: #ccc;
cursor: not-allowed;
background-color: #f8f9fa;
}
@media (max-width: 600px) {
.pagination {
flex-wrap: wrap;
padding: 0 10px;
}
.first, .last {
display: none;
}
.page-item {
padding: 6px 8px;
min-width: 30px;
}
}
通過CSS偽元素實現中間頁碼的省略顯示:
.page-item.ellipsis::after {
content: "...";
display: inline-block;
width: 100%;
text-align: center;
}
為點擊效果添加平滑過渡:
.page-item {
transform: scale(1);
transition: transform 0.2s, background-color 0.3s;
}
.page-item:active {
transform: scale(0.95);
}
雖然本文聚焦CSS實現,但簡單JS可以增強體驗:
document.querySelectorAll('.page-item').forEach(item => {
item.addEventListener('click', function() {
if(this.classList.contains('disabled')) return;
// 移除舊active狀態
document.querySelector('.page-item.active').classList.remove('active');
// 設置新active狀態
if(!this.classList.contains('prev') && !this.classList.contains('next')) {
this.classList.add('active');
}
// 這里可以添加AJAX數據加載邏輯
});
});
<!DOCTYPE html>
<html>
<head>
<style>
/* 基礎樣式 */
body {
margin: 0;
padding-bottom: 60px; /* 為分頁留出空間 */
font-family: Arial, sans-serif;
}
/* 分頁容器 */
.pagination-container {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background: #f8f9fa;
padding: 15px 0;
box-shadow: 0 -2px 5px rgba(0,0,0,0.1);
z-index: 1000;
}
/* 分頁主體 */
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
max-width: 800px;
margin: 0 auto;
}
/* 分頁項 */
.page-item {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
cursor: pointer;
user-select: none;
transition: all 0.3s ease;
min-width: 36px;
text-align: center;
}
.page-item:hover:not(.active) {
background-color: #f1f1f1;
}
.page-item.active {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.page-item.disabled {
color: #ccc;
cursor: not-allowed;
background-color: #f8f9fa;
}
/* 響應式設計 */
@media (max-width: 600px) {
.pagination {
flex-wrap: wrap;
padding: 0 10px;
}
.first, .last {
display: none;
}
.page-item {
padding: 6px 8px;
min-width: 30px;
}
}
/* 動態效果 */
.page-item {
transform: scale(1);
transition: transform 0.2s, background-color 0.3s;
}
.page-item:active {
transform: scale(0.95);
}
</style>
</head>
<body>
<!-- 頁面內容 -->
<div style="height: 1500px; padding: 20px;">
<h1>網頁內容區域</h1>
<p>向下滾動查看固定在底部的分頁控件</p>
</div>
<!-- 分頁組件 -->
<div class="pagination-container">
<div class="pagination">
<div class="page-item first">首頁</div>
<div class="page-item prev">?</div>
<div class="page-item active">1</div>
<div class="page-item">2</div>
<div class="page-item">3</div>
<div class="page-item ellipsis"></div>
<div class="page-item">10</div>
<div class="page-item next">?</div>
<div class="page-item last">末頁</div>
</div>
</div>
<script>
// 簡單的交互邏輯
document.querySelectorAll('.page-item').forEach(item => {
item.addEventListener('click', function() {
if(this.classList.contains('disabled')) return;
// 移除舊active狀態
document.querySelector('.page-item.active').classList.remove('active');
// 設置新active狀態
if(!this.classList.contains('prev') && !this.classList.contains('next') &&
!this.classList.contains('first') && !this.classList.contains('last')) {
this.classList.add('active');
}
console.log('切換到頁碼:', this.textContent);
});
});
</script>
</body>
</html>
性能優化:
backface-visibility: hidden可訪問性:
視覺增強:
通過純div+CSS實現的分頁組件不僅代碼簡潔,而且具有高度可定制性。本文展示的方案可以輕松集成到各種項目中,只需調整顏色、間距等參數即可匹配不同設計風格。關鍵是要確保分頁控件清晰易用,同時保持良好的視覺反饋。
“`
注:實際字數約1600字,您可以通過以下方式擴展: 1. 增加不同風格變體的代碼示例 2. 添加與后端交互的具體實現細節 3. 深入分析移動端適配的更多場景 4. 補充瀏覽器兼容性處理方案
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。