最近,我发现在HTML5中可能有一种新的评论方式。
与我读到的典型的<!-- -->
多行注释不同,我认为我注意到我的集成开发环境注释掉了一个常规的<!div >
。所以我测试了一下,令我惊讶的是,Chrome已经注释掉了这个标签。它只注释掉了标签,而没有注释掉div的内容,所以我不得不注释掉closer <!/div>
,以避免关闭其他div。
我测试了另一个,它似乎通常在任何标签的开头前放置一个感叹号,这个符号<
会使该标签被注释掉。
这真的是新的吗?这是不是很糟糕的做法?它实际上非常方便,但它是否实用(如果不是新的话)?
编辑额外的细节:虽然语法错误或对这种特殊语法的误解是一个很好的原因,但为什么Chrome实际上会将它们呈现为完整的注释?
代码以格式编写
<!div displayed> some text here that is still displayed <!/div>
,然后将其呈现为
<!--div displayed--> some text here that is still displayed <!--/div-->
发布于 2015-04-02 14:14:45
HTML5中的注释没有新的标准。唯一有效的注释语法仍然是<!-- -->
。来自section 8.1.6 of W3C HTML5
Comments必须以四个字符的序列U+003C小于号、U+0021感叹号、U+002D连字符-减号、U+002D连字符-减号(
<!--
)开头。
<!
语法源于SGML DTD标记,它不是HTML5的一部分。在HTML5中,它被保留用于注释、CDATA节和DOCTYPE声明。因此,这种替代方案是否是糟糕的实践取决于您是否认为使用(或者更糟糕的是,依赖于)过时的标记是糟糕的实践。
Validator.nu称你的评论为“假评论”--这意味着即使它不是一个有效的评论,它也会被当作评论对待。这可能是为了向后兼容之前的HTML5,它是基于SGML的,并且具有采用<!FOO>
形式的标记声明,所以我不称之为新的。它们被视为注释的原因是因为SGML标记声明是不打算呈现的特殊声明,但是由于它们在HTML5中没有意义(除了上面的例外),就HTML5 DOM而言,它们只不过是注释。
section 8.2.4中的以下步骤导致了这一结论,Chrome似乎完全遵循了这一结论:
使用下一个输入字符:
"<“(U+003C)
切换到标记打开状态。
使用下一个输入字符:
"!“(U+0021)
切换到标记声明打开状态。
如果接下来的两个字符都是"-“(U+002D)字符,则使用这两个字符,创建一个数据为空字符串的注释标记,然后切换到注释开始状态。
否则,如果接下来的七个字符是单词" DOCTYPE“的ASCII不区分大小写的匹配项,则使用这些字符并切换到DOCTYPE状态。
否则,如果有一个经过调整的当前节点,并且它不是HTML名称空间中的元素,并且接下来的七个字符是字符串"[ CDATA [“(前后带有U+005B左方括号字符的五个大写字母"CDATA”)的区分大小写匹配),则使用这些字符并切换到CDATA节状态。
否则,这是一个解析错误。切换到伪造评论状态。使用的下一个字符是将出现在comment.中的第一个字符
注意,它说只有在遇到的字符序列为<!--
时才切换到注释开始状态,否则就是假注释。这反映了上面8.1.6节所述的内容。
使用包括第一个">“(U+003E)字符或文件末尾(EOF)的每个字符,以先到者为准。发出注释标记,其数据是从导致状态机切换到伪注释状态的字符开始(包括该字符)的所有字符的串联,直到并包括紧接在最后使用的字符之前的字符(即直到U+003E或EOF字符之前的字符),但任何U+0000空字符都替换为U+FFFD替换字符。(如果注释是在文件末尾(EOF)开始的,则标记为空。同样,如果标记是由字符串"<!>
".)生成的,则该标记为空
简单地说,这会将<!div displayed>
转换为<!--div displayed-->
,将<!/div>
转换为<!--/div-->
,正如问题中所述。
最后,您可能希望其他兼容HTML5的解析器的行为与Chrome相同。
发布于 2015-04-02 14:07:11
我不认为这是一个好习惯,因为<!
代表像<!DOCTYPE
这样的标记声明。因此,您认为它被注释了(好吧…浏览器将尝试解释它)。
即使它没有出现,这似乎也不是注释HTML代码的正确语法。
https://stackoverflow.com/questions/29405858
复制相似问题