注释可以出现在 DOCTYPE 声明之前吗?
题
我想发表评论(<!-- this -->
style) 位于 HTML 代码的最顶部,位于 DOCTYPE 声明之前。这符合标准吗?主流浏览器都支持吗?这样做有什么陷阱吗?
解决方案
编写的 <!DOCTYPE>
强>第一肯定是最佳实践。
我记得奇怪的问题很长,很久以前这里的一些浏览器(可能是IE6)忽略 <!DOCTYPE>
,因为有一些貌似无辜的前 - 我认为只是空格,但也许这是一个评论。在任何情况下,这是一个可怕的,可怕的错误有追查,并有肯定从来没有任何充分的理由之前有意见或空白的 <!DOCTYPE>
编写的 <!DOCTYPE>
第一个是,我会说,只是一些经验丰富的网络开发者如何避免可怕的,难以理解的错误。
其他提示
有的完全有效以做
<!-- this, -->
<!DOCTYPE html>
<强>然而,强>它带来的迫使所有强>版本的IE到的怪异模式强>(除非它是 成没有-quirks模式 - 看到陷阱强>下面一节)。最简单的是移动DOCTYPE下面的评论。
<!DOCTYPE html>
<!-- this, -->
但是,另一种方法是将“升级” 入评合适的条件强> 的评论,诸如这样的:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
说明: 条件的意见并不计数为注释,在IE的世界
替代语法::要忘记/记住,有条件的意见是微软侵入HTML标准,人们可以例如做
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
同样地,在特定的目标即,一个可以做
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
<强>陷阱强>
一个评论内条件注释会带来IE成怪异模式如果IE看到它强>(即:如果强>一个使用一个<强> [如果IE] 强>条件,或等效为[如果IE] - 如在 [如果anybrowser!] 强>条件是我上面提到的)。因此,举例来说,这将带来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为标准模式,尽管的条件注释的内容没有的不的开始与DOCTYPE。与IE6和IE7也将保持在无怪癖模式,因为条件注释不针对他们。
虽然这是每个我相信标准容许,你肯定想避免它,因为它会扔IE进入怪癖模式。
(参见触发不同的渲染模式)
根据说法,这可能会导致 IE7 以怪异模式呈现,就好像文档类型根本不存在一样 这一页.
文档类型之前的评论是允许的,但造成的所有强> IE的版本恢复到怪异模式。他们是,实际上,用于该目的的时候。 XML声明(<?xml version ...?>
)具有相同的效果,在IE6和下面