当人们想用“http://example.com/#foo“方法,应该使用
<h1><a name="foo"/>Foo Title</h1>
or
<h1 id="foo">Foo Title</h1>
它们都有效,但它们是相等的,还是有语义差异?
当人们想用“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有一个空的内容模型,并简单地声明换行是可能的;这仍然是对标记标记的一种略微不必要的使用,但比不必要的文档分割或空文本跨度要少得多。
其他回答
根据HTML 5规范5.9.8导航到片段标识符:
对于HTML文档(以及text/HTML MIME类型),必须遵循以下处理模型来确定文档的指定部分是什么。解析URL,让fragid成为URL的<fragment>组件。如果fragid是空字符串,那么文档的指示部分就是文档的顶部。如果DOM中有一个元素的ID正好等于fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。如果DOM中有一个元素的name属性的值正好等于fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。否则,文件中没有指明的部分。
因此,它将查找id=“foo”,然后将跟随name=“foo“
编辑:正如@hsiwonen所指出的,在HTML5中,a元素没有name属性。然而,上述规则仍然适用于其他命名元素。
旧浏览器使用name属性,新浏览器使用id属性怎么样。将使用这两个选项,默认情况下将实现回退方法!!!
根据定义,整个“命名锚点”概念使用name属性。您应该坚持使用名称,但ID属性对于某些javascript情况可能很方便。
就像在评论中一样,你总是可以用两者来对冲你的赌注。
维基百科大量使用这一功能,如下所示:
<a href="#History">[...]</a>
<span class="mw-headline" id="History">History</span>
维基百科对每个人都有效,所以我觉得坚持使用这个表单是安全的。
另外,不要忘记,您不仅可以将其用于span,还可以用于div甚至表单元格,然后您就可以访问元素上的:target伪类。只需注意不要改变宽度,如粗体文本,因为这会移动内容,这令人不安。
命名主播-我的投票是避免:
“名称和ID在同一个命名空间中……”-两个具有相同命名空间的属性简直太疯狂了。我们就说已经弃用了。“锚定没有href atribute的元素”-同样,元素的性质(超链接与否)是通过有atribute来定义的?!双重疯狂。常识说要完全避免。如果在没有伪类的情况下对锚点进行样式设置,则样式设置将应用于每个锚点。在CSS3中,您可以使用属性选择器(或每个伪类的相同样式)来解决这个问题,但这仍然是一个解决方法。这通常不会出现,因为您为每个伪类选择颜色,并且默认情况下,下划线只有删除才有意义,这使其与其他文本相同。但如果你决定将链接设置为粗体,这会带来麻烦。网景4可能不支持id功能,但一个未知的属性不会引起任何问题。这就是我所说的兼容性。
第二个示例为所讨论的元素分配一个唯一的ID。然后可以使用DHTML操纵或访问该元素。
另一方面,第一个方法在文档中设置一个命名位置,类似于书签。连接到一个“锚”,这是完全合理的。