辅助功能:仅使用具有href =“#”的javascript链接

gaurav5430

我有一个React SPA,其中有一些链接可以导航到其他页面或同一页面上的其他位置,这些导航是通过编程方式确定的,或者取决于javascript才能到达同一页面上的另一个位置。

  • 我可能不知道的链接href显示的链接时,所以我使其href="#"event.preventDefault()单击处理程序,在这之后我跑决定在哪里的链接应该导航到的逻辑。
  • 在锚链接的情况下,我需要使用javascript滚动到该元素,因为在SPA路由器中,基于散列的锚链接可能无法工作,因为该锚元素可能尚不可用,并且我还需要平滑滚动。(在这种情况下,我可能仍然可以指定href,这样可以保持链接的可访问性,但可以使用javascript处理滚动)

对我来说,从语义上讲,它仍应是一个链接,而不是按钮,因为它将用户导航到另一个页面或同一页面上的另一个位置。但是,考虑到可访问性,屏幕阅读器没有足够的信息来理解链接目的地,也无法向用户宣布该链接目的地。我想那还好吗?

如何确保用法是语义上的以及可访问的?我应该改用按钮吗?还是应该在带有aria-label的链接中添加其他信息?还是实际上可以使用href =“#”链接进行辅助功能?

格雷厄姆·里奇

简短答案

如果URL更改(导航),则应使用链接来链接其他所有按钮。<a href="#"这不是一个好习惯,但对于SPA,如果您的链接文本准确且详细,则应该可以。避免平滑滚动或使人们将其关闭,因为它可能会迷失方向。

更长的答案

在这里SPA中的vs给出了相当广泛的答案<a><button>,因此我希望这足以回答在一般用例的哪种情况下使用哪种方案。

关于#URL中的,因为您事先不知道URL。如果您#以URL未知的方式启动它,那就更好了,但是href一旦知道您要把人路由到哪里,就更新它

这是出于我链接的关于保证答案中讨论的原因,即知道链接将带我到何处。

显然,如果您无法执行此操作,则请确保链接文本具有很好的描述性,以便使我确信自己将到达正确的位置。

在SPA中滚动

关于滚动到页面的不同部分,假设您使用来更新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 */
}
<button><span class="visually-hidden">Go To </span>Section name<span class="visually-hidden"> on this page</span></button>

快速介绍平滑滚动

最后,我会提醒您使用平滑滚动。如果使用此功能,请确保有一种方法可以将其关闭,因为它可能会使运动障碍或焦虑症患者分心或迷失方向。

一种实现方法是使用CSS媒体查询prefers-reduced-motion

最后的想法

如果看不到每种情况,很难给出100%的明确答案,如果您可以尝试遵循按钮的标准导航模式进行相同的页面操作,带有url片段的链接(用于导航到同一页面的各个部分)以及指向其他页面的链接,甚至如果这些是通过AJAX处理的,并且仅部分重载。

显然,这是我的目标,我知道,对于某些路由解决方案,这并非总是可能的,在这种情况下,请使用最佳判断并使用屏幕阅读器进行测试,因为屏幕阅读器用户很可能会遭受导航系统结构不良的困扰。温泉。

最后一个技巧-如果您确实要在SPA中更改页面,请使<h1>下一页上的内容以编程方式可聚焦,tabindex="-1"并在页面加载后将其聚焦。这是让几乎没有视力的用户知道使用AJAX在SPA中完成导航的一种好方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JavaScript的动态链接

来自分类Dev

具有验证功能的JavaScript链接生成器

来自分类Dev

硒点击带有JavaScript的链接href

来自分类Dev

document.links仅返回具有特定href的链接?

来自分类Dev

使用JavaScript从链接中删除href

来自分类Dev

使用JavaScript从链接中删除href

来自分类Dev

从gridview超链接调用具有多个参数的Javascript函数

来自分类Dev

单击具有onclick属性的JavaScript链接

来自分类Dev

Javascript动画有多个链接?

来自分类Dev

单击带有 javascript 的链接

来自分类Dev

在JavaScript中使用链接列表

来自分类Dev

使用JavaScript从网页检索链接

来自分类Dev

使用JavaScript代替超链接

来自分类Dev

使用JavaScript查找特定链接

来自分类Dev

使用javascript原型编辑链接

来自分类Dev

使用javascript更改目标链接

来自分类Dev

使用 javascript 编辑外部链接

来自分类Dev

href链接在进入链接之前执行javascript

来自分类Dev

在JavaScript中使用具有函数的对象

来自分类Dev

辅助功能和使用javascript

来自分类Dev

辅助功能和使用javascript

来自分类Dev

Javascript建立动态链接,但忽略现有链接

来自分类Dev

在php-javascript中禁用href链接

来自分类Dev

使用ghost.py单击链接到javascript的链接

来自分类Dev

使用javascript从链接列表中获取链接名称

来自分类Dev

使用ghost.py单击链接到javascript的链接

来自分类Dev

迭代对象数组并仅使用javascript阻止默认的锚href链接

来自分类Dev

迭代对象数组并仅使用javascript阻止默认的锚href链接

来自分类Dev

具有JavaScript功能的SEO和<a href="#"> ... </a>标签