有效使用<a>(锚标签)没有href属性?

我一直在使用Twitter Bootstrap来构建一个网站,它的许多功能依赖于<a>中包装的东西,即使它们只是要执行Javascript。我已经与Bootstrap的文档推荐的href="#"策略有问题,所以我试图找到一个不同的解决方案。

但随后我尝试完全删除href属性。我一直在使用<a class='bunch of classes' data-whatever='data'>,并有Javascript处理其余的。这很有效。

但我总觉得我不该这么做。对吧?我的意思是,技术上<a>应该是一个链接到某个东西,但我不完全确定为什么这是一个问题。真的是这样吗?

248928 次浏览

我想你可以在这里找到答案:没有href属性的锚标记安全吗?

另外,如果你想使用href进行无链接操作,你可以这样使用它:

<a href="javascript:void(0);">something</a>

<a>nchor元素只是一个指向或来自某些内容的锚。最初HTML规范允许命名锚(<a name="foo">)和链接锚(<a href="#foo">)。

命名锚格式不太常用,因为片段标识符现在用于指定[id]属性(尽管为了向后兼容,您仍然可以指定[name]属性)。没有__ABC3属性的<a>元素仍然有效

就语义和样式而言,<a>元素不是链接(:link),除非它有[href]属性。这样做的一个副作用是,没有[href]<a>元素默认情况下不会出现在选项卡顺序中。

真正的问题是<a>元素是否单独是<button>的适当表示。在语义层面上,linkbutton之间有明显的区别。

按钮是当点击时导致动作发生的东西。

链接是导致当前文档中的导航发生变化的按钮。在使用片段标识符(#foo)的情况下,发生的导航可以在文档中移动(#foo),或者在使用url的情况下移动到新文档(/bar)。

由于链接是一种特殊类型的按钮,它们的操作经常被重写以执行替代功能。从一致性的角度来看,继续使用锚作为按钮是可以的,尽管它在语义上不太准确。

如果你担心使用<a>元素(或<span><div>)作为按钮的语义和可访问性,你应该添加以下属性:

<a role="button" tabindex="0" ...>...</a>

按钮的作用告诉用户,特定的元素被视为按钮,覆盖了底层元素可能具有的任何语义。

对于<span><div>元素,你可能想为空间输入添加JavaScript键监听器来触发click事件。<a href><button>元素默认这样做,但非按钮元素不这样做。有时将click触发器绑定到不同的键更有意义。例如,web应用程序中的“帮助”按钮可能绑定到F1

使用不带href属性的锚标记。

如果a元素没有href属性,则该元素表示a 占位符,用于链接可能被放置的位置 是相关的,只包含元素的内容。

是的,你可以使用class和其他属性,但是你不能使用__ABC1, __ABC2, __ABC3, __ABC4和type

targetdownloadrelhreflangtype属性必须是 如果href属性不存在则省略

至于“我应该吗?”部分,请参阅第一个引用:“如果链接是相关的,可能会放在哪里”。所以我会问“如果我没有JavaScript,我会使用这个标记作为链接吗?”。如果答案是肯定的,那么是的,你应该使用<a>而不使用href。如果没有,那么我仍然会使用它,因为对我来说,效率比边缘情况语义更重要,但这只是我个人的观点。

此外,你应该为不同的行为样式 小心(例如,没有下划线,没有指针光标,没有:link)。

来源:W3C HTML5推荐标准

它是有效的。例如,你可以用它来显示情态动词(或响应data-toggledata-target属性的类似东西)。

喜欢的东西:

<a role="button" data-toggle="modal" data-target=".bs-example-modal-sm" aria-hidden="true"><i class="fa fa-phone"></i></a>

这里我使用了字体很棒的图标,它更适合作为a标记而不是button来显示模式。此外,设置role="button"会使指针更改为操作类型。没有hrefrole="button",光标指针不会改变。

文本。取代href =“# name" . .然后保存工作..