<a>
代表锚点
如果在 <a>
元素上包含 [href]
属性,它就是一个指向某个位置的锚点,这意味着你可以跳转到一个新页面、当前页面的特定片段(因此称为片段标识符的 #
)或新页面的特定片段。
没有 [href]
属性的 <a>
元素以前通常会被分配一个 [name]
属性,该属性可用作片段标识符的目标。后来浏览器添加了支持链接到任何项的 [id]
属性,并且现在将其视为链接到文档片段的首选方法。
这对独立的 <a>
元素意味着什么?
一个带有
a[href]
属性的元素是一个链接(这就是为什么它们与
:link
在css中匹配的原因)。链接可以被点击。
如果没有[href]
属性的a
元素只是一个占位符,用于放置链接的位置, 不可点击,也不在页面的制表顺序中。
如果您想让您的链接可以通过键盘导航,这对无障碍性非常重要(
WAI-ARIA),您需要执行以下操作之一:
- 将元素更改为
<button type="button">
- 保留
[href]
属性
- 添加
[tabindex="0"]
,其中之一是[role="button"]
或[role="link"]
(可能还需要一些样式)
关于[role]
属性的更多信息可以在WAI-ARIA文档的角色模型章节中找到。
更改标记
如果您没有保留[href]
属性的理由,那么最好使用<button>
元素:
<button type="button">
^^^^^^^^^^^^^
[type]
属性用于将元素设为通用按钮,否则 <button>
将默认为 [type="submit"]
,这可能不是理想的选择,因为它可能会触发表单提交。
如果您无法使用 <button>
(通常在内部标记必须包含 <div>
时会出现),则可以使用以下方法模拟 <button>
:
<div role="button" tabindex="0">Some clickable text</div>
您需要监听
keypress
事件,并触发
click
事件以响应
Enter和
Space按键。
保留标记
如果您要保留<a>
元素及其[href]
属性,那么有许多选项可供选择。
真实链接
例如:
<a href="/some/location/for/users/without/js">
<a href="#document-fragment">
如果您需要为禁用JS的用户提供支持,您可以将他们重定向到一个页面,在该页面上执行等效功能而不使用JS。
此外,这也包括提供文档片段链接以链接到同一文档中的内容。例如,可切换区域可能会被标记为:
<a href="#more" class="toggleable">Read More</a>
<div id="more">Lorem ipsum dolor sit amet</div>
这样,使用JS可以折叠和展开区域,而没有JS的情况下,链接将带用户到页面上适当的内容。
无用的href
例如:
<a href="#">
<a href="javascript:void(0)">
<a href="about:blank">
如果你在JavaScript中在后台阻止默认行为,并且不支持禁用JS的用户,则可以使用“无用”的href值来保持链接在制表符顺序中,并自动启用 Enter 触发 click
事件。您应该添加[role="button"]
,因为语义上<a>
标签不再用作链接,而是用作按钮。
<a href="#" role="button">Some clickable text</a>
<button>
代替<a>
标签。它比你建议的简单的<span>
具有更多的语义价值。 - Daispan[role="button"]
在语义上与<button>
完全相同,并且更容易进行样式设计。 - zzzzBov