我们的一位Web开发人员使用以下html作为占位符来设计下拉列表。
<a href="" class="arrow"></a>
这被认为是锚标签有效吗?
由于没有href值,因此它在我们的某些链接检查器报告中显示为损坏。
我们的一位Web开发人员使用以下html作为占位符来设计下拉列表。
<a href="" class="arrow"></a>
这被认为是锚标签有效吗?
由于没有href值,因此它在我们的某些链接检查器报告中显示为损坏。
Answers:
尽管已经回答了该问题(tl; dr:是,一个空href
值是有效的),但是现有答案均未引用相关规范。
空字符串不能是URI。但是,该href
属性不仅将URI作为值,而且还将URI引用作为值。空字符串可以是URI引用。
HTML 4.01 使用 RFC 2396,在第4.2节中进行了说明。相同文档参考(加粗强调):
不包含URI的URI引用是对当前文档的引用。换句话说,文档中的空URI引用被解释为对该文档开头的引用,而仅包含片段标识符的引用为对该文档的已标识片段的引用。
RFC 2396被RFC 3986(当前是IETF的URI标准)淘汰了,该本质上是相同的。
HTML5 使用(已被空格包围的有效URL → 有效URL)W3C的URL规范,已终止。应该改用WHATWG的URL标准(请参阅最后一节)。
HTML 5.1 使用(有效的URL可能被空格包围 → 有效的URL)WHATWG的URL标准(请参阅下一节)。
WHATWG的HTML 使用了WHATWG的URL标准中有效URL字符串的定义(有效URL可能被空格包围),在该标准中,WHATWG可以说它可以是带有片段的相对URL字符串,至少必须是一个相对URL字符串,它可以是一个路径相对路径较少的URL字符串,它可以是一个路径路径相对URL的字符串,其开头不是以方案字符串开头,后跟,其定义为(粗体强调我的意思)::
相对路径URL字符串必须是零个或多个URL路径段字符串,并以U + 002F(/)彼此分隔,并且不能以U + 002F(/)开头。
是有效的。
但是,标准做法是使用href="#"
或有时使用href="javascript:;"
。
href="#"
,焦点将移至IE中的页面顶部,因此我认为href="javascript:;"
效果更好
正如其他人所说,这是有效的。
每种方法都有一些缺点:
href="#"
在浏览器历史记录中添加了一个额外的条目(例如,在后退按钮时很烦人)。
href=""
重新加载页面
href="javascript:;"
似乎没有任何问题(除了看起来凌乱和毫无意义)-任何人都知道吗?
尽管完全不包含href的HTML可能是完全有效的HTML,尤其是使用onclick处理程序时,但仍需要考虑以下几点:如果没有设置tabindex值,它将不会成为键盘焦点。此外,这将使使用Internet Explorer的屏幕阅读器软件无法访问,因为IE会通过可访问性界面报告,任何没有href属性的锚点元素都不可聚焦,而不管是否已设置tabindex。
因此,虽然以下内容可能完全有效:
<a class="arrow">Link content</a>
最好显式添加一个null效果的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>
href
将使可访问性界面混乱。
href
值设置为相对/绝对路径以外的任何值都会导致屏幕阅读器出现问题。避免将井号/井号用作解决此问题的方法,因为这并不意味着这样做。屏幕阅读器可能会(当前VoiceOver确实)宣布您的链接为片段标识符(链接到当前页面中的某个位置),并且从标准的角度来看也有效。看到w3.org/2001/tag/2011/01/HashInURI-20110115#NakedHash
虽然W3的验证程序可能不会抱怨href
属性为空,但当前的HTML5工作草案指定:
和元素
href
上的属性必须具有一个值,该值是可能被空格包围的有效URL。a
area
一个有效的URL是与相符的网址URL标准。现在,URL Standard有点让人困惑,但是没有地方说明URL可以是一个空字符串。
...这意味着空字符串不是有效的网址。
但是,HTML5工作草案继续指出:
注:在
href
对属性a
和area
不需要的元素 ; 当这些元素没有href
属性时,它们将不创建超链接。
这意味着我们可以简单地完全省略该href
属性:
<a class="arrow"></a>
如果您的目的是使这些href
-less a
元素仍然需要键盘字符,则必须遵循分配a role
和的常规路线,tabindex
以及常规的click / keydown处理程序:
<a class="arrow" role="button" tab-index="0"></a>
href
它就不会成为超链接,这会使onclick
键盘用户无法使用该功能。