HTML中的单行注释

79

有没有一种方法可以使用行首的转义序列来注释HTML中的单行?

类似于在其他编程语言中使用#//这样的符号吗?还是说<!-- ... -->是在HTML中唯一可用的注释选项?


3
TL;DR:不行。仅翻译“<!-- -->”即可。 - Andrew
5个回答

75

来自HTML注释:

由于HTML是官方的SGML应用程序,因此在HTML文档中使用的注释语法实际上是SGML注释语法。不幸的是,这种语法一开始有点不清楚。

SGML注释的定义基本上如下:

注释声明<!开头,后跟零个或多个注释,然后是>注释以"- -"开头和结尾,并且不包含任何"- -"的出现。
这意味着以下所有内容都是合法的SGML注释:
  1. <!--Hello-->
  2. <!--Hello -- -- Hello-->
  3. <!---->
  4. <!------ Hello -->
  5. <!>
请注意,“空”注释标记,只有“- -”字符,应始终具有四个“-”字符的倍数才合法。(是的,<!>也是合法的注释-它是空注释)。

并非所有HTML解析器都能正确地处理此问题。例如,“<!------> hello-->”是一个合法的注释,您可以通过上面的规则进行验证。它是具有两个注释的注释标记;第一个为空,第二个包含“> hello”。如果您在浏览器中尝试它,您会发现文本被显示在屏幕上。

这可能有两个原因:

  1. 浏览器看到“>”字符,并认为注释在那里结束。
  2. 浏览器看到“-->”字符并认为注释在那里结束。
文本和评论以此结束。 还有一个"--"序列的问题。 有些人习惯于在源代码中使用类似"<!-------------->"这样的分隔符。不幸的是,在大多数情况下,"-"字符的数量不是四的倍数。这意味着尝试正确处理它的浏览器实际上会在这里搞错,并隐藏文档的其余部分。

因此,请使用以下简单规则来组成有效且被接受的注释:

HTML注释以"<!--"开头,以"-->"结尾,并且注释中不包含"--"或">"。

6
有趣,我从未知道<!>是一个有效的注释。不过基于兼容性考虑,我会避免使用这样的东西。 - Matti Virkkunen
2
据我所知,HTML5已经远离了SGML注释语法,因为它不再基于SGML。 - Yuhong Bao
1
是的,现在使用HTML5,注释必须以<!--开头,以-->结尾,并且文本不能以>->开头,不能包含--,也不能以-结尾。但是对于解析无效注释,浏览器可以遵循许多规则。 - Robert
2
因未实际回答问题而提供大量无关细节而被踩。 - Andrew
3
这并没有回答问题,完全没有。 - Andrew
显示剩余4条评论

44
不,"<!-- ... -->" 是HTML中唯一的注释语法。

2
这应该是这个问题的唯一答案。 - Andrew

8
让我们保持简单。我非常喜欢digitaldreamer的答案,但它可能会让初学者感到困惑。因此,我将尝试简化它。
唯一的HTML注释是<!-- -->。它可以用作单行注释或双行注释,具体取决于开发人员。
因此,HTML注释以<!--开头,以-->结尾。就是这么简单。您不应使用其他格式,即使注释格式是合法的或不合法的,也要避免任何兼容性问题。

5
不,你必须使用 --> 来结束注释。

3
TL;DR: 对于符合标准的浏览器而言,是的;但由于没有符合标准的浏览器,所以不行。
根据HTML4规范,<!------> hello-->是一个完全有效的注释。然而,由于开发人员不知道或不遵循标准(正如digitaldreamer指出的那样),我还没有找到一个正确实现(即按照规范)的浏览器。
您可以在W3C的网站上找到HTML4注释的定义:3.2.4 Comments 许多浏览器错误的另一件事是,-- >-->一样关闭注释。

1
那是否意味着对于“符合标准的浏览器”,有一种在行末结束的注释打开语法?正确的答案是:“对于符合标准的浏览器,不需要;但对于实际的浏览器也不需要。” - Nick Matteo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接