有没有新的HTML评论标准?
最近我发现HTML5中可能有一种新的评论方式。
而不是我读过的典型的多行注释,我想我注意到我的IDE做了一个普通的<!div >
注释。 所以我testing了一下,让我惊讶的是Chrome已经注释掉了这个标签。 它只注释了标签,而不是div的内容,所以我不得不注释更接近<!/div>
以避免closures其他div。
我testing了另一个,看起来通常在任何标签的开头前都加上一个感叹号,这个符号使得这个标签被注释掉了。
这是新的吗? 这是不好的做法吗? 这实际上很方便,但它是否实用(如果不是新的)?
编辑额外的细节:虽然语法错误或这种特定语法的错误解释是一个很好的理由,但是Chrome 究竟如何将它们渲染为完整的评论呢?
代码写为 :
<!div displayed> some text here that is still displayed <!/div>
然后它呈现为 :
<!--div displayed--> some text here that is still displayed <!--/div-->
在HTML5中没有新的评论标准。 唯一有效的注释语法仍然是<!-- -->
。 来自W3C HTML5第8.1.6节 :
注释必须以四个字符序列U + 003C LESS-THAN SIGN,U + 0021 EXCLAMATION MARK,U + 002D HYPHEN-MINUS,U + 002D HYPHEN-MINUS(
<!--
)开始。
<!
语法起源于SGML DTD标记,它不是HTML5的一部分。 在HTML5中,它保留为注释,CDATA部分和DOCTYPE声明。 因此,这种select是否是不好的做法取决于你是否认为使用(或更糟糕的是,过分依赖)过时的标记是不好的做法。
Validator.nu称你有一个“伪装评论”。 – 这意味着即使它不是一个有效的评论,它被视为评论。 这大概是为了与基于SGML的HTML5以前版本的后向兼容,并且具有<!FOO>
forms的标记声明,所以我不会称之为新的。 他们被当作评论对待的原因是因为SGML标记声明是特殊的声明不是要呈现的,但是因为它们在HTML5中是没有意义的(除了上面的例外),就HTML5 DOM而言,它们只不过是评论。
在第8.2.4节中的以下步骤导致了这个结论,Chrome似乎跟在这封信上:
-
8.2.4.1数据状态 :
消费下一个input字符:
“<”(U + 003C)
切换到标签打开状态。 -
8.2.4.8标签打开状态 :
消费下一个input字符:
“!” (U + 0021)
切换到标记声明打开状态。 -
8.2.4.45标记声明打开状态 :
如果接下来的两个字符都是“ – ”(U + 002D)字符,则使用这两个字符,创build一个注释标记,其数据为空string,并切换到注释开始状态。
否则,如果接下来的七个字符是单词“DOCTYPE”的ASCII不区分大小写的匹配,则使用这些字符并切换到DOCTYPE状态。
否则,如果存在调整后的当前节点并且它不是HTML命名空间中的元素,并且接下来的七个字符是区分大小写的匹配string“[CDATA [”(五个大写字母“CDATA”,U + 005B左方括号之前和之后的字符),然后消耗这些字符并切换到CDATA段状态。
否则,这是一个parsing错误。 切换到虚拟注释状态。 消费的下一个字符(如果有的话)将是注释中的第一个字符。
请注意,只有当遇到的字符序列是
<!--
,它才会切换到注释开始状态,否则它是一个假的注释。 这反映了上面第8.1.6节所述的内容。 -
8.2.4.44虚假评论状态 :
使用第一个“>”(U + 003E)字符或文件结尾(EOF)中的每个字符,以先到者为准。 发出一个注释标记,其数据是从包括使状态机切换到假注释状态的字符开始的所有字符的连接,直到包括紧接在最后一个消耗字符之前的字符(即,直到字符就在U + 003E或EOF字符之前),但用U + FFFD REPLACEMENT CHARACTER字符replace任何U + 0000空字符。 (如果注释是在文件末尾(EOF)开始的,则标记为空;同样,如果标记是由string“
<!>
”生成的,则为空)用简单的英语,这就完全按照问题中所描述的将
<!div displayed>
变成<!--div displayed-->
和<!/div>
变成<!--/div-->
。
最后,您可能会期望其他符合HTML5的parsing器的行为与Chrome相同。
我不认为这是一个很好的习惯,因为<!
代表标记声明,如<!DOCTYPE
。 因此,你认为它的评论(以及…浏览器将尝试解释它)。
即使没有出现,这似乎也不是评论HTML代码的正确语法。