代码之家  ›  专栏  ›  技术社区  ›  Henrik Paul

我应该用“name”或“id”制作HTML锚吗?

  •  730
  • Henrik Paul  · 技术社区  · 17 年前

    http://example.com/#foo “方法,一个人应该使用吗

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

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

    它们都起作用,但它们是平等的,还是有语义上的差异?

    14 回复  |  直到 8 年前
        1
  •  645
  •   Dan Rosenstark    9 年前

    根据HTML5规范, 5.9.8 Navigating to a fragment identifier

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

    1. 解析URL,并让fragid作为<碎片>URL的组件。
    2. 如果fragid是空字符串,则文档的指示部分是文档的顶部。
    3. 如果DOM中有一个ID完全等于fragid的元素,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。
    4. 如果有 元素,该元素的名称属性的值正好等于fragid,则树顺序中的第一个此类元素是文档的指示部分;在这里停止算法。

    因此,它将寻找 id="foo" ,然后将按照 name="foo"

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

        2
  •  191
  •   hsivonen    17 年前

    <h1><a name="foo"/>Foo Title</h1> 在任何风格的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中不起作用的其他功能。

        3
  •  54
  •   Zano Turnkey    7 年前

    我必须说,如果你要链接到页面中的那个区域。。。例如page.html#foo和foo Title不是您应该使用的链接:

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

    如果你改为 <a> 围绕它的引用你的标题将受到 <a> 在您的站点中使用特定的CSS。这只是额外的标记,你不应该需要它。我强烈建议在标题上放置一个id,不仅它的格式更好,而且它允许您使用Javascript或CSS来处理该对象。

        4
  •  30
  •   Zoltán Morvai    13 年前

    Wikipedia大量使用此功能,如下所示:

    <a href="#History">[...]</a>
    <span class="mw-headline" id="History">History</span>
    

    维基百科是为每个人服务的,所以我觉得坚持使用这个表单是安全的。

    指定主持人-我的投票是为了避免:

    • “名称和ID在同一名称空间中…”-两个具有相同名称空间的属性简直是疯了。我们就说已经弃用了。
    • “锚定没有href atribute的元素”-再一次,元素的性质(是否超链接)是通过有atribute来定义的?!双重疯狂。常识告诉我们要完全避免。
    • Netscape 4可能不支持id功能,但未知属性不会造成任何问题。这就是我所谓的兼容性。
        5
  •  15
  •   Andrew Marsh    17 年前
    <h1 id="foo">Foo Title</h1>
    

        6
  •  14
  •   mikemaccana    11 年前

    请注意JavaScript用户: .

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

    window.foo
    

    window.foo 将是 HTMLElement 对于 h1

    除非您可以保证在中使用的所有值 id name

    <h1 name="foo">Foo Title</h1>
    
        7
  •  9
  •   erickson    17 年前

    没有语义上的区别;标准的趋势是使用 id 而不是 name . 然而,有一些差异可能导致人们更倾向于 在某些情况下。HTML4.01规范提供了 the following hints :

    身份证件 名称 身份证件 或 对于锚定名称:

    • 一些较旧的用户代理不支持使用id属性创建的锚。
    • name属性允许更丰富的锚定名称(带有实体)。
        8
  •  9
  •   Joannes Vermorel Jonathan McIntire    11 年前

    ID方法在较旧的浏览器上不起作用,锚定名称方法在较新的HTML版本中将被弃用。。。我要带身份证去。

        9
  •  4
  •   JustinCB    8 年前

    在HTML5中 id="" name="" 属性 <a>
    <a name="foo" id="foo"></a><h1>Foo Title</h1>
    因为支持 id=“”

    确保 name=“” 和 id=“” 属性 < 元素是相同的。

        10
  •  3
  •   maximus    14 年前

    我有一个网页,由许多垂直堆叠的div容器组成,格式相同,只是序列号不同。我想在每个div的顶部隐藏名称anchor,因此最经济的解决方案是将anchor作为id包含在开始的div标记中,即,

    <div id="[serial number]" class="topic_wrapper">
    
        11
  •  2
  •   Cerebrus    17 年前

    第二个示例为相关元素分配一个唯一的ID。然后可以使用DHTML操纵或访问该元素。

    另一方面,第一个设置文档中的命名位置,类似于书签。附在“锚”上,它有着完美的意义。

        12
  •  2
  •   jerseyboy    14 年前

    例如,可以使用空的span或div,但这种用法看起来和闻起来都会退化。

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

        13
  •  1
  •   Umesh Bagalur    13 年前

    对旧浏览器使用name属性,对新浏览器使用id属性如何。将使用这两个选项,默认情况下将实现回退方法!!!

        14
  •  0
  •   Morfidon    5 年前

    现在不是关于支持,因为在2021年谁会关心比IE6更老的浏览器呢?

    请注意,Stackoverflow仍在使用锚点和'name'属性,而不是'name'属性。

    因为你:

    #sample
    {
      color: red; 
    }
    <div id="postNr4245 sample"> Sample text </div>  <!-- coloring doesn't work -->
    
    <a href="#postNr4245">Jump to Post</a> <!-- jumping doesn't work -->

    好的,你可以说你可以用“class”来做类似的事情。

    这是真的 但是

    为什么?

    因为如果使用CSS选择器#idName,web浏览器会找到该元素 不会

    如果您使用.class,它需要查找DOM的每个位置,因为web浏览器不知道您是否使用过.class一次或多次。

    1. 身份证件 '如果要在CSS中设置样式或使用JS对其进行解析,请使用number。但是,您可以启动' 名称 '带数字的值。
        15
  •  -3
  •   GEOCHET S.Lott    17 年前

    正如在评论中所说,你总是可以用这两种方法来对冲你的赌注。