如果有评论,请忽略html,body,head标签

时间:2014-07-02 18:29:17

标签: html5

我一直在阅读W3C草案http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element,并说:

  

如果元素为空,或者body元素中的第一个元素不是空格字符或注释,则可以省略body元素的开始标记,除非body元素中的第一个元素是元,链接,脚本,样式或模板元素   如果body元素后面没有注释,则可以省略body元素的结束标记。

首先,我必须承认我已经使用Google搜索,但我无法完全理解这句话,我会分析我的看法:

你可以省略标签WHEN:它是空的,第一件事不是空格字符或注释。那么除外?那么这也意味着什么时候不是metalinkscriptstyletemplate?或者它是好的,如果它是那些标签之一?我有点不明白除了这里的意思是什么,这就是为什么我进入第二步:试图在验证中出现错误。

根据关于headbodyhtml的W3C草案,经过验证的最小页面为:

<!DOCTYPE html>
<title>Title</title>

但如果我在<title>后根据Chrome自动填充<head>添加了评论,该评论仍会验证该页面。

所以现在我想知道,在我多次尝试之后,由于浏览器的假设,是否无法在省略标签的情况下获得未经验证的页面?

我知道想知道这些东西可能毫无用处,因为我不会遗漏标签,但我只是想知道除了手段之外的东西(仅出现在body省略的描述中,因为在headhtml中没有说明。然后我想知道由于自动假设而忽略标签我是否无法获得未经验证的页面。

1 个答案:

答案 0 :(得分:1)

就是这样。注释节点可以作为html元素的直接子元素或head元素的直接子元素放在body元素内部或其外部。一切都有效。

所以假设你想要评论作为body元素的第一个孩子。如果您包含body开始标记,则可以在此之后立即编写注释,并且一切都很好。

但是如果省略body开始标记,那么如何让注释成为body元素的第一个子元素?您无法在标记中执行此操作,因为注释将作为html元素或head元素的直接子元素进入DOM。因此,在这种情况下,您不能省略body开始标记。

所以这不是有效性的问题。您的加价无论哪种方式都有效。只是你无法实现你想要的DOM结构。

其他例外是​​类似的。

另一种看待它的方式:网络作者考虑在HTML标记中编写网页并期望将其解析为DOM是正常的。在这里,描述实际上是相反的过程,从DOM开始并将其序列化为HTML标记。现在假设您正在编写序列化程序。序列化程序遇到一个body元素,它想确定它是否可以省略body start标记。所以看着第一个孩子。如果它是一个元元素,一个链接元素,一个脚本元素等,它知道它必须写出body标签,因为如果它没有,当重新解析HTML标记时,该元素将是作为头元素的子元素添加,而不是它开始的元素元素。这意味着诸如body meta之类的CSS选择器可能会停止匹配,并且在序列化/解析周期之前,当它们在序列化/解析周期之前执行时,正在搜索body内部元素的JavaScript将不再找到该元素。