【问题标题】:Is an aria-label needed for basic (all) link tags?基本(所有)链接标签是否需要 aria-label?
【发布时间】:2018-12-15 01:26:39
【问题描述】:

试图弄清楚为什么 Lighthouse 审核将我的一堆链接标记为未通过 elements have discernible names

<h3>
  <a href="https://..." class="custom classes here">My New Post Title</a>
</h3>

我的问题是所有链接都需要aria-labels,因为我认为如果它只是一个普通链接,那么链接内的文本是必需的吗?

或者我的标记结构还有其他问题吗?另一个标记的元素是这个:

<a class="custom classes" href="https://...">
  <div class="custom classes" style="background-image: url('https://...');"></div>
  <div class="article-thumbnails-small__title">Post Title</div>
</a>

我知道a 没有文字,所以aria-label 应该在带有实际帖子标题的div 上,对吗?

已解决 我看错了元素……祝你有美好的一天。

【问题讨论】:

    标签: html wai-aria lighthouse


    【解决方案1】:

    你的两个例子都很好,不应该被标记。一定有别的事情发生。您发布的代码是否与正在测试的代码完全一致?

    ARIA 属性应谨慎使用,并且仅在本机标记不足时使用。对于链接,如您所说,如果&lt;a&gt;...&lt;/a&gt; 之间有任何文本,那么这就是“可识别文本”。

    如果链接没有任何直接文本,但如果子元素有,那么您也可以,例如您的第二个示例。 &lt;a&gt; 没有文字,但第二个 &lt;div&gt; 有“帖子标题”。查找“可识别文本”时会考虑&lt;a&gt; 的所有子元素。当我 tab 到该链接时,我会从屏幕阅读器中听到“帖子标题,链接”。

    但是,CSS 会影响这一点。如果您在第二个&lt;div&gt; 上的class="article-thumbnails-small__title"display:nonevisibility:hidden,那么该文本将可识别,因为它是隐藏的。

    如果类有width/height:0px,那么它可能也无法识别。有时 0 大小的元素被认为是隐藏的。

    如果你的链接没有文字但有嵌套的&lt;img&gt;,只要图片有alt文字,就可以了。

    好:

    <a href="foo.html">
      <img src="foo.jpg" alt="foo">
    </a>
    

    没有可辨认的文字:

    <a href="foo.html">
      <img src="foo.jpg">
    </a>
    

    【讨论】:

    • 非常翔实的答案,谢谢。不确定这是否是 Lighthouse 的问题,因为我不知道是什么导致它失败。我有大约 12 个这种结构的实例(在显示:网格内的 h3 内锚定),它们都是肯定可见的,因为它们只是白色背景上的黑色文本......
    • 我非常怀疑这是灯塔问题。 Lighthouse 使用 ax (by Deque) 作为它的可访问性规则,aXe 的主要目标是“没有误报”。他们宁愿没有检测到问题,也不愿错误地报告问题。您可以为 Firefox 或 Chrome 安装 ax 扩展。如果您在页面上运行 ax,您应该会收到与 Lighthouse 相同的“可识别文本”错误。您能否在违规页面上调出代码检查器并将display:grid 父级(以及后续的 h3 和锚定子级)复制/粘贴到他们自己的文件中并在其上运行 aXe/Lighthouse?也许也发布该代码。
    • 所以我终于意识到我看错了元素......我有一个额外的链接兄弟到那个 h3,里面有一个图像,这导致了问题。不过我会投赞成票,因为您确实回答了我对您的回复提出的各种其他问题!
    • 感谢您的支持,但答案应该被标记为正确,因为我在答案的末尾解决了图像问题。
    【解决方案2】:

    链接上的aria-label 属性(带有href 属性的a 元素)只应在出于某种原因无法或不希望使用可感知的链接文本时使用。 (这包括图片链接中的alt 属性。)如果您有正常的链接文本,则不应使用aria-label 属性,因为该属性会覆盖链接文本。请参阅文档 Accessible Name and Description Computation 1.1 中的text alternative computationstep Fa 元素具有允许从其内容(即链接文本和/或alt)计算其名称的固有角色链接中img 的属性)。但是,只有在链接元素上没有aria-label 属性 时才会执行此步骤(请参阅step C

    另请参阅 WAI-ARIA 创作实践 1.1 中的 Principle 2: ARIA Can Both Cloak and Enhance, Creating Both Power and Danger,其中指出 ARIA 有时会覆盖原始语义或内容,并以 aria-label 为例。

    因此,如果 Lighthouse 用可感知的链接文本标记链接且没有 aria-label 属性,则肯定有其他原因,例如隐藏元素的 CSS。

    【讨论】:

    • 您知道 Lighthouse 或 Axe 是否会标记为不良做法的覆盖吗?例如,如果我有一个带有孩子的父母的咏叹调标签?
    • @TaylorA.Leach Lighthouse 不会在具有包含文本内容的子元素的元素(例如 div)上标记每个 aria-label。 (a 元素是可聚焦的,这可能会有所不同。)
    猜你喜欢
    • 2019-06-23
    • 2019-09-12
    • 1970-01-01
    • 2021-10-07
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多