可以在DOCTYPE声明之前出现评论吗?

时间:2009-06-02 18:21:19

标签: html comments doctype

我想在DOCTYPE声明之前的HTML代码的最顶部添加注释(<!-- this -->样式)。这符合标准吗?它是否受到主流浏览器的支持?这样做有什么陷阱吗?

5 个答案:

答案 0 :(得分:130)

执行完全有效

<!-- this, -->
<!DOCTYPE html>

然而,它会将所有版本的IE带入 quirks-mode (除非强制为否-quirks模式 - 请参阅下面的 Gotchas 部分。最简单的方法是将评论移到DOCTYPE下面。

<!DOCTYPE html>
<!-- this, -->

但另一种方法是将评论“升级”合适的条件 评论中,例如:

<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>

解释: 条件评论在IE的世界中不会计数作为评论。

替代语法:忘记/记住条件评论是Microsoft侵入HTML标准的,例如可以做到

<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>

同样,特别是针对IE,可以做到

<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>

陷阱

内部的条件评论将使IE进入怪癖模式如果IE看到(即如果,则使用< strong> [if IE] 条件,或等同于[if IE] - 例如我上面提到的 [if!anybrowser] 条件。)。因此,例如,这将使IE处于怪癖模式:

<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>

就像

一样
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>

以及许多其他变种。而例如

<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>

导致quirks-mode,因为 here 条件注释在任何其他 内容之前有一个DOCTYPE ,因此IE认为页面的第一个内容是DOCTYPE。

最后,最新的IE版本 IE8和IE9 可以通过使用另一个Microsoft 强制到标准模式(以及quirks-mode)发明 - x-ua-compatible 指令。见http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx在这种情况下,然后

<!-- this -->
<!DOCTYPE html>
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->

强制 IE8和IE9进入 no-quirks 模式,而IE6和IE7将保持 quirks 模式。而相反,

<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>

强制 IE8和IE9进入标准模式,尽管条件评论的内容以DOCTYPE开头。 IE6和IE7也将保持非怪癖模式,因为条件评论不针对它们。

答案 1 :(得分:38)

首先编写 <!DOCTYPE> 当然是最佳做法。

我很久很久以前就记得奇怪的问题了,某些浏览器(可能是IE6)忽略了 <!DOCTYPE> ,因为之前有一些看似无辜的东西 - 我想只是空白,但也许这是一个评论。在任何情况下,这都是一个可怕的,可怕的错误,必须追踪,并且在 <!DOCTYPE> 之前肯定没有任何充分的理由留下评论或空白。

首先编写 <!DOCTYPE> ,我会说,只是经验丰富的网络开发人员做的事情,以避免可怕的,难以捉摸的错误。

答案 2 :(得分:12)

虽然按照我相信的标准是可以接受的,但你肯定想避免它,因为它会让IE进入怪癖模式。

(见Triggering different rendering modes

答案 3 :(得分:3)

根据this page,这可能会导致IE7以怪癖模式呈现,就像根本不存在doctype一样。

答案 4 :(得分:0)

允许使用doctype之前的注释,但会导致所有 IE版本恢复为怪异模式。实际上,它们有时用于此目的。 XML声明(<?xml version ...?>)具有相同的效果,在IE6及以下