html - 如何修复“可聚焦元素的名称属性不能为空”
问题描述
我使用 UI 可访问性洞察力在 Windows 上测试我的反应应用程序。我得到很多“可聚焦元素的名称属性不能为空”和很多“可聚焦同级元素不能具有相同的名称和本地化控件类型”错误。我不知道如何解决这些错误,而且我在谷歌中找不到任何像样的东西。为了解决第一个问题,我尝试将name
otid
或aria-label
attr 添加到按钮,但没有任何改变。关于如何解决这个问题的任何想法?
未通过测试的按钮示例:
<button
className={css.button}
onClick={() => setIsTipOpen(!isTipOpen)}
>
<Icon type='Girl'/>
</button>
解决方案
屏幕阅读器需要能够向用户宣布某些内容。按钮中的图标的问题是无法以编程方式确定按钮文本。
解决此问题的一种方法是向aria-label
按钮元素添加一个。
另一种方法是视觉隐藏文本。这是不可见但仍可供屏幕阅读器访问的文本。
在下面的示例中,您将看到没有可见文本(因为它应该是内部的图标)但屏幕阅读器用户会听到“按钮,一个女孩”,只需确保按钮文本作为动作有意义(所以我假设这个按钮将是“性别女性”或其他东西)。
视觉隐藏文本更适合使用纯文本浏览器的人,按钮内的文本仍会显示(因为 CSS 在纯文本浏览器中被忽略)并且支持是 100% 一直到 IE6(而aria-label
支持不是 100%)。
.visually-hidden {
border: 0;
padding: 0;
margin: 0;
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 - a 0 height clip, off to the bottom right of the visible 1px box */
clip: rect(1px, 1px, 1px, 1px); /*maybe deprecated but we need to support legacy browsers */
clip-path: inset(50%); /*modern browsers, clip-path works inwards from each corner*/
white-space: nowrap; /* added line to stop words getting smushed together (as they go onto seperate lines and some screen readers do not understand line feeds as a space */
}
.your-button-classes{
width: 100%;
height: 50px;
background-color: #333;
}
<button
class="your-button-classes"
onClick="someAction"
>
<Icon type='Girl'/>
<span class="visually-hidden">A girl</span>
</button>
推荐阅读
- php - 我在哪里放置 session_start 函数?
- c# - 如果字符串或整数的 getHashCode() 不能保证是唯一的,为什么要使用它?
- flutter - 如何将 readAsLines() 的返回分配给 Flutter 中的本地列表?
- tensorflow - 为什么我在深度学习(回归)中得到一个等间距的方形真实预测图?
- python - HTML Checkbox 只返回 None 作为我的 Django 视图的值
- wpf - 在 Canvas 中锚定/对齐 TextBlock
- ios - 获取结果控制器中没有单元格的空部分(标题视图)
- oracle - Oracle 动态 sql:使用撇号值更新列
- javascript - 如何使用 javascript-jquery 从数组值中删除空格?
- java - 从 Eclipse 到 IntelliJ - 如何将添加/删除功能替换为 JBoss 服务器?