本文详解如何在不滥用 `tabindex` 和 `role=”link”` 的前提下,构建语义正确、键盘可操作(支持 tab + enter)的 logo 网格链接,强调原生 html 的无障碍优先原则。
在构建响应式 Logo 网格时,一个常见误区是试图“增强”非交互元素(如 或
)的可访问性,结果反而破坏了原生行为。你当前的结构:
" aria-label="Go to website" tabindex="0">
@@##@@" src="">
存在两个关键问题:
- 双重焦点陷阱: 和嵌套 会创建两个独立的可聚焦项,导致用户按 Tab 键两次才能跳过一个 Logo,且屏幕阅读器可能重复播报“link”,引发混淆;
- 语义冗余与冲突: 本身已是原生可聚焦、可激活(Enter 触发跳转)的链接元素,为其外层添加 role=”link” 不仅多余,还可能干扰辅助技术对默认语义的理解;而 并非语义化交互容器,强行赋予链接角色违背 ARIA 使用的第一准则——“If you can use a native HTML element or attribute with the semantics and behavior you require already built in, instead of re-purposing an element and adding an ARIA role, state, or property to make it accessible, then do so.”(W3C ARIA in HTML)
✅ 正确做法是:回归原生语义,移除所有不必要的 tabindex 和 ARIA 属性,仅保留语义清晰、行为可靠的 元素作为焦点和交互主体。
优化后的推荐结构如下: