【问题标题】:Does using `aria-expanded` on a navigation bar even make sense?在导航栏上使用“aria-expanded”是否有意义?
【发布时间】:2017-07-04 09:19:41
【问题描述】:

在长达十年的中断之后,我再次涉足 Web 开发。对我来说,不断变化的标准似乎仍然令人困惑,这让我不清楚哪些浏览器支持什么以及最佳实践是什么。

目前,我专注于使用new semantic elements of HTML5。我发现 ASP.NET Core 默认引导模板不使用导航栏的 <nav> 元素,因此正在研究如何正确应用它。

default navbar template in Bootstrap确实推荐使用<nav>。但是,我对应用于它的 aria-expanded 属性背后的目的感到困惑。在learning about the benefits it offers to screen readers 之后(指示导航栏是否折叠,在这种情况下,当屏幕尺寸较小时,即智能手机),我仍然对它是否应该存在感到困惑。 (还有whether or not aria-controls should be applied,它不在默认引导模板中。)

让我解释一下:

  • 其中一些 aria 属性似乎在描述视觉行为。向盲人描述他们看不到的东西是否有意义?
  • 正确应用<nav><main> 语义元素后,屏幕阅读器是否已经掌握了快速跳过导航栏的所有必要信息(相当于为有视力的人隐藏它)?

将导航切换机制完全隐藏给看不见的人难道不是更好的选择吗?那么我的问题是,如何去做。可以隐藏按钮using role="presentation" and/or aria-hidden="true"吗?

【问题讨论】:

  • 您有我们可以看到的功能示例吗?从表面上看,您提出了一个有效的问题,即当 ARIA 只是一种视觉效果时,是否需要在其中表示某些东西。关键是上下文是关键,当然编码也是如此。通过一个示例,我可以将其加载到屏幕阅读器中或查看代码并给您具体的反馈。
  • @aardrian 也许是the official Bootstrap navbar example?不幸的是,此网页不包含我在问题中提到的<main> 元素,但它可能适合您的目的。在导航栏之后添加它也应该很容易(使用 F12)。
  • @aardrian 至于上下文:默认情况下,引导程序中的导航栏可以在较小的屏幕尺寸(即智能手机)上折叠或展开。在较大的屏幕尺寸上,它始终显示,并且导航栏切换不可见。 (我还在问题中添加了这个上下文。)

标签: html twitter-bootstrap-3 accessibility semantic-markup wai-aria


【解决方案1】:

使用您在https://getbootstrap.com/examples/navbar/ 引用的示例,它需要aria-expanded

在较大的视口中,“下拉”菜单隐藏了所有子项。它们不仅在视觉上隐藏,而且对屏幕阅读器也隐藏。 aria-expanded 有助于为用户提供上下文,无论是否有更多可用的,并且还提供了一些关于后续制表位可能会将用户带到哪里的线索。

在狭窄的视口中,导航变成汉堡包,这仍然适用。加倍如此,因为它也适用于汉堡包本身。

这个上下文很重要,因为 aria-controls 支持是便便(引用 Heydon 的话)。

在某些情况下,菜单中的每个项目都可以通过选项卡获得,即使视觉上不存在。在那种情况下,aria-expanded 并不那么重要,但aria-controls 会更有价值。

另外,对于有视力的键盘用户,该菜单需要更好的 :focus 突出显示,以及菜单的 DOM 序列与狭窄视口中的徽标(这是我的看法)。

【讨论】:

  • 我一直在研究 Bootstrap 如何修改 DOM 以隐藏这些元素,但我不清楚该机制。它是如何在视觉上和屏幕阅读器中隐藏的?此外,更符合我最初的问题,为什么首先需要对屏幕阅读器隐藏它?也许我不完全理解“在实践中”aria-expanded 如何帮助遍历(在本例中为嵌套列表)DOM。另外,我想知道屏幕阅读器的选项卡行为是否与普通浏览器相同。
  • 屏幕阅读器中的选项卡行为与普通浏览器相同,因为屏幕阅读器依赖普通浏览器。屏幕阅读器增加了对地标、控件等的额外支持。屏幕阅读器支持display:none,因此很容易对具有该风格的屏幕阅读器隐藏某些内容。在这种情况下,为什么隐藏它取决于开发人员。至少,这是一种不那么冗长的体验。
  • @StevenJeuris 一直在问,我希望您能准确了解 SR 的工作原理。如果您愿意,我还可以提供示例、资源等。选项比比皆是。
  • 感谢您提供有关选项卡行为的信息。这在某种程度上可以解释它!但是,我没有注意到 Bootstrap 引入了 display: none(似乎 ::before::after 被操纵,我不明白它是如何工作的),但无论使用何种机制,标签不再停留在“隐藏”元素因此,我更好地理解了对 aria 属性的需求。通过更好地了解为什么屏幕阅读器像现在这样依赖浏览器,也许我的潜在问题会得到解答。
  • 使网站易于访问的最佳方法是using proper HTML。如果做得好,只需要 ARIA for complex controls(标签、树、轮播……)。屏幕阅读器允许jumping to content based on landmarks<nav><main><footer>,...),但仍然可以像有视力的用户一样从隐藏元素中受益。此外,并非所有 SR 用户都是盲人,因此视觉效果应该匹配。
【解决方案2】:

其中一些 aria 属性似乎在描述视觉行为。向盲人描述他们看不到的东西是否有意义?

这个问题应该是任何 ARIA 教程中最先出现的问题。

正确应用 <nav><main> 语义元素后,屏幕阅读器是否已经掌握了快速跳过导航栏的所有必要信息(相当于为有视力的人隐藏它)?

这是第二个。

编辑:当我读到这些问题时,我想“那个人已经明白了一切”。 ARIA 教程很少回答这些问题,因为它们与上下文相关,但提出这些问题必须是使用 ARIA 之前的第一步。 例如。图像轮播为盲人提供了非常不同的用户体验。将aria-controls 属性赋予“上一个”按钮并不会为基于视觉效果的系统提供更多智能。 ARIA 不是灵丹妙药。


ARIA 可以被视为一种神奇的药水,供那些想要使无法访问的东西变得可访问的人使用。在许多情况下,它会被不明智地使用。

aria-expanded可以为屏幕阅读器提供良好的用户体验,告知是否可以打开一个元素以显示更多元素(例如在下拉菜单中)。

您不能将aria-expanded 直接应用于nav 元素,因为它必须设置在交互式元素(如button)上,以告知这控制同一容器内另一个元素的可见性(可以是一个nav)。

我能看到的更好的选择是不隐藏任何东西来帮助不使用屏幕阅读器的人。无需在小屏幕分辨率下折叠导航栏,完全可以:

  1. 总是显示它
  2. 显示一个永久菜单图标以跳转到菜单栏(或暂时在视口内显示)

这样做的好处是可以滚动到菜单栏(对于那些不明白带有三条平行线的图标可能表示什么的人)并让屏幕阅读器用户列出所有内部链接。

当然,如果您构想一个 Web 应用程序而不是一个简单的网站,情况就会大不相同,而 ARIA 在这种情况下可能会更有用。

【讨论】:

  • 您是说这些问题在大多数 ARIA 教程中得到解答,还是说它们应该而不是?我看不出您的回答如何明确回答这两个问题。
  • 我编辑了我的答案(简而言之“它取决于上下文”)。事实上,问这些问题本身就是一个答案。最好的选择是让屏幕阅读器用户忽略预期的视觉效果,并给他们最好的用户体验。 ARIA 通常是一种临时性的尝试,试图澄清一些本来就不清楚的东西。谁真正喜欢带有隐藏子项的下拉菜单? “折叠/展开”信息是否比简单英语的“打开菜单”提供更多信息?我们可以使用 ARIA 来改进导航,但我们必须主要关注在没有 ARIA 的情况下使网站可访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多