标签页 Tabs
标签页是用于在不同内容面板之间切换的导航组件。
基础用法
基础标签页
html
<div class="glass-tabs">
<div class="tabs-nav">
<button class="tab-item active">标签一</button>
<button class="tab-item">标签二</button>
<button class="tab-item">标签三</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">内容一</div>
<div class="tab-panel">内容二</div>
<div class="tab-panel">内容三</div>
</div>
</div>
预览效果:
内容一
内容二
内容三
带图标的标签页
html
<div class="glass-tabs">
<div class="tabs-nav">
<button class="tab-item active">
<span class="tab-icon">📄</span>
文档
</button>
<button class="tab-item">
<span class="tab-icon">⚙️</span>
设置
</button>
<button class="tab-item">
<span class="tab-icon">👤</span>
用户
</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">文档内容</div>
<div class="tab-panel">设置内容</div>
<div class="tab-panel">用户内容</div>
</div>
</div>
预览效果:
文档内容
设置内容
用户内容
标签页类型
卡片式标签页
html
<div class="glass-tabs card">
<div class="tabs-nav">
<button class="tab-item active">首页</button>
<button class="tab-item">产品</button>
<button class="tab-item">关于</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">首页内容</div>
<div class="tab-panel">产品内容</div>
<div class="tab-panel">关于内容</div>
</div>
</div>
边框式标签页
html
<div class="glass-tabs bordered">
<div class="tabs-nav">
<button class="tab-item active">概述</button>
<button class="tab-item">详情</button>
<button class="tab-item">评价</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">概述内容</div>
<div class="tab-panel">详情内容</div>
<div class="tab-panel">评价内容</div>
</div>
</div>
标签页位置
垂直标签页
html
<div class="glass-tabs vertical">
<div class="tabs-nav">
<button class="tab-item active">选项一</button>
<button class="tab-item">选项二</button>
<button class="tab-item">选项三</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">垂直内容一</div>
<div class="tab-panel">垂直内容二</div>
<div class="tab-panel">垂直内容三</div>
</div>
</div>
CSS 类名
基础类名
.glass-tabs
- 标签页容器.tabs-nav
- 标签导航区域.tab-item
- 单个标签.tabs-content
- 内容区域.tab-panel
- 内容面板.tab-icon
- 标签图标
修饰类名
类型修饰符
.card
- 卡片式样式.bordered
- 边框式样式
布局修饰符
.vertical
- 垂直布局
状态修饰符
.active
- 激活状态
JavaScript 增强
标签页切换
javascript
function initTabs(tabsElement) {
const tabItems = tabsElement.querySelectorAll('.tab-item');
const tabPanels = tabsElement.querySelectorAll('.tab-panel');
tabItems.forEach((tab, index) => {
tab.addEventListener('click', () => {
// 移除所有激活状态
tabItems.forEach(item => item.classList.remove('active'));
tabPanels.forEach(panel => panel.classList.remove('active'));
// 设置当前激活状态
tab.classList.add('active');
tabPanels[index].classList.add('active');
// 触发切换事件
tabsElement.dispatchEvent(new CustomEvent('tab-change', {
detail: { index, tab, panel: tabPanels[index] }
}));
});
});
}
// 初始化所有标签页
document.querySelectorAll('.glass-tabs').forEach(initTabs);
键盘导航
javascript
function addKeyboardNavigation(tabsElement) {
const tabItems = Array.from(tabsElement.querySelectorAll('.tab-item'));
tabItems.forEach((tab, index) => {
tab.addEventListener('keydown', (e) => {
let nextIndex = index;
switch (e.key) {
case 'ArrowLeft':
e.preventDefault();
nextIndex = index > 0 ? index - 1 : tabItems.length - 1;
break;
case 'ArrowRight':
e.preventDefault();
nextIndex = index < tabItems.length - 1 ? index + 1 : 0;
break;
case 'Home':
e.preventDefault();
nextIndex = 0;
break;
case 'End':
e.preventDefault();
nextIndex = tabItems.length - 1;
break;
}
if (nextIndex !== index) {
tabItems[nextIndex].focus();
tabItems[nextIndex].click();
}
});
});
}
应用场景
设置面板
html
<div class="glass-tabs">
<div class="tabs-nav">
<button class="tab-item active">
<span class="tab-icon">👤</span>
个人信息
</button>
<button class="tab-item">
<span class="tab-icon">🔒</span>
安全设置
</button>
<button class="tab-item">
<span class="tab-icon">🔔</span>
通知设置
</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">
<h3>个人信息</h3>
<p>编辑您的个人资料信息...</p>
</div>
<div class="tab-panel">
<h3>安全设置</h3>
<p>管理您的账户安全...</p>
</div>
<div class="tab-panel">
<h3>通知设置</h3>
<p>配置通知偏好...</p>
</div>
</div>
</div>
产品展示
html
<div class="glass-tabs card">
<div class="tabs-nav">
<button class="tab-item active">产品介绍</button>
<button class="tab-item">技术规格</button>
<button class="tab-item">用户评价</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">
<h3>产品介绍</h3>
<p>这是一款革命性的产品...</p>
</div>
<div class="tab-panel">
<h3>技术规格</h3>
<ul>
<li>尺寸:10cm x 5cm</li>
<li>重量:100g</li>
<li>材质:铝合金</li>
</ul>
</div>
<div class="tab-panel">
<h3>用户评价</h3>
<p>⭐⭐⭐⭐⭐ 非常好用的产品!</p>
</div>
</div>
</div>
数据仪表板
html
<div class="glass-tabs">
<div class="tabs-nav">
<button class="tab-item active">今日</button>
<button class="tab-item">本周</button>
<button class="tab-item">本月</button>
<button class="tab-item">本年</button>
</div>
<div class="tabs-content">
<div class="tab-panel active">
<p>今日访问量:1,234</p>
<p>新用户:56</p>
</div>
<div class="tab-panel">
<p>本周访问量:8,765</p>
<p>新用户:234</p>
</div>
<div class="tab-panel">
<p>本月访问量:32,456</p>
<p>新用户:1,234</p>
</div>
<div class="tab-panel">
<p>本年访问量:156,789</p>
<p>新用户:5,678</p>
</div>
</div>
</div>