当人们想用“http://example.com/#foo“方法,应该使用

<h1><a name="foo"/>Foo Title</h1>

or

<h1 id="foo">Foo Title</h1>

它们都有效,但它们是相等的,还是有语义差异?


当前回答

只是对标记的观察HTML早期版本中的标记表单提供了一个锚点。HTML5中使用id属性的标记表单虽然基本上是等价的,但需要一个元素来标识,几乎所有这些元素通常都包含内容。

例如,可以使用空span或div,但这种用法看起来和味道都很糟糕。

一种想法是为此使用wbr元素。wbr有一个空的内容模型,并简单地声明换行是可能的;这仍然是对标记标记的一种略微不必要的使用,但比不必要的文档分割或空文本跨度要少得多。

其他回答

没有语义差异;标准的趋势是使用id而不是名称。然而,在某些情况下,有些差异可能会导致人们更喜欢名字。HTML 4.01规范提供了以下提示:

使用id或名称?作者在决定是否使用id或名称作为锚点名称时应考虑以下问题:

id属性可以不仅仅用作锚点名称(例如,样式表选择器、处理标识符等)。一些较旧的用户代理不支持使用id属性创建的锚点。name属性允许更丰富的锚点名称(带有实体)。

根据定义,整个“命名锚点”概念使用name属性。您应该坚持使用名称,但ID属性对于某些javascript情况可能很方便。

就像在评论中一样,你总是可以用两者来对冲你的赌注。

您不应该在任何类型的HTML中使用<h1><a name=“foo”/>foo-Title</h1>作为text/HTML,因为text/HTML不支持XML空元素语法。然而,<h1><a name=“foo”>foo Title</a></h1>在HTML4中是可以的。它在当前起草的HTML5中无效。

<h1 id=“foo”>foo Title</h1>在HTML4和HTML5中都可以。这在Netscape 4中不起作用,但您可能会使用其他十几个在Netscape 4上不起作用的功能。

<h1 id="foo">Foo Title</h1>

是应该使用的。除非你想要链接,否则不要使用锚点。

ID方法在较旧的浏览器上不起作用,锚定名称方法在较新的HTML版本中将被弃用。。。我会和id一起去。