HTML5是否会改变HTML评论的标准?

And*_*rew 130 html html5 comments

最近我发现HTML5中可能有一种新的评论方式.

而不是<!-- -->我读过的典型的多行评论,我我注意到我的IDE经常被<!div >注释掉了.所以我测试了它,而且我惊讶的是Chrome已经注释掉了这个标签.它只是注释掉的代码,而不是div的内容,所以我不得不注释掉接近<!/div>,以避免关闭其他的div.

我测试了另一个,看起来通常在任何标签的开口前放置一个感叹号,这个符号<使该标签被注释掉.

这真的是新的吗?这是不好的做法吗?它实际上非常方便,但它是否实用(如果不是新的)?

编辑额外的细节: 虽然语法错误或对这种特定语法的误解是一个很好的理由,但Chrome 实际上如何将它们作为完整注释呈现?

代码写成:

<!div displayed> some text here that is still displayed <!/div>
Run Code Online (Sandbox Code Playgroud)

然后它呈现为:

<!--div displayed--> some text here that is still displayed <!--/div-->
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 195

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声明.因此,这种替代方案是否是不好的做法取决于您是否认为使用(或更糟糕的是,依赖)过时的标记是不好的做法.

Validator.nu称你有"Bogus评论". - 这意味着它被视为评论,即使它不是有效的评论.这可能是为了与HTML5之前的后向兼容,这是基于SGML的,并且有标记声明采用了这种形式<!FOO>,所以我不会称之为新的.他们正在处理的原因类似意见是因为SGML的标记声明并不意味着要呈现的特殊声明,但由于它们是无意义的HTML5(上述例外),至于HTML5 DOM而言,他们无非评论更多.

8.2.4节中的以下步骤导致了这一结论,Chrome似乎跟随着这封信:

  1. 8.2.4.1数据状态:

    使用下一个输入字符:

    "<"(U + 003C)
    切换到标签打开状态.

  2. 8.2.4.8标签打开状态:

    使用下一个输入字符:

    "!" (U + 0021)
    切换到标记声明打开状态.

  3. 8.2.4.45标记声明开放状态:

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

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

    否则,如果存在调整后的当前节点且它不是HTML命名空间中的元素,则接下来的七个字符是字符串"[CDATA ["(带有U +的五个大写字母"CDATA")区分大小写的匹配005B LEFT SQUARE BRACKET字符前后),然后消耗这些字符并切换到CDATA部分状态.

    否则,这是一个解析错误.切换到虚假评论状态.消耗的下一个字符(如果有)是注释中的第一个字符.

    请注意,只有遇到遇到的字符序列时才会切换到注释开始状态<!--,否则这是一个虚假的注释.这反映了上文第8.1.6节中所述的内容.

  4. 8.2.4.44 Bogus评论状态:

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

    用简单的英语,这原来<!div displayed><!--div displayed--><!/div><!--/div-->,完全按照问题描述.

最后,您可能希望其他符合HTML5标准的解析器与Chrome的行为相同.

  • 感谢您抽出宝贵时间找到此事件背后的官方推理.它清除了很多东西,并为我的错误假设提供了很多有效性. (11认同)
  • @ArturoTorresSánchez:XHTML尝试了"无效内容=错误"方法并且失败了.此外,规则基本上说"不要解析这个虚假的评论,只是将其视为评论并解析你找到的下一个有效的东西".因此,根据您的观点,HTML5要么不能做您想要的,因为您想要的很糟糕,或HTML5完全符合您的要求. (3认同)
  • HTML5规范如何处理"无效"内容的规则很奇怪.如果它无效,则根本不应该处理它. (2认同)
  • 嗯,这就是HTML和网络语言过去的方式 - 严格.如此宽松地处理不正确的代码结构的原因是为了获得更高质量的站点.浏览器可以查看的网站越多,并且使用错误的语法正确查看,他们的最终用户就越开心.一般的网络标准作者(大多数是w3而不是另一个),意识到浏览器供应商并没有因此而遵循指导原则.HTML5的出现只是建立在使设计正式更宽松的想法上. (2认同)

Yve*_*nge 12

我不认为这是一个很好的习惯,因为<!代表标记声明<!DOCTYPE.因此,您认为它已被评论(嗯......浏览器会尝试解释它).

即使它没有出现,这似乎不是评论HTML代码的正确语法.

  • 建议(我不确定,只是猜测):尝试解释>不能>评论? (4认同)