我在使用NVDA屏幕阅读器时遇到了问题,它会将同一行上的所有元素作为一个块全部读出来。
例如,在下面的代码中:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
<style>
nav > ul > li {
list-style: none;
display:inline-block;
}
</style>
</head>
<body>
<h1>Title 1</h1>
<nav role="navigation">
<ul>
<li>
<a href="#">Link 1</a>
</li>
<li>
<a href="#">Link 2</a>
</li>
<li>
<a href="#">Link 3</a>
</li>
<li>
<a href="#">Link 4</a>
</li>
</ul>
</nav>
</body>
</html>
这将在一行中显示所有导航链接,视觉上是正确的,但是NVDA在浏览模式下,使用箭头键滚动时会连续读取所有链接。用户无法在每个单独的链接之间移动,因此无法停留在一个链接并选择它。
同样的情况也会发生在段落中间的链接上:
<p>NVDA will not stop on <a href="#">This link</a> so a user can select it.</a>
在我的导航示例中,更改样式,使每个链接都在单独的一行上:
nav > ul > li {
list-style: none;
display:block;
}
修复了NVDA上的问题 - 用户可以在链接之间移动 - 但是外观是错误的。
我发现使其在视觉上正确并强制NVDA单独读取它的唯一方法是将每个锚点显示为列表项内的块:
nav > ul > li {
list-style: none;
display:inline-block;
}
nav > ul > li > a {
display: block;
}
但这种方法并不完美,不能在每种情况下都解决问题(例如,在段落内就无法使用此方法)。
有没有属性可以添加,或者其他更好的方法可以使NVDA分别读取每个元素呢?
这个问题在所有浏览器中都存在。