空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可能被空格包围 → 有效的URL ) W3C的URL规范已经停用。 应该使用WHATWG的URL标准 (参见上一节)。
HTML 5.1
HTML 5.1 使用 ( 有效的URL可能被空格包围 → 有效的URL ) WHATWG的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工作草案指定了:
a
和area
元素上的href
属性的值必须是可能被空格包围的有效URL 。
有效的URL是符合URL标准的URL 。 现在URL标准有点让人头疼,但是没有一个地方说URL可以是一个空string。
…这意味着一个空string不是一个有效的URL。
然而,HTML5工作草案继续指出:
注:
a
和area
元素上的href
属性不是必需的 ; 当这些元素没有href
属性时,他们不会创build超链接。
这意味着我们可以完全省略href
属性:
<a class="arrow"></a>
谨慎的一句话:
根据我的经验,忽略href
属性会导致可访问性问题,因为键盘导航会忽略它,并且不会像href出现时那样给予焦点。 在tabindex中手动包含元素是一种解决方法。
这是有效的,但像UpTheCreek说,“每种方法都有一些缺点”
如果你通过一个标签调用ajax离开href =“”这样将保持页面重新加载和ajax代码将永远不会被称为…
刚刚得到这个想法将是很好的分享
尝试改为<a href="#" class="arrow">
。 (注意尖锐的#
字符)。