CSS标签生成器
标签页无处不在,设置面板、文档网站、产品图库中皆可见其踪迹。原生 HTML 并未提供专用的标签元素,因此开发者需自行实现。这个生成器会用 HTML + CSS 构建一个简单的标签栏:为活动标签提供强调色、为按钮提供圆角,并带有悬停状态。把标记代码粘贴到项目中,再用你自己的 JavaScript 实现标签切换。
如何创建标签页
-
1
选择强调色
活动标签的背景色和文字颜色。请选择与品牌匹配的颜色。
-
2
设置圆角
让标签按钮的顶部边角变圆。数值越大,外观越柔和。
-
3
编辑标签名称
输出包含三个按钮:“Overview”“Details”“Settings”。请按你的内容重命名。
-
4
复制代码
标签标记自带 <style> 样式块。将两者一起粘贴到你的页面中。
-
5
添加标签切换
生成器只生成视觉部分。要显示和隐藏面板,请将按钮接入你自己的 JavaScript 或 UI 库。
正确的可访问标记
<div class="tabs">
<div role="tablist" aria-label="Product info">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1" tabindex="0">Overview</button>
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
<button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
</div>
<section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
<section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
<section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>
关键属性:
role="tablist"包裹这些按钮。- 每个按钮上标有
role="tab",并带有aria-selected和aria-controls。 tabindex采用游动 tabindex 模式:仅当前活动标签为0,其余均为-1;方向键可在这些标签之间移动焦点。- 每个面板上标有
role="tabpanel",其aria-labelledby指向对应的标签。 - 非活动面板加上
hidden(不能只用display: none,辅助技术依据的正是该属性)。
键盘操作规则
| 按键 | 操作 |
|---|---|
| Tab | 进入 / 退出标签列表 |
| ArrowLeft | 上一个标签(循环到最后一个) |
| ArrowRight | 下一个标签(循环到第一个) |
| Home | 第一个标签 |
| End | 最后一个标签 |
| Enter / Space | 激活当前聚焦的标签(手动激活时) |
自动激活(焦点移动时标签页切换)与手动激活(焦点移动时按Enter键触发标签页切换),WAI-ARIA同时支持这两种方式。自动模式对视力正常的用户更为便捷;当标签页内容需大量渲染时,手动模式更为合适。
下划线样式
[role="tablist"] {
display: flex;
border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
padding: 0.75rem 1rem;
background: transparent;
border: 0;
color: #6b7280;
position: relative;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
color: #111827;
}
[role="tab"][aria-selected="true"]::after {
content: "";
position: absolute;
left: 1rem; right: 1rem; bottom: -1px;
height: 2px;
background: #2563eb;
}
胶囊样式
[role="tab"] {
padding: 0.5rem 0.9rem;
border-radius: 9999px;
border: 0;
background: transparent;
}
[role="tab"][aria-selected="true"] {
background: #2563eb;
color: #fff;
}
焦点可见
当通过键盘进行聚焦时,务必始终绘制对焦环:
[role="tab"]:focus-visible {
outline: 2px solid #60a5fa;
outline-offset: 2px;
}
JavaScript
大致如下:
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
tab.addEventListener('click', () => activate(tab));
tab.addEventListener('keydown', e => {
const i = [...tabs].indexOf(tab);
if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
if (e.key === 'ArrowLeft') tabs[(i - 1 + tabs.length) % tabs.length].focus();
if (e.key === 'Home') tabs[0].focus();
if (e.key === 'End') tabs[tabs.length - 1].focus();
});
});
function activate(tab) {
tabs.forEach(t => {
const panel = document.getElementById(t.getAttribute('aria-controls'));
const active = t === tab;
t.setAttribute('aria-selected', active);
t.setAttribute('tabindex', active ? '0' : '-1');
panel.hidden = !active;
});
tab.focus();
}
总计三十行,无依赖项。
标签页与手风琴
在窄屏设备上,标签行会显得拥挤。常见情况是:桌面端显示为标签页布局,移动端则呈现手风琴式排列。可使用容器查询或媒体查询来切换视觉呈现方式,而无需更改ARIA角色设置。
常见问题
对于可访问标签页,答案是肯定的。若缺少 role="tablist" 和 role="tab",屏幕阅读器会将这些按钮视为普通按钮,用户将无法遵循标准导航规则。另一种方案是采用简单的 <details> / <summary> 手风琴,它自带内置语义。
当每个标签页的内容渲染成本较低时,自动激活功能(焦点移动时标签页即被激活)即可满足需求;而当切换标签页需要执行大量操作(如获取或渲染大型表单)时,手动激活功能(焦点移动时按Enter键激活)更为合适。
对于包含内容的标签页(如文档页、产品页),建议使用哈希值(例如 #specs)或查询参数,以便链接能够指向特定标签页,并且活动标签页在页面重新加载时仍保持不变;而对于用户界面标签页(如设置面板),URL为可选参数。
仅适用于缺乏方向键导航和ARIA状态的复选框/单选按钮方案。若追求真正的无障碍体验,这段简短的JS代码完全值得投入。如需服务器端渲染的备用方案,请将每个标签页链接至独立URL,并在服务器端渲染对应的面板界面。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
电话号码验证器
根据各国号码规划检查结构,并显示地区、类型以及E.164、国际、国内和RFC 3966格式。
变更日志生成器
根据分类条目生成 Keep a Changelog 风格的 Markdown 部分。将条目粘贴到 Added、Changed、Fixed 和 Removed 下,选择 Markdown 或纯文本,然后复制输出。
cURL 命令生成器
根据 HTTP URL、请求头、认证、JSON、原始数据或表单字段,在浏览器中私密生成适用于 POSIX Shell 或 PowerShell 的 cURL 命令。
此工具还提供其他语言版本
- CSS-flikgenerator [SV]
- Generator Tab CSS [ID]
- CSS Tabs Generator [EN]
- ตัวสร้างแท็บส์ CSS [TH]
- CSSタブジェネレーター [JA]
- Trình tạo tab CSS [VI]
- Generador de Pestañas CSS [ES]
- CSS Tab Generatörü [TR]
- CSS-Tabs-Generator [DE]
- Générateur d'onglets CSS [FR]
- Gerador de Abas CSS [PT]
- مولد علامات التبويب CSS [AR]
- CSS 탭 생성기 [KO]
- CSS Tabs Generator [NL]
- Generator kart (tabs) CSS [PL]
- Генератор вкладок CSS [RU]
- Generatore di schede CSS [IT]