首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTML5是否改变了HTML注释的标准?

HTML5是否改变了HTML注释的标准?
EN

Stack Overflow用户
提问于 2015-04-02 13:50:46
回答 2查看 9.3K关注 0票数 131

最近,我发现在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-->
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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似乎完全遵循了这一结论:

  1. 8.2.4.1 Data state

使用下一个输入字符:

"<“(U+003C)

切换到标记打开状态。

  1. 8.2.4.8 Tag open state

使用下一个输入字符:

"!“(U+0021)

切换到标记声明打开状态。

  1. 8.2.4.45 Markup declaration open state

如果接下来的两个字符都是"-“(U+002D)字符,则使用这两个字符,创建一个数据为空字符串的注释标记,然后切换到注释开始状态。

否则,如果接下来的七个字符是单词" DOCTYPE“的ASCII不区分大小写的匹配项,则使用这些字符并切换到DOCTYPE状态。

否则,如果有一个经过调整的当前节点,并且它不是HTML名称空间中的元素,并且接下来的七个字符是字符串"[ CDATA [“(前后带有U+005B左方括号字符的五个大写字母"CDATA”)的区分大小写匹配),则使用这些字符并切换到CDATA节状态。

否则,这是一个解析错误。切换到伪造评论状态。使用的下一个字符是将出现在comment.中的第一个字符

注意,它说只有在遇到的字符序列为<!--时才切换到注释开始状态,否则就是假注释。这反映了上面8.1.6节所述的内容。

  1. 8.2.4.44 Bogus comment state

使用包括第一个">“(U+003E)字符或文件末尾(EOF)的每个字符,以先到者为准。发出注释标记,其数据是从导致状态机切换到伪注释状态的字符开始(包括该字符)的所有字符的串联,直到并包括紧接在最后使用的字符之前的字符(即直到U+003E或EOF字符之前的字符),但任何U+0000空字符都替换为U+FFFD替换字符。(如果注释是在文件末尾(EOF)开始的,则标记为空。同样,如果标记是由字符串"<!>".)生成的,则该标记为空

简单地说,这会将<!div displayed>转换为<!--div displayed-->,将<!/div>转换为<!--/div-->,正如问题中所述。

最后,您可能希望其他兼容HTML5的解析器的行为与Chrome相同。

票数 196
EN

Stack Overflow用户

发布于 2015-04-02 14:07:11

我不认为这是一个好习惯,因为<!代表像<!DOCTYPE这样的标记声明。因此,您认为它被注释了(好吧…浏览器将尝试解释它)。

即使它没有出现,这似乎也不是注释HTML代码的正确语法。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29405858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档