快捷键需通过语义拆分、跨平台标识、aria属性和无障碍样式协同实现可访问性:修饰键与主键须独立包裹,连接符外置并隐藏,macos用⌘符号,windows用ctrl,绑定aria-keyshortcuts到交互元素,样式确保对比度≥4.5:1且兼容高对比模式。

标签本身不执行功能,只传达“这是用户要按的物理按键”这一语义。要让快捷键真正可被辅助技术识别、理解、并关联到对应操作,必须兼顾结构、样式与 ARIA 属性三方面。
语义拆分:每个物理键独立包裹
修饰键(Ctrl / Cmd / Shift / Alt)和主键(S / R / Enter)必须各自用一个 元素包裹,不能合并或嵌套错误:
- ✅ 正确:Ctrl + S 或 ⌘ + S
- ❌ 错误:Ctrl+S(丢失修饰键与主键的层级关系)
- ❌ 错误:CtrlS(HTML 验证失败,且多数读屏器不支持嵌套解析)
加号、斜杠、“or”等连接符必须写在 标签外部,并用 + 显式隐藏,避免被屏幕阅读器朗读为“加号键”。
跨平台标识:显式区分操作系统语义
同一功能在不同系统可能对应不同按键组合,需并列呈现并明确标注:
- 用 Unicode 符号 ⌘ 表示 macOS Command 键(确保文档编码为 UTF-8 无 BOM)
- 避免混用文字与符号,如不写 “Cmd / Ctrl”,而统一为 ⌘ / Ctrl
- Mac 和 Windows 用户看到的不是“同一个键”,而是“同一操作的不同触发方式”,语义上应并列而非替代
交互绑定:aria-keyshortcuts 告知功能可触发性
只负责“说这是什么键”,不说明“按它能做什么”。要建立快捷键与控件的语义关联,必须添加 aria-keyshortcuts:
- 绑定在可交互元素上(如按钮、菜单项),例如:
- 值必须使用标准命名(Escape 不是 esc;Enter 不是 return)
- 多修饰键用英文加号连接,无空格:Ctrl+Shift+T ✅,Ctrl Shift T ❌
- 该属性不会自动触发事件,仍需 JavaScript 监听 keydown 并调用对应逻辑
样式与可访问性协同保障
默认 样式极简,依赖 CSS 才能确保视觉辨识度,但样式设计须服从无障碍原则:
- 背景与文字对比度 ≥ 4.5:1(如 #333 on #f2f2f2 是合规的)
- 禁用 box-shadow 或 background-image——高对比度模式下会失效
- 使用 system-ui 或 monospace 字体族,保持按键字符宽度一致
- 垂直对齐用 vertical-align: middle,不用 font-size 缩小连接符,避免基线错乱










