gau*_*430 3 html javascript accessibility hyperlink reactjs
我有一个 React SPA,其中有一些链接可以导航到其他页面或同一页面上的其他位置,这些导航要么以编程方式决定,要么依赖于 javascript 来转到同一页面上的另一个位置。
href当链接显示时,我可能不知道该链接,因此我在单击处理程序中使用href="#"和渲染它event.preventDefault(),然后运行逻辑来决定链接应导航到哪里。对我来说,从语义上讲,它仍然应该是一个链接,而不是一个按钮,因为它将用户导航到另一个页面或同一页面上的另一个位置。但是,考虑到可访问性,屏幕阅读器没有足够的信息来理解链接目的地,并且无法将其告知用户。我想这不太好吧?
如何确保使用符合语义且易于访问?我应该使用按钮吗?或者我应该在 aria-label 链接中添加一些其他信息?或者对于可访问性来说,使用 href="#" 的链接实际上可以吗?
如果 URL 发生变化(导航),则应使用链接,而其他所有内容均应使用按钮。<a href="#"这不是一个好的做法,但对于 SPA 来说,如果您的链接文本准确且详细,应该没问题。避免平滑滚动或给人们一种关闭它的方法,因为它可能会让人迷失方向。
我在这里给出了关于SPA 与SPA 的相当广泛的答案<a><button>,所以我希望这足以回答一般用例在什么场景中使用哪一个。
关于#URL 中的 ,因为您事先不知道 URL。#如果您以未知 URL 的方式启动它,但一旦href您知道要将人们路由到哪里,就更新它,效果会好得多。
这是出于我在链接的有关保证的答案中讨论的原因,即知道链接会将我带到哪里。
显然,如果您无法做到这一点,请确保链接文本具有很强的描述性,以便我可以确信我会去正确的地方。
关于滚动到页面的不同部分,正如您所说,假设您使用 更新 url,它仍然是一个链接#section-name。您应该这样做,但如果您的应用程序路由器无法处理 URL 片段,那么我根本不会更新 URL 并将其更改为按钮。
在此阶段,我将在按钮内使用一些视觉上隐藏的文本来解释它滚动到当前页面上的某个部分。
下面的例子说明了这一点。请使用下面的 CSS 类来直观地隐藏文本,因为它比 bootstrap sr-only 类具有更好的兼容性,如我给出的这个答案中所述。
.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 */
}Run Code Online (Sandbox Code Playgroud)
<button><span class="visually-hidden">Go To </span>Section name<span class="visually-hidden"> on this page</span></button>Run Code Online (Sandbox Code Playgroud)
最后我要提醒您注意平滑滚动的使用。如果您使用此功能,请确保有办法将其关闭,因为它可能会分散患有运动障碍或焦虑症的人的注意力或迷失方向。
实现此目的的一种方法是使用 CSS 媒体查询prefers-reduced-motion。
在没有看到每个场景的情况下,很难给出 100% 明确的答案,如果您可以尝试遵循同一页面操作的按钮的标准导航模式、用于导航到同一页面的部分的带有 url 片段的链接以及指向其他页面的链接,甚至如果这些是通过 AJAX 处理并且仅部分重新加载。
显然这就是目标,我知道对于某些路由解决方案来说,这并不总是可能的,在这种情况下,请使用您的最佳判断并使用屏幕阅读器进行测试,因为屏幕阅读器用户最有可能会遇到结构不良的导航系统。温泉。
最后一个提示- 如果您确实在 SPA 中更改页面,请<h1>以编程方式使下一页上的页面可聚焦,tabindex="-1"并在页面加载后聚焦该页面。这是一种很好的方法,可以让弱视或无视的用户知道 SPA 中的导航是使用 AJAX 完成的。
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |