注释可以在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 ...?>
具有相同的效果。