注释可以在DOCTYPE声明之前出现吗?

我想在我的HTML代码的顶部放置一个注释( <!-- this --> style),在DOCTYPE声明之前。 这是否符合标准? 它受到主stream浏览器的支持吗? 这样做有什么缺陷吗?

首先写DOCTYPE当然是最好的做法。

我记得很久很久以前的一些奇怪的问题,一些浏览器(可能是IE6)忽略了一个DOCTYPE,因为之前看起来似乎是无辜的 – 我想只是空白,但也许是一个评论。 无论如何,这是一个可怕的,可怕的错误,必须追查,并且在DOCTYPE之前肯定没有任何理由有任何意见或空白。

首先写DOCTYPE就是一些经验丰富的Web开发人员所做的,以避免可怕的,难以捉摸的错误。

这是完全有效的

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

但是,它将所有版本的IE都引入怪异模式 (除非它被强制进入无怪异模式 – 请参阅下面的陷阱部分)。 最简单的是将注释移到DOCTYPE下面。

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

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

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

说明:在IE的世界中, 条件注释不算作评论。

替代语法:忘记/记住条件注释是微软入侵HTML标准,可以例如做

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

同样,特别针对IE,也可以这样做

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

陷阱

如果IE看到它 (即: 如果使用[if IE]条件或等效于[if IE] – 比如[if!anybrowser]条件), 条件注释中的注释将使IE进入怪异模式我上面提到过)。 所以,举个例子,这会让IE进入怪癖模式:

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

一如既往

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

和许多其他变种。 而例如

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

不会引起怪癖模式,因为这里的条件注释任何其他内容之前都有一个DOCTYPE,因此IE认为该页面的第一个内容是DOCTYPE。

最后,最新的IE版本, IE8和IE9 ,可以通过使用另一个Microsoft发明 – x-ua兼容指令,被强制为标准模式(以及怪癖模式)。 请参阅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进入无怪异模式,而IE6和IE7将保持怪癖模式。 而相反, 这一点

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

强制 IE8和IE9进入标准模式, 尽pipe条件注释的内容不是以DOCTYPE开头的。 而IE6和IE7也将保持无怪异模式,因为条件注释并不是针对它们的。

虽然我相信每个标准都是可以接受的,但是你一定要避免它,因为它会把IE变成怪异模式。

(请参见触发不同的渲染模式 )

根据这个页面 ,这可能会导致IE7以怪癖模式呈现,就好像根本就没有文档types一样。

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