我想在DOCTYPE声明之前的HTML代码的最顶部添加注释(<!-- this -->
样式)。这符合标准吗?它是否受到主流浏览器的支持?这样做有什么陷阱吗?
答案 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进入怪癖模式。
答案 3 :(得分:3)
根据this page,这可能会导致IE7以怪癖模式呈现,就像根本不存在doctype一样。
答案 4 :(得分:0)
允许使用doctype之前的注释,但会导致所有 IE版本恢复为怪异模式。实际上,它们有时用于此目的。 XML声明(<?xml version ...?>
)具有相同的效果,在IE6及以下。