标签遗漏的HTML5规范(http://www.w3.org/TR/html51/syntax.html#syntax-tag-omission)从以下两个语句开始(强调我的):
那些陈述的内容类似,但不一样,我想知道某人是否可以澄清他们的意思。
以下情况似乎毫不含糊 - 您无法移除开始或关闭代码:
<html><!-- start --> ... </html><!-- end -->
但是当空白被引入混合时呢?在下列情况下,html
的开始标记是否可以消除?
<html>
<!-- comment after whitespace -->
...
在类似情况下是否可以删除结束标记?
...
</html>
<!-- comment after whitespace -->
其他一些规则特别提到空白字符,这使我认为应该考虑到这些字符。大多数规则都说&#34; ......紧随其后......&#34;这与列出的第一个要点不同。
答案 0 :(得分:2)
在HTML中,标签之间的空格无关紧要。 <html> <head>
和<html><head>
与浏览器相同。在内容中(例如在span / p标签内的单词之间),它由浏览器呈现,但是当您想在元素之间使用空格(作为设计资源)时,您应该使用&amp; nbsp。
所以,正如我所见,紧接着并不意味着“下一个字符”,而是“结束标记所在地之后的第一件事,无论之间有多少空格它们。
然后,在两种情况下删除html标签会使html无效,因为无论地方</html>
应该是多少空格和评论。
编辑:我认为他们试图通过使用另一个词来表达同样的事情,避免重复,但最终却被混淆了;
答案 1 :(得分:2)
这里的重要因素是内部的第一件事和后面的正在谈论节点即DOM,而不是标签或其他标记,因此它所做的区别在于节点是否是子节点(内部的第一个内容)或后面的兄弟节点(紧随其后)。
就空间而言:
如果内部的第一件事,可以省略html元素的开始标记 html元素不是评论。
html元素中的第一件事不能是空格字符,因为在解析器算法的那一点上,空格字符标记被丢弃而不会添加到DOM中。
如果html元素不是,则可以省略html元素的结束标记 紧接着发表评论。
空格字符,无论它们是出现在</html>
标记之前还是之后,最终都在html元素内部(事实上,也在body元素内),因此注释将紧跟在html之后元素,无论标记之间是否有空格。
答案 2 :(得分:1)
关于标记遗漏的规则有些误导,因为大多数情况下,当标记可以省略时,它们实际上并没有说,而是在省略它们时应该如何解释它们。例如,以下文件:
<!DOCTYPE html><!-- A comment --><title>A title</title>
这是一个有效的HTML5:您可以自己通过the W3C validator运行它。但是the tag omission rules清楚地说明了
如果html
元素中的第一个内容不是注释,则可以省略[a] n
html
元素的开始标记。
我们如何协调这一点?答案是这些是消除歧义的规则。因为html
元素的开始标记可能不会被省略,如果其中的第一个内容是注释,我们可以自由地假设在解析注释是而不是 {{ 1}}元素。同样,标签遗漏规则表明
如果元素为空,或者html
元素中的第一个元素不是空格字符或注释[...] <,则可以省略[a]
body
元素的开始标记/ p>
因此我们可以自由地假设评论也是而不是 body
元素中的第一件事。所以实际上这个文档可以明确地解析为等同于
body
HTML5的解析器算法指定如果我们处于before html插入模式,这是解析器在看到<!DOCTYPE html><!-- A comment --><html><head><title>A title</title></head><body></body></html>
后转换到的状态,我们看到
字符标记,是U + 0009字符制表,“LF”(U + 000A),“FF”(U + 000C),“CR”(U + 000D)或U + 0020 SPACE之一
然后我们要“忽略令牌”。另一方面,如果我们看到评论标记,那么我们将
插入注释作为Document对象的最后一个子项。
直到我们看到其他类型的标记才会发出<!DOCTYPE html>
元素。所以我们应该期望这种行为不会受到空白的影响,事实上Firefox 54和Chrome 60都会解释这个文档
html
与
相同<!DOCTYPE html>
<!-- A comment -->
<title>A title</title>
也就是说,它们都被视为
<!DOCTYPE html><!-- A comment --><title>A title</title>