ARIA: link 角色

link 小部件提供对资源的交互式引用。目标资源可以是外部的或本地的;即,位于当前页面或应用程序之外或之内。

注意: 如果可能,建议使用原生的 <a> 元素而不是 link 角色,因为原生元素的用户代理和辅助技术支持更广泛。原生的 <a> 元素默认也支持键盘和焦点要求,无需额外定制。

描述

link 角色用于识别一个创建指向应用程序内或外部资源的超链接的元素。

当不使用语义化 HTML 实现其预期用途时,必须重新实现交互功能。例如,当 role="link" 添加到元素时,tab 键应该能够使链接获得焦点,并且 enter 键在获得焦点时应该执行链接。

使用值为 0tabindex 属性,以确保链接处于正确的制表符焦点顺序中。

警告:link 角色应用于元素不会使浏览器增强该元素,使其具有标准的链接外观或行为,例如下划线、焦点环、导航到链接目标或上下文菜单操作。这是开发者的责任。

示例

要使用 link 角色在非 <a> 元素上创建可访问的链接,你需要确保链接在正确的制表符顺序中获得焦点,该元素看起来像一个链接,并且“链接”的行为像一个链接。

html
<span data-href="https://mozilla.org" tabindex="0" role="link">
  Fake accessible link created using a span
</span>

CSS

css
span[role="link"] {
  color: blue;
  text-decoration: underline;
  cursor: pointer;
}
span[role="link"]:hover,
span[role="link"]:active,
span[role="link"]:focus {
  color: purple;
}

span[role="link"]:focus {
  background-color: palegoldenrod;
  outline: 1px dotted;
}

JavaScript

js
const fakeLinks = document.querySelectorAll('[role="link"]');

for (const link of fakeLinks) {
  link.addEventListener("click", navigateLink);
  link.addEventListener("keydown", navigateLink);
}

// handles click and keydown events on the link
function navigateLink(e) {
  if (e.type === "click" || e.key === "Enter") {
    const ref = e.target ?? e.srcElement;
    if (ref) {
      window.open(ref.getAttribute("data-href"), "_blank");
    }
  }
}

如果带有 role="link" 的元素接收到 Enter 键事件,这将执行链接,跳转到链接页面或将焦点移动到页面内目标。

可选地,Shift + F10 会为链接打开一个上下文菜单。

最佳实践

各种小部件角色用于定义常见的交互模式。与文档结构角色类似,其中一些角色,包括 link 角色,复制了支持良好的原生 HTML 元素的语义,不应该使用。

避免使用 link,我们将其包含在内是为了完整性。具有可访问交互性的 <a> 语义等效项是可用且受支持的。

优先使用 HTML

改为使用 <a>

注意: 在 HTML 链接上包含 role="link" 是不必要的,因为 <a> 默认情况下已经具有该角色。

规范

规范
无障碍富互联网应用程序 (WAI-ARIA)
# link

另见