将 tabindex="-1" 添加到当前菜单项是一种良好的可访问性做法吗?
Is adding tabindex="-1" to current menu item a good accessibility practice?
这是一个基本的导航设置,使用 JavaScript 添加 "current"
class 到基于当前页面 url 的导航 link .
为了帮助筛选 reader 用户,脚本还在当前 link 项上添加了 aria-current="page"
。
为了进一步提高可访问性,我将 tabindex="-1"
添加到当前的 link 项目(参见脚本的最后一行)。如果用户通过选项卡浏览菜单,他们将跳过当前 link.
以这种方式使用 tabindex
对筛选 reader 有用吗,或者更一般地说,是一种可访问性增强?
JS
window.addEventListener("DOMContentLoaded", () => {
let url_pathname = window.location.pathname
const link = document.querySelectorAll(".link")
link.forEach(linkCurrentItem => {
/*
A bit repetitious, but I wanted home page link to be just '/'
in the html.
If you have '/index.html' in the html then you can comment out
the first if statement and edit the second like so:
if (url_pathname === linkCurrentItem.getAttribute("href")) {
...
}
*/
if (url_pathname === linkCurrentItem.getAttribute("href", "/")) {
linkCurrentItem.classList.add("current")
}
if (
url_pathname === linkCurrentItem.getAttribute("href") &&
url_pathname !== linkCurrentItem.getAttribute("href", "/")
) {
linkCurrentItem.classList.add("current")
}
/* For screen readers */
if (url_pathname === linkCurrentItem.getAttribute("href")) {
linkCurrentItem.setAttribute("aria-current", "page")
// IS ADDING tabindex="-1" A GOOD IDEA?
linkCurrentItem.setAttribute("tabindex", "-1")
}
})
})
CSS
.link,
.link:visited {
color: blue;
text-decoration: none;
font-weight: 400;
font-size: 100%;
}
.current,
.current:visited {
color: black;
font-weight: 900;
font-size: 125%;
cursor: default;
}
HTML
<nav aria-label="main menu">
<ul>
<li><a class="link" href="/">Home</a></li>
<li><a class="link" href="/projects.html">Projects</a></li>
<li><a class="link" href="/blog.html">Blog</a></li>
<li><a class="link" href="/about.html">About</a></li>
<li><a class="link" href="/contact.html">Contact</a></li>
</ul>
</nav>
我不经常带着意见回答,但不幸的是,没有关于如何作为 WCAG 等的一部分进行此操作的指导。
所以我只会回答这是否会增强可访问性。
Is using tabindex in this way useful to screen readers, or more generally, an accessibility enhancement?
在很多情况下这都不会提高可访问性。您已经添加了 aria-current
以表明这是当前页面,因此您已经在此处做了最好的事情。
负面影响
但是,从焦点顺序中删除页面 link 可能会让使用辅助技术的人感到困惑,他们在您的网站上已经形成了肌肉记忆。
假设我想进入“关于”页面。如果我经常访问,那么我知道从导航部分的开始是 4 个制表位。但是,如果我在“项目”页面上并按了 4 次 Tab 键,我最终会进入“联系人”页面,因为您已从 Tab 键顺序中删除了项目页面。
或者,如果屏幕 reader 用户确实决定使用 Tab 键进行导航(不常见但并非闻所未闻),那么他们将永远听不到您的当前页面导航中的公告,尽管添加了正确的 WAI-ARIA 属性来识别它。
虽然它们只是次要考虑因素,但不会导致网站无法访问。
增强辅助功能
所以我想唯一的另一个问题是它是否具有任何可访问性优势?
据我所知没有。
我想它可以在页面上保存一个制表位,所以对于重复访问者来说可能是一种稍微快一些的体验......但这真的很费力!
结论
我认为答案是不这样做。您在 JavaScript 中犯错并意外使 link 无法聚焦的可能性很高,如果您的 JS 延迟或中断,那么 Tab 键顺序将不一致等。
因为它并没有真正增加任何东西,但可能可能降低某些人的可访问性(尽管是边缘情况)我会说不要这样做。
这是一个基本的导航设置,使用 JavaScript 添加 "current"
class 到基于当前页面 url 的导航 link .
为了帮助筛选 reader 用户,脚本还在当前 link 项上添加了 aria-current="page"
。
为了进一步提高可访问性,我将 tabindex="-1"
添加到当前的 link 项目(参见脚本的最后一行)。如果用户通过选项卡浏览菜单,他们将跳过当前 link.
以这种方式使用 tabindex
对筛选 reader 有用吗,或者更一般地说,是一种可访问性增强?
JS
window.addEventListener("DOMContentLoaded", () => {
let url_pathname = window.location.pathname
const link = document.querySelectorAll(".link")
link.forEach(linkCurrentItem => {
/*
A bit repetitious, but I wanted home page link to be just '/'
in the html.
If you have '/index.html' in the html then you can comment out
the first if statement and edit the second like so:
if (url_pathname === linkCurrentItem.getAttribute("href")) {
...
}
*/
if (url_pathname === linkCurrentItem.getAttribute("href", "/")) {
linkCurrentItem.classList.add("current")
}
if (
url_pathname === linkCurrentItem.getAttribute("href") &&
url_pathname !== linkCurrentItem.getAttribute("href", "/")
) {
linkCurrentItem.classList.add("current")
}
/* For screen readers */
if (url_pathname === linkCurrentItem.getAttribute("href")) {
linkCurrentItem.setAttribute("aria-current", "page")
// IS ADDING tabindex="-1" A GOOD IDEA?
linkCurrentItem.setAttribute("tabindex", "-1")
}
})
})
CSS
.link,
.link:visited {
color: blue;
text-decoration: none;
font-weight: 400;
font-size: 100%;
}
.current,
.current:visited {
color: black;
font-weight: 900;
font-size: 125%;
cursor: default;
}
HTML
<nav aria-label="main menu">
<ul>
<li><a class="link" href="/">Home</a></li>
<li><a class="link" href="/projects.html">Projects</a></li>
<li><a class="link" href="/blog.html">Blog</a></li>
<li><a class="link" href="/about.html">About</a></li>
<li><a class="link" href="/contact.html">Contact</a></li>
</ul>
</nav>
我不经常带着意见回答,但不幸的是,没有关于如何作为 WCAG 等的一部分进行此操作的指导。
所以我只会回答这是否会增强可访问性。
Is using tabindex in this way useful to screen readers, or more generally, an accessibility enhancement?
在很多情况下这都不会提高可访问性。您已经添加了 aria-current
以表明这是当前页面,因此您已经在此处做了最好的事情。
负面影响
但是,从焦点顺序中删除页面 link 可能会让使用辅助技术的人感到困惑,他们在您的网站上已经形成了肌肉记忆。
假设我想进入“关于”页面。如果我经常访问,那么我知道从导航部分的开始是 4 个制表位。但是,如果我在“项目”页面上并按了 4 次 Tab 键,我最终会进入“联系人”页面,因为您已从 Tab 键顺序中删除了项目页面。
或者,如果屏幕 reader 用户确实决定使用 Tab 键进行导航(不常见但并非闻所未闻),那么他们将永远听不到您的当前页面导航中的公告,尽管添加了正确的 WAI-ARIA 属性来识别它。
虽然它们只是次要考虑因素,但不会导致网站无法访问。
增强辅助功能
所以我想唯一的另一个问题是它是否具有任何可访问性优势?
据我所知没有。
我想它可以在页面上保存一个制表位,所以对于重复访问者来说可能是一种稍微快一些的体验......但这真的很费力!
结论
我认为答案是不这样做。您在 JavaScript 中犯错并意外使 link 无法聚焦的可能性很高,如果您的 JS 延迟或中断,那么 Tab 键顺序将不一致等。
因为它并没有真正增加任何东西,但可能可能降低某些人的可访问性(尽管是边缘情况)我会说不要这样做。