Tra*_*ale 56 html doctype comments
我想<!-- this -->在DOCTYPE声明之前的HTML代码的最顶部放置注释(样式).这符合标准吗?它是否受到主流浏览器的支持?这样做有什么陷阱吗?
Kom*_*ist 132
这是完全有效的做
<!-- this, -->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
但是,它将所有版本的IE带入了quirks-mode(除非它被强制进入非怪癖模式 - 请参阅下面的" 陷阱"部分).最简单的是将注释移到DOCTYPE下面.
<!DOCTYPE html>
<!-- this, -->
Run Code Online (Sandbox Code Playgroud)
但另一种方法是将评论"升级"为合适的条件评论,例如:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
说明:一个有条件的评论不计为注释,在IE的天下.
替代语法:忘记/记住条件注释是Microsoft对HTML标准的入侵,例如可以做
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
同样,特别是针对IE,可以做到
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
陷阱
注释内部条件注释会带来IE到怪癖模式如果IE看到它(即:如果一个使用了[如果IE]条件,或等效为[如果IE] -如[!如果anybrowser]条件是我上面提到过.)因此,例如,这将使IE处于怪癖模式:
<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
就像那样
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
和许多其他变种.例如,
<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
会不会造成怪癖模式,因为这里的条件注释有一个DOCTYPE 之前任何其他内容,因此IE认为页面的第一个内容是DOCTYPE.
最后,最新的IE版本IE8和IE9可以通过使用另一个微软发明 - x-ua兼容指令强制进入标准模式(以及quirks模式).请参阅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]-->
Run Code Online (Sandbox Code Playgroud)
将迫使 IE8和IE9进入无怪癖模式,而IE6和IE7将保持怪异模式.而相反,这一点
<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
尽管条件评论的内容不是以DOCTYPE开头,但 IE8和IE9 会强制进入标准模式.IE6和IE7也将保持非怪癖模式,因为条件评论不针对它们.
Tri*_*ych 38
写第<!DOCTYPE>一个肯定是最好的做法.
我很久很久以前就记得奇怪的问题了,有些浏览器(可能是IE6)忽略了a,<!DOCTYPE>因为之前有些看似无辜的东西 - 我想只是空白,但也许是评论.在任何情况下,这都是一个可怕的,可怕的错误,必须追查,并且肯定没有任何充分的理由在之前有评论或空白<!DOCTYPE>.
<!DOCTYPE>我要说的是,写第一个是经验丰富的Web开发人员为避免可怕的,难以捉摸的错误所做的事情.