让屏幕阅读器说出按钮 alt 属性而不是 insideText

2024-03-23

是否可以强制屏幕阅读器读取 alt 属性而不是按钮内的文本?

示例 HTML:<button alt="user menu">DrKawashima</button>

当使用 MacOS 中的内置辅助功能屏幕阅读器进行测试时,我发现它只显示“DrKawashima”,并且从未使用过 alt 属性。

有没有办法向屏幕阅读器暗示我宁愿让它说“用户菜单”?


是的,这是可能的 - 但请注意不要完全覆盖按钮的可见文本。

tl;dr - 我在这里推荐方法 4。

您的问题涉及屏幕阅读器,但还有其他类型的辅助技术需要考虑。特别是使用语音控制的视力正常的人(例如“龙自然说话”)。注意地址WCAG 成功标准 2.5.3:名称中的标签 https://www.w3.org/WAI/WCAG21/Understanding/label-in-name.html.

辅助技术涉及计算出的可访问名称 https://www.w3.org/TR/accname-1.1/一个元素的:

  • Screen readers will read the computed accessible name. Remember that the basic purpose of of a screen reader is to read what's on the screen - beware of trying to present a different interface to screen reader users.
    • 当盲人屏幕阅读器用户和视力正常的人都在谈论同一个屏幕时,可能会出现混乱。例如,电话技术支持人员可能会说“单击显示 DrKawashima 的按钮”。但如果这被覆盖,屏幕阅读器会说该按钮称为“用户菜单”,并且用户无法找到他们被告知要按下的按钮。
    • 有视力的人也使用屏幕阅读器。例如,患有阅读障碍的人可能喜欢朗读内容以使生活更轻松。当计算出的可访问名称与可见文本不同时,屏幕阅读器实际上就屏幕上显示的内容向用户撒谎。
  • Speech control will try to match what a user says, to the computed accessible name. If a button has visible text, it's important that this text appears inside the computed accessible name of the element. The expectation is that a speech control user can activate a button by saying the visible text. In your example, saying "Click DrKawashima" should activate the button. This won't work if the computed accessible name is "User menu".
    • 有一个解决方法。 Dragon Naturally Talking 有一个工具可以使用数字突出显示所有按钮:比如说“点击按钮”,查找号码,然后说“选择2”。然而,这是一个多步骤的过程,需要用户付出额外的努力。

请注意,计算出的可访问名称和可见文本不必完全匹配。相反,可见的文本必须形成part的可访问名称。

让我们看一些例子:

  1. 您的按钮上带有 alt 属性的示例根本不起作用,因为按钮没有 alt 属性。这不是有效的 HTML:<button alt="user menu">DrKawashima</button>.

    • 可见文字是“DrKawashima”
    • 计算出的可访问名称是“DrKawashima”。这alt属性没有效果。
    • 这通过了 WCAG“名称中的标签”,因为可见文本和计算的可访问名称完全相同。
    • 但是,它无法告知屏幕阅读器用户该按钮的用途;有视力的用户可能可以从随附的图标或头像图像中推断出这一点。
  2. The aria-label属性可用于完全覆盖按钮内容:<button aria-label="user menu">DrKawashima</button>.

    • 可见文字是“DrKawashima”。
    • 计算出的可访问名称是“用户菜单”。这aria-label属性完全覆盖按钮内容。
    • 此方法无法通过 WCAG“名称中的标签”,因为可见文本不构成可访问名称的一部分。语音控制用户无法通过说“单击 DrKawashima”来激活按钮。
  3. The aria-label属性可用于完全覆盖按钮内容,同时复制可见文本:<button aria-label="DrKawashima, User menu">DrKawashima</button>.

    • 可见文字是“DrKawashima”。
    • 计算出的可访问名称是“DrKawashima,用户菜单”。这aria-label属性完全覆盖按钮内容,但它复制了可见文本。
    • 这通过了 WCAG“名称标签”。该按钮可以被激活说“点击川岛博士”因为可见文本位于计算的可访问名称内。
    • 这种方法很简单,但可能很脆弱,因为您必须管理两个字符串。
  4. 包括一些视觉上隐藏的文本,为屏幕阅读器用户提供一些额外的上下文。例如,使用 HTML5Boilerplate 的.visuallyhidden类,或 Bootstrap 的.sr-only class: <button>DrKawashima<span class="visuallyhidden">, User menu</span></button>

    • 可见文字是“DrKawashima”
    • 计算出的可访问名称是“DrKawashima,用户菜单”。这是由按钮内容产生的。
    • 这通过了 WCAG“名称标签”。该按钮可以被激活说“点击川岛博士”因为可见文本位于计算的可访问名称内。
    • 这是最简单的解决方案,非常稳健。
  5. The aria-labelledby属性可以通过引用 2 个元素 ID 来构建一个可访问的名称:<button aria-labelledby="user-menu-visible-label user-menu-suffix"><span id="user-menu-visible-label">DrKawashima</span><span id="user-menu-suffix" class="visuallyhidden">, User menu</span></button>

    • 可见文字是“DrKawashima”
    • 计算出的可访问名称是“DrKawashima,用户菜单”。这是连接引用的两个元素的结果aria-labelledby.
    • 这通过了 WCAG“名称标签”。该按钮可以被激活说“点击川岛博士”因为可见文本位于计算的可访问名称内。
    • 这很强大,但实施起来需要更多工作,因为您需要管理 ID 引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让屏幕阅读器说出按钮 alt 属性而不是 insideText 的相关文章

  • 为什么“a”标签需要“tabindex=0”?

    我正在开发一个网络应用程序 其中一个重复的应用程序a当我通过 Tab 键浏览页面时 锚点 元素没有获得键盘焦点 仅当我添加tabindex 0我可以点击它吗 虽然我的目标是使焦点可见 但我正在使用 jQuery 片段确定元素是否获得焦点 W
  • UIBarButtonItem 如何禁用辅助功能 (iOS)

    SO 我正在尝试禁用已添加到 UINavigationController 的 leftBarButtonItems 中的 UIBarButtonItem 的 VoiceOver 可访问性 虽然我可以为没有标题的按钮禁用它 但我似乎无法为有
  • 如何将语音焦点转移到我的模式?

    我使用的是 iPhone 6 并且打开了语音 辅助功能 选项 我在链接单击时打开了退出模式 并将键盘焦点设置在模式上 使用 js 这一切都很好 但是 焦点旁白并未切换到我的模式 它仍然位于触发链接上 如何将语音焦点转移到模式上 这是模态代码
  • HTML 验证:为什么将交互元素放入交互元素内无效?

    免责声明 我知道它不是有效的 HTML 我想了解为什么不允许 W3C 建议像这样的交互元素button or a不得包含其他交互元素 我可以找到很多提到此规则和一些解决方法的资源 还有一些与此规则如何影响可访问性和屏幕阅读器相关的资源 但几
  • Microsoft UI 自动化教程/参考 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近使用 Microsoft Accessibility API 实现了一个程序 但后来被告知新的
  • 辅助功能:仅使用带有 href="#" 的 javascript 链接

    我有一个 React SPA 其中有一些链接可以导航到其他页面或同一页面上的其他位置 这些导航要么以编程方式决定 要么依赖 javascript 转到同一页面上的另一个位置 我可能不知道链接href当显示链接时 所以我将其渲染为href a
  • 有没有办法阻止 HTML access key="" 被激活?

    I tried preventDefault 但我还没有成功 我缺少什么吗 如果可能的话 我会尝试全局禁用它 例如在window 似乎没有办法阻止事件触发 唯一的选择似乎是在您不希望它们工作时暂时删除 accesskey 属性 就是这样jQ
  • Android 上的辅助功能测试自动化

    我最近开始研究 Android 上的自动化辅助功能测试 网络上没有太多信息 有人探索过这个或者目前正在这样做吗 如果是这样 您能分享您的想法 方法吗 似乎 Android 的 uiautomator 依赖于辅助功能来工作 但它不支持测试辅助
  • 辅助服务无法读取所有屏幕内容

    Issue 没有在 Android 馅饼中获取屏幕上的所有文本 检查直到牛轧糖代码工作正常 Device 小米 MiA1 Android One 版本 9 0 XML 设置
  • 如果 Select 元素没有标签,如何使其可访问?

    我正在学习 HTML 中的可访问性 我遇到了一个选择下拉 HTML 元素的示例 该元素旁边没有任何文本标签 仅页面上方标题的上下文可以让您了解该元素的含义元素包含例如例如 有关国家 地区的部分中的国家 地区列表 在其上运行辅助工具时 该工具
  • 辅助阅读将列表视图中的项目显示为列表项 + 标题视图

    我正在自定义下拉刷新列表视图中实现可访问性 我的下拉刷新列表视图有一个标题视图 用于在下拉时显示更新状态 如果我的列表仅包含 5 个项目 Talkback 将其读取为 显示第 1 项 共 6 项 而不是 显示第 1 项 共 5 项 我认为总
  • 如何使用 JavaScript 获取 WebKit 中的 accessKeyLabel? [复制]

    这个问题在这里已经有答案了 访问密钥标签 http www w3 org html wg drafts html master editing html dom accesskeylabel据我所知 在撰写本文时 Webkit 不支持 但在
  • 没有 JavaScript 的默认 html 表单焦点

    是否可以在不使用 JavaScript 的情况下在 HTML 表单上设置默认输入焦点 例如
  • UIAccessibility 更改 UITableView 配音公告(第 # 行)

    启用 VoiceOver 后 用户可以使用 3 指滑动手势来滚动 TableView VoiceOver 向用户口头宣布一个短语 指示他们在桌面视图上的位置 即可见的行 例如 第 1 行到第 4 行 共 5 行 我想覆盖此口头提示并通过画外
  • Android Accessibility 服务实时音频处理

    有人可以为我提供 Android 辅助功能服务实时音频处理的示例代码吗 我需要处理通话音频 但不知道如何实现这一点 请分享您对此的想法 请找到下面的清单
  • jQuery鼠标的.click()是通过键盘导航启动的

    我发现 jQuery 的奇怪行为click事件 如果我们使用键盘导航 辅助功能情况 则通过 Enter 或 Space 启动单击 这取决于我们使用的是哪个 HTML 元素 jsfiddle 上有一个测试页面 您可以尝试在结果框架中使用键盘导
  • CSS 的用户选择和可访问性

    如果我使用以下内容 webkit touch callout none webkit user select none khtml user select none moz user select none ms user select n
  • 辅助功能:推荐 SVG 和 MathML 的替代文本约定?

    Overview HTML5 现在允许 http dev w3 org html5 markup syntax html svg mathml
  • 用于 JAWS 开发的文本控制台?

    我正在开发一个网络应用程序 我希望通过屏幕阅读器使其易于使用 在 JAWS 中测试东西非常耗时 是否可以让 JAWS 显示文本而不是阅读它 我实际上不想听到开发过程中的内容 我只是想看看 JAWS 会读什么 据我所知 大白鲨 没有语音查看器
  • 自定义绘制的 UITableViewCell 中的可访问性

    当您进行自定义绘图时 UITableViewCells 滚动速度会显着提高 但是辅助功能会中断 应该如何向这样的单元添加辅助功能支持 老问题了 但 iOS 已经内置了对这种辅助功能的支持 看看UIAccessibilityContainer

随机推荐