协慌网

登录 贡献 社区

我应该使用'name' 或'id' 制作 HTML Anchor 吗?

当想要使用 “ http://example.com/#foo ” 方法引用网页的某些部分时,应该使用

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

要么

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

他们都工作,但他们是平等的,还是他们有语义差异?

答案

根据 HTML 5 规范, 5.9.8 导航到片段标识符

对于 HTML 文档(以及 text / html MIME 类型),必须遵循以下处理模型以确定文档的指示部分。

  1. 解析 URL,并将 fragid 作为 URL 的 组件。
  2. 如果 fragid 是空字符串,则文档的指示部分是文档的顶部。
  3. 如果 DOM 中的元素具有完全等于 fragid 的 ID,则树顺序中的第一个这样的元素是文档的指示部分; 在这里停止算法。
  4. 如果 DOM 中有一个元素,其 name 属性的值与 fragid 完全相等,那么树顺序中的第一个元素就是文档的指示部分; 在这里停止算法。
  5. 否则,文档中没有指明的部分。

所以,它将寻找id="foo" ,然后将跟随name="foo"

编辑:正如 @hsivonen 所指出的,在 HTML5 中, a元素没有 name 属性。但是,上述规则仍适用于其他命名元素。

你不应该使用<h1><a name="foo"/>Foo Title</h1>在 HTML 中的任何味道担任text/html ,因为 XML 空元素语法不支持text/html 。但是, <h1><a name="foo">Foo Title</a></h1>在 HTML4 中没问题。它在当前草拟的 HTML5 中无效。

HTML4 和 HTML5 中的<h1 id="foo">Foo Title</h1>都可以。这在 Netscape 4 中不起作用,但你可能会使用其他一些在 Netscape 4 中不起作用的功能。

我不得不说你是否要链接到页面中的那个区域... 比如 page.html#foo 和 Foo Title 不是你应该使用的链接:

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

如果您改为在其周围添加<a>引用,那么您的标题将受到您网站中<a>特定 CSS 的影响。它只是额外的标记,你不应该需要它。我强烈建议在标题上放置一个 id,它不仅形成得更好,而且它允许你在 Javascript 或 CSS 中寻址该对象。