空href是否有效?

我们的一个Web开发人员使用下面的html作为占位符来设置下拉列表的样式。

<a href="" class="arrow"></a> 

这被认为是有效的吗? 由于没有href值,所以在我们的一些链接检查器报告中显示为中断。

尽pipe这个问题已经得到了解答( tl; dr:是,空href值是有效的),但是现有的答案都没有引用相关的规范。

一个空string不能是一个URI。 但是, href属性不仅将URI作为值,还包含URI引用。 一个空string可能是一个URI引用。

HTML 4.01

HTML 4.01 使用 RFC 2396 ,它在4.2节中说过。 同一文件的参考资料 (大胆强调我的):

不包含URI的URI引用是对当前文档的引用。 换句话说, 文档中的空白URI引用被解释为对该文档开始的引用,并且仅包含片段标识符的引用是对该文档的标识片段的引用。

RFC 2396被RFC 3986 (现在是IETF的URI标准 )所废弃, 基本上是这样说的 。

HTML5

HTML5 使用 ( 有效的URL可能被空格包围有效的URLW3C的URL规范已经停用。 应该使用WHATWG的URL标准 (参见上一节)。

HTML 5.1

HTML 5.1 使用 ( 有效的URL可能被空格包围有效的URLWHATWG的URL标准 (见下一节)。

WHATWG HTML

WHATWG的HTML 使用的 URL有效URL可能被空格包围WHATWG URL标准有效URLstring的定义,它表示它可以是一个相对URL分片string ,它必须至less是一个相对URLstring ,它可以是一个path-relative-scheme-less-URLstring ,它是一个path相对URLstring ,它不以schemestring开头,后面跟着: ,其定义如下(大胆强调):

path相对URLstring必须是零个或多个URLpath段string,它们由U + 002F(/)彼此分隔,而不是以U + 002F(/)开头。

这是有效的。

但是,标准做法是使用href="#"或有时href="javascript:;"

正如其他人所说,这是有效的。

每种方法都有一些缺点:

href="#"为浏览器历史logging添加了一个额外的条目(例如,后退button时很烦人)。

href=""重新加载页面

href="javascript:;" 似乎没有任何问题(除了看起来杂乱无章) – 任何人都知道吗?

虽然它可能是完全有效的HTML不包含href,特别是与onclick处理程序,有一些事情要考虑:没有设置tabindex值不会键盘焦点。 此外,使用Internet Explorer的屏幕阅读器软件将无法访问,因为IE将通过可访问性界面报告任何不带href属性的锚点元素为不可聚焦的,而不pipetabindex是否已设置。

所以虽然以下可能是完全有效的:

 <a class="arrow">Link content</a> 

显式添加一个null-effect href属性会好得多

 <a href="javascript:void(0);" class="arrow">Link content</a> 

对于所有用户的全面支持,如果您使用带有CSS的类来渲染图像,则还应该包含一些文本内容,例如title属性,以提供正在进行的文字说明。

 <a href="javascript:void(0);" class="arrow" title="Go to linked content">Link content</a> 

目前的HTML5草案也允许完全忽略href属性。

如果a元素没有href属性,那么该元素代表一个链接可能被放置的位置的占位符(如果它是相关的)。

回答你的问题:是的,这是有效的。

事实上,你可以把它留空(W3validation员不抱怨)。

进一步理解:忽略=“”。 这样做的好处是链接不被当作当前页面的锚点。

 <a href>sth</a> 

虽然W3的validation器可能不会抱怨空的href属性, 但是当前的HTML5工作草案指定了:

aarea元素上的href属性的值必须是可能被空格包围的有效URL

有效的URL是符合URL标准的URL 。 现在URL标准有点让人头疼,但是没有一个地方说URL可以是一个空string。

…这意味着一个空string不是一个有效的URL。

然而,HTML5工作草案继续指出:

注: aarea元素上的href属性不是必需的 ; 当这些元素没有href属性时,他们不会创build超链接。

这意味着我们可以完全省略href属性:

 <a class="arrow"></a> 

谨慎的一句话:

根据我的经验,忽略href属性会导致可访问性问题,因为键盘导航会忽略它,并且不会像href出现时那样给予焦点。 在tabindex中手动包含元素是一种解决方法。

这是有效的,但像UpTheCreek说,“每种方法都有一些缺点”

如果你通过一个标签调用ajax离开href =“”这样将保持页面重新加载和ajax代码将永远不会被称为…

刚刚得到这个想法将是很好的分享

尝试改为<a href="#" class="arrow"> 。 (注意尖锐的#字符)。