使用Doctype激活浏览器模式

使用Doctype激活浏览器模式

为了处理根据Web标准编写的内容和根据20世纪90年代末流行的传统实践编写的内容,今天的Web浏览器实现了各种引擎模式。本文档解释了这些模式是什么以及它们是如何被触发的。

不耐烦的总结

简而言之:从本文中得出的主要结论是,您应该首先将所有HTML文档(即任何被提供的文档text/html<!DOCTYPE html>作为源代码中的第一件事启动。(继续阅读以了解原因。)

如果你要格外小心,以确保IE8,IE9或IE10的用户不能按一个按钮,使您的网站的倒退,如果它是在IE7被查看,无论是配置您的服务器发送HTTP标头X-UA-Compatible: IE=Edgetext/html或将<meta http-equiv="X-UA-Compatible" content="IE=Edge">head您的HTML文档(在任何脚本之前)。但是,这会使HTML文档无效,如果不包含这些特定于IE的咒语,IE的默认行为在大多数情况下都是合理的,因此您不需要跳过这些特定于IE的箍。(继续阅读例外情况。)

本文档的范围

本文档介绍模式切换,因为它适用于Firefox和其他基于Gecko的浏览器,Safari,Chrome和其他基于WebKit的浏览器,Opera,Konqueror,适用于Mac的Internet Explorer,适用于Windows的Internet Explorer(包括Windows Phone)以及嵌入IE的浏览器。而不是引用浏览器引擎的名称,而是使用使用每个引擎的最知名浏览器的名称。

本文档重点介绍模式选择机制,并未记录每种模式的确切行为。本文档的目的是为您提供有关如何避免传统模式的信息。本文档的目的不是通过故意选择传统模式来促进采摘行为。

模式

以下是各种模式:

text/html内容的常见模式

text/html内容模式的选择取决于doctype嗅探(在本文档后面讨论)。在IE8及更高版本中,该模式还取决于其他因素。但是,默认情况下,即使在IE8及更高版本中,模式也取决于不在Microsoft提供的黑名单中的非Intranet站点的doctype。此外,如果安装了Google Chrome Frame,即使使用IE6和IE7也会涉及其他因素。

怪癖模式

在Quirks模式中,浏览器违反当代Web格式规范,以避免根据20世纪90年代末普遍存在的做法“打破”创建的页面。以前,不同的浏览器实现了不同的怪癖。特别是在Internet Explorer 6,7,8和9中,Quirks模式在IE 5.5中被有效冻结,而在其他浏览器中,Quirks模式与Almost Standards模式有一些偏差。最近,浏览器已经在他们的Quirks模式中融合了常见的行为。最值得注意的是,IE10的主要Quirks模式不再是IE 5.5的模仿,而是寻求与其他浏览器的Quirks模式互操作。WHATWG 正在可互操作的怪癖进行标准化

IE10的主要Quirks模式就像其他浏览器的Quirks模式有时被称为“可互操作的Quirks模式”,以区别于IE10模仿IE10所具有的IE 5.5模式。

如果您正在创作新页面,请不要使用Quirks模式。只是不要。使用标准模式。

标准模式

在标准模式下,浏览器尝试在特定浏览器中实现的范围内为文档提供规范方面的正确处理。

由于不同的浏览器处于不同的合规阶段,因此标准模式也不是单一目标。

HTML规范要求这种模式下,“无怪癖模式”。

几乎标准模式

Firefox,Safari,Chrome,Opera(自7.5),IE8,IE9和IE10也有一种称为“几乎标准模式”的模式,它传统上实现表格单元的垂直大小,而不是根据CSS2规范。Mac IE 5,Windows IE 6和7,7.5之前的Opera和Konqueror不需要Almost Standards模式,因为他们无论如何都没有根据各自标准模式中的CSS2规范实现表格单元的垂直大小。事实上,他们的标准模式更接近于标准模式,而不是新浏览器的标准模式。

回想起来,如果没有标准和几乎标准之间的区别,将Almost Standards行为作为默认值并具有CSS属性来选择标准模式中的默认行为,那么Web本来会更好。不过,您应该使用标准模式 - 而不是标准模式。

HTML规范要求这种模式下,“有限怪癖模式”。

对于该模式的application/xhtml+xml内容(XML模式)

在Firefox,Safari浏览器,Chrome浏览器,Opera和IE9的application/xhtml+xmlHTTP Content-Type不是一个meta元素也不是!DOCTYPE)会触发XML模式。在XML模式中,这些浏览器为特定浏览器中实现的XML文档提供了规范方面的正确处理。

IE 6,7和8不支持application/xhtml+xml。Mac IE 5也没有。

在基于WebKit的诺基亚S60浏览器中,由于担心与移动围墙花园中的不良内容兼容,application/xhtml+xmlHTTP Content-Type不会触发XML模式。(传统的“移动浏览器”没有使用真正的XML解析器,因此,格式错误的内容已被标记为XML。)

我还没有测试过Symbian 3上的默认浏览器。

我还没有充分测试Konqueror来说明浏览器到底发生了什么。

Microsoft的IE特定附加模式

以下是HTML5未指定的其他IE特定模式以及其他浏览器没有的模式。它们的激活涉及配置或X-UA-Compatible作为HTTP头或meta元素(下面讨论)。

Internet Explorer 5怪癖

除了可互操作的Quirks模式之外,IE10还有一个名为“Internet Explorer 5 Quirks”的模式,它模仿IE 5.5,并且是IE6,IE7,IE8和IE9中称为Quirks模式的模式。

Internet Explorer 7标准

IE8,IE9和IE10都有一种模仿IE7中标准模式的模式。

Internet Explorer 8标准

IE9和IE10有一种模仿IE8中标准模式的模式。

Internet Explorer 8几乎标准

IE9和IE10有一种模仿IE8中Almost Standards模式的模式。在开发人员工具用户界面中,此模式与“Internet Explorer 8标准”不同。

Internet Explorer 9标准

IE10有一种模仿IE9中标准模式的模式。

Internet Explorer 9几乎标准

IE10有一种模仿IE9中几乎标准模式的模式。在开发人员工具用户界面中,此模式与“Internet Explorer 9标准”不同。

Internet Explorer 9 XML

IE10有一种模仿IE9中XML模式的模式。在开发人员工具用户界面中,此模式与“Internet Explorer 9标准”不同。

值得注意的是,以前版本的IE的模仿并不完美。我自己遇到的随机例子包括IE7标准模拟在后来的IE版本处理@font-face-liked EOT字体不同和IE10模式的IE10支持CSS 2D转换没有-ms-真正的IE9需要前缀。如果您遵循本文档中给出的建议,您将不会瞄准这些模式,因此模仿的不完美对您来说无关紧要。但是,测试的好处是,在运行在一堆虚拟机中的IE的实际旧版本中测试您的站点会比使用开发人员工具更新的IE版本更好,以使新版本模拟旧版本进行测试。

用于Windows Phone 8的IE10也具有所有这些模式 - 就像桌面上的IE10一样。

来自Google的IE特定附加模式

以下是安装了Google Chrome Frame时,IE6,IE7,IE8和IE9中的其他模式(但在Windows 8或Windows 7上的IE7中不适用)。

Chrome Quirks

此模式与Google Chrome中的Quirks模式相同。

Chrome标准

此模式与Google Chrome中的标准模式相同。

Chrome几乎标准

此模式与Google Chrome中的“近乎标准”模式相同。

非Web模式

某些引擎具有与Web内容无关的模式。这些模式仅在此处提及以确保完整性。Opera具有WML 2.0模式。Mac OS X 10.5上的WebKit有一个特殊的传统Dashboard小部件模式(也许这种模式保留在较新的版本中 - 我还没有调查过)。WebKit也有针对在Mac OS X上嵌入WebKit的应用程序的攻击。

效果

以下是这些模式的主要效果:

布局

除了在IE浏览器,在模式text/html主要影响CSS布局和风格体系。例如,不将样式继承到表中是一种怪癖。在旧版本的IE和Opera中,盒子模型在Quirks模式下更改为IE 5.5盒子模型。本文档没有列举所有布局怪癖。有关列表,请参阅Mozilla的文档Quirks模式规范

在“几乎标准”模式中(在具有一个和所有当前标准的浏览器中),与标准模式相比,仅包含图像的表格单元格的高度计算方式不同。

在XML模式中,选择器具有不同的区分大小写行为。此外,HTML body元素的特殊规则不适用于未实现CSS规范的最新调整的旧版浏览器。

解析

还有一些怪癖会影响HTML和CSS解析,并会导致符合要求的页面被错误分析。这些怪癖以古怪的布局打开和关闭。但是,重要的是要意识到Quirks模式与标准模式主要是关于CSS布局和CSS解析 - 而不是HTML解析。在具有符合HTML5的HTML解析器的浏览器中,只有一个HTML解析怪癖

有些人误导性地将标准模式称为“严格解析模式”,这被误解为暗示浏览器强制执行HTML语法规则并且浏览器可用于评估标记的正确性。这是不是这种情况。即使标准模式布局生效,浏览器也会标记汤修复。(在Netscape 6发布之前的2000年夏天,Gecko实际上拥有强制执行HTML语法规则的解析器模式,其中一种模式被称为“严格的DTD”。这些模式与现有Web内容不兼容并被放弃。)

另一个常见的误解与XHTML解析有关。通常认为使用XHTML doctype获得不同的解析。它不是。服务的XHTML文档text/html使用 HTML 相同的解析器进行解析。就浏览器而言,XHTML text/html就像“带面包丁的汤”(这里和那里有一个额外的斜线)。只有使用XML内容类型(例如application/xhtml+xmlapplication/xml)提供的文档才会触发XML模式进行解析,在这种情况下,解析器与HTML解析器完全不同。

脚本

虽然Quirks模式主要是关于CSS,但也有一些脚本怪癖。在Firefox 14之前,HTML id属性未在标准和几乎标准模式中建立来自全局脚本范围的对象引用。在Firefox中,document.all部分可用于Quirks模式,但不能用于其他模式。当进入模拟旧版IE的模式时,IE中对脚本的影响更为显着。

在XML模式下,某些DOM API的行为不同,因为XML的DOM API行为被定义为与HTML行为不兼容。事后来看,这是非常不幸的。

Doctype Sniffing(又名Doctype切换)

浏览器使用doctype嗅探来决定text/html文档的引擎模式。这意味着基于HTML文档开头的文档类型声明(或缺少它)来挑选模式。(这不适用于使用XML内容类型提供的文档。)

文档类型声明(doctype)是SGML的语法工件 - 一种遗留标记框架,HTML5之前的HTML据称是根据其定义的。在HTML 4.01规范中,文档类型声明被称为传递HTML 版本信息。尽管名称为“文档类型声明”,尽管HTML 4.01规范说明了“版本信息”,但文档类型声明不是将SGML或XML文档分类为特定类型文档的适当方法,即使它看起来像是假设的是(因此得名)。(附录中有更多内容。)

HTML 4.01规范和ISO 8879(SGML)都没有说明使用文档类型声明作为引擎模式切换。Doctype嗅探是基于以下观察结果:当时设计了doctype嗅探,绝大多数古怪的文档要么没有文档类型声明,要么引用了旧的DTD。HTML5承认这一现实,并将doctype定义text/html为仅作为模式切换。

典型预HTML5文档类型声明包含(由空格分隔)字符串“ <!DOCTYPE”,根元素的通用标识符(“ html”),字符串“ PUBLIC”,一个DTD的在引号中的公共标识符,可能是系统标识符(URL)相同的DTD和字符“ >”。HTML5将doctype简化为“ <!DOCTYPE html>”。文档类型声明放在根元素的开始标记之前的文档中。

选择Doctype

text/html

简而言之:以下是为新text/html文档选择文档类型的简单指南:

标准模式,前沿验证

<!DOCTYPE html>

这是你应该使用的。有了这个文档类型,可以验证新功能,比如<video><canvas>和ARIA。请务必在最新版本的顶级浏览器中测试您的页面。

标准模式,遗留验证目标

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

此文档类型还会触发标准模式,但如果您的组织具有需要定位旧版验证的愚蠢政策,您可以坚持使用不太了解新功能的不太精确的旧版验证。但是你真的应该使用<!DOCTYPE html>并修改你组织的政策。

您想使用标准模式,但在表格布局中使用切片图像并且不想修复它们

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

这为您提供了几乎标准模式。请注意,如果您稍后转移到HTML5(因此,完整的标准模式),基于表格中切片图像的布局可能会中断,因此最好立即使您的设计与标准模式兼容。

你真的想要Quirks模式

没有doctype。

请不要这样做。故意为Quirks模式进行设计将会困扰您,您的同事或未来的继任者。

如果您对旧IE版本之间的差异感到沮丧,并且仍然需要根据客户端要求支持它们,那么最好使用条件注释对旧版本应用特定的黑客,而不是在Quirks模式下寻求通用性。

我不推荐任何XHTML文档类型,因为服务XHTML text/html被认为是有害的。如果您仍然选择使用XHTML doctype,请注意XML声明使IE 6(但不是IE 7!)触发Quirks模式。

application/xhtml+xml

对于简单的指引application/xhtml+xml使用DOCTYPE 在所有。这样页面就不能“严格符合”XHTML 1.0,但这并不重要。(请参阅下面的附录。)

IE8,IE9和IE10并发症

在列表除了宣布该IE8将采用meta基于元素的模式切换,除了DOCTYPE是在模式选择的因素。(见Ian HicksonDavid BaronDavid BaronRobert O'CallahanMaciej Stachowiak的评论。)

IE8有四种模式:IE 5.5 quirks模式,IE 7标准模式,IE 8几乎标准模式和IE 8标准模式。IE9有七种模式:IE 5.5 quirks模式,IE 7标准模式,IE 8几乎标准模式,IE 8标准模式,IE 9几乎标准模式,IE 9标准模式和IE 9 XML模式。IE10有11种模式:IE 5.5 quirks模式,IE 7标准模式,IE 8几乎标准模式,IE 8标准模式,IE 9几乎标准模式,IE 9标准模式,IE 9 XML模式,IE 10怪癖模式,IE 10差不多标准模式,IE 10标准模式和IE 10 XML模式。模式的选择取决于各种来源的数据:doctype,ameta元素,HTTP标头,定期从Microsoft下载的数据,Intranet区域,用户进行的设置,Intranet管理员进行的设置,帧父级的模式(如果有)以及用户可以切换的UI按钮。(对于嵌入引擎的其他应用程序,该模式还取决于嵌入应用程序。)

幸运的是IE8和IE9大致像其他浏览器一样使用doctype嗅探,IE10使用doctype嗅探与其他浏览器完全一样,如果以下所有要点都是真的:

  • X-UA-Compatible作者没有设置HTTP标头。
  • X-UA-Compatible meta作者没有设置标签。
  • Microsoft尚未将该站点的域名置于黑名单中
  • 内部网管理员尚未将该网站置于黑名单中。
  • 用户未按下“兼容性视图”按钮(或以其他方式将域添加到用户特定的黑名单)。(Metro IE10没有此UI,但桌面IE10中的UI也会影响Metro模式下的行为。)
  • 该站点不在Intranet区域中。
  • 用户未选择在IE7中显示所有站点。
  • 该页面不是由兼容模式页面构成的。

对于除两种X-UA-Compatible情况之外的其他点,IE8和IE9执行像IE7一样的doctype嗅探。IE7仿真称为兼容性视图。

在这种X-UA-Compatible情况下,IE8和IE9的行为与其他浏览器完全不同。有关IE8的行为,请参阅本页的附录PDFPNG格式的流程图。(与其他浏览器的图表对比为PDF。)还有一个IE 5.5到9(可能带有Chrome Frame)模式的统一图表PDF格式。(我打算稍后再制作一张IE9视图。)

遗憾的是,如果没有X-UA-CompatibleHTTP标头或meta标签,即使您使用了正确的doctype,IE8和IE9也会让用户意外地将您的页面从最标准模式下降到模拟IE7标准模式的IE7模式。更糟糕的是,内部网管理员可能会这样做。此外,Microsoft可能已将您使用的整个域列入黑名单(例如mit.edu!)。

要抵消这些影响,doctype是不够的,您需要X-UA-CompatibleHTTP标头或meta标记。

简而言之:以下是为新文档选择X-UA-CompatibleHTTP标头或meta标记的简单指南,该 text/html文档已经具有在其他浏览器中触发标准模式或几乎标准模式的doctype

您的域名不在Microsoft的黑名单中,您更关心的是不必拥有特定于浏览器的内容,而不是确保用户无法将呈现回归到IE7行为

您不需要包含X-UA-CompatibleHTTP标头或meta标记。

您的域名在Microsoft的黑名单中,您的域名(如iki.fi!)有其他作者,其破坏的网站可能会诱使用户启用整个域的兼容性视图,您担心Google或Digg构建您的网站或者您想要确保用户无法启用兼容性视图

meta在页面上<meta http-equiv="X-UA-Compatible" content="IE=Edge">(在任何script元素之前!)包含以下元素(在HTML5中无效)或在页面上设置以下HTTP标头:X-UA-Compatible: IE=Edge

您的网站在IE7中工作但在IE8或IE9中断

首先,meta在页面上包含以下元素(在HTML5中无效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">(在任何script元素之前!)或在页面上设置以下HTTP标头:X-UA-Compatible: IE=EmulateIE7

然后修复您的网站,不要依赖非标准的IE7行为并迁移到IE=Edge

您的网站在IE8中工作但在IE9中断

首先,meta在页面上包含以下元素(在HTML5中无效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">(在任何script元素之前!)或在页面上设置以下HTTP标头:X-UA-Compatible: IE=EmulateIE8

然后修复您的网站,不要依赖非标准的IE8行为并迁移到IE=Edge

您的网站在IE9中工作但在IE10中中断

首先,meta在页面上包含以下元素(在HTML5中无效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">(在任何script元素之前!)或在页面上设置以下HTTP标头:X-UA-Compatible: IE=EmulateIE9

然后修复您的网站,不要依赖非标准的IE8行为并迁移到IE=Edge

谷歌Chrome框架并发症

谷歌Chrome Frame是IE 6,7,8和9的浏览器扩展和浏览器插件的组合,它使用IE使用的网络堆栈将谷歌浏览器的引擎添加到IE的用户界面外壳中。安装后,IE默认情况下运行正常。但是,网页可以选择使用X-UA-CompatibleHTTP标头或元标记调用Chrome引擎而不是IE引擎。

指定chrome=1X-UA-Compatible是否已安装Chrome Frame的调用Chrome Frame的IE浏览器中的任何支持的版本。指定chrome=IE6仅在IE6中激活Chrome Frame,指定chrome=IE7仅在IE7和IE6中chrome=IE8激活Chrome Frame ,并仅在IE8及更低版本中激活Chrome Frame。

激活Chrome Frame的指令可以与用于控制IE引擎的指令(如果没有安装Chrome Frame)通过用逗号或分号分隔来组合:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8">

在为页面激活Chrome框架后,Chrome的四种模式(标准,几乎标准,怪异和XML)中的一种选择与普通Chrome一样。

使用Chrome Frame有几个重要原因:

  • Chrome Frame缺乏IE的辅助功能支持。激活Chrome框架后,IE中的内容区域将成为可访问性黑洞。也就是说,屏幕阅读器和Windows语音识别功能不适用于Chrome Frame。
  • 让您的网站告诉用户他们应该安装Chrome Frame,这会使网站的安全反模式告诉用户他们应该让某人在他们的计算机上安装特权本机代码插件才能使用网站。

附录:对使用XML的实现者和规范编写者的辩护

请不要将doctype嗅探带到XML。

Doctype嗅探是标签汤问题的标签汤解决方案。 在HTML 4和CSS2规范被编写为一种启发式 方法来区分遗留文档与作者可能期望符合行为的文档之后,设计了Doctype嗅探。

有时建议在XML端使用doctype嗅探以及调度到不同的处理程序,识别正在使用的词汇表或激活功能。这是一个坏主意。调度和词汇识别应基于名称空间,并且功能激活应基于显式处理指令或元素。

引入良好构造的整个概念以允许DTDless解析XML,并且通过扩展,允许无文档文档。在正式的术语中,如果两个XML文档具有相同的规范形式,并且应用程序以不同方式对待它们(并且差异不是由于选择不处理外部实体),则应用程序可能会被破坏。实际上,如果两个XML文档导致向SAX2报告相同的内容(qnames被忽略)ContentHandler 并且应用程序以不同的方式处理文档,应用程序可能会被破坏。考虑到作为Web作者,您不能相信每个解析您的页面的人都使用解析外部实体的XML处理器(即使某些浏览器似乎这样做是因为他们将某些公共ID映射到实体定义的简化DTD),请插入doctype用于Web的XML通常是毫无意义的,通常是出于货物养成习惯。(您仍然可以使用W3C验证器的DTD覆盖功能验证DTD,尽管W3C验证器会说结果只是暂时有效。或者更好的是,您可以使用RELAX NG验证,它不会使用模式引用污染文档。)只需要嗅探文档类型就很愚蠢,即使这是HTML实际情况。

而且,当较低级别的规范定义了两个等价的东西时,更高级别的规范不应该试图给这两个东西赋予不同的含义。考虑<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。如果删除了公共标识符,则仍然指定相同的DTD,因此,doctype <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 与先前的doctype相同。他们应该被嗤之以鼻吗?这个想法可以进一步发展。假设DTD被复制到example.com并命名为foobar.dtd : <!DOCTYPE html SYSTEM "http://example.com/foobar.dtd">. 那怎么可能被嗅到?意思是一样的。整个DTD甚至可以内嵌粘贴!

换一种方式,如果你有#include "foo.h",你不应该任何魔法绑定的名称foo.h,因为它应该是允许粘贴的内容foo.h 在线或复制的内容foo.h ,以bar.h 和说#include "bar.h"

我不打算用HTML和SGML制作相同的参数的原因是Web浏览器不使用真正的SGML解析器来解析HTML,所以我认为假装正在处理SGML并不是很有用。但是,如果您还不确定,请参阅W. Eliot Kimber关于此事的comp.text.sgml帖子

附录:中国某些文档的处理 text/html

在下表中,Quirks模式,标准模式和几乎标准模式分别由Q,S和A表示。当浏览器只有两种模式时,标准模式标记为“S”,如果表格单元格中的行高如Mozilla的标准模式,则为“A”,如果表格单元格中的行高度与Mozilla的Almost一样工作标准模式。

请注意,使用XML内容类型提供的XHTML以XML模式呈现。

此表的目的不是建议表中列出的所有文档类型都是新页面的合理选择。此表的目的是显示我基于我的建议的数据。

列标题中使用以下简写表示法:

NS6

Mozilla 0.6 ... 0.9.4和Netscape 6.0 ... 6.2.3

老莫兹

Mozilla 0.9.5到1.1 alpha和Mozilla 1.0

Moz&Safari&Opera 10&IE10和HTML5

Mozilla 1.0.1,Mozilla 1.1 beta及更高版本,Firefox,Netscape 7及更高版本,Safari 0.9及更高版本,Opera 10及更高版本,Chrome,Konqueror 3.5,IE10,HTML5指定行为

Opera 9.0

Opera 9.0 ... 9.20

IE 8,IE 9和Opera 9.5

IE 8或IE 9默认情况下没有X-UA-Compatible覆盖或兼容性视图覆盖(“A”表示IE8的IE8几乎标准模式和IE9的IE9几乎标准模式),Opera 7.5 ... 8.54和9.5 ... 9.6

IE 7和Opera 7.10

Windows IE 7,启用了兼容性视图的IE 8但没有X-UA-Compatible覆盖(在本例中为“A”表示IE7模式)和Opera 7.10 ... 7.23

IE 6和Opera 7.0

Windows IE 6和Opera 7.0 ... 7.03

Mac IE 5

Mac IE 5.0 ... 5.2.3

Konq 3.2

Konqueror 3.2.2 ... 3.3(可能还有3.1 ...... 3.2.1;我无法确认)

文档类型 NS6 老莫兹 Moz&
Safari&
Opera 10 

IE10 
和HTML5
Opera 9.0 IE 8,IE 9和Opera 9.5 IE 7和Opera 7.10 IE 6和Opera 7.0 Mac IE 5 Konq 3.2
没有 Q Q Q Q Q Q Q Q Q
<!DOCTYPE html> Q 小号 小号 小号 小号 一个 一个 一个  
<!DOCTYPE html SYSTEM "about:legacy-compat">  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> Q Q Q Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 小号 小号 小号 小号 小号 一个 一个 Q 一个
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/strict.dtd"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> Q Q Q Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> Q Q Q Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 小号 小号 一个 一个 一个 一个 一个 一个 Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> Q 小号 一个 一个 一个 一个 一个 一个 Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> Q Q Q Q 一个 一个 一个 一个 Q
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 小号 小号 小号 小号 小号 一个 一个 一个 一个
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 小号 小号 一个 一个 一个 一个 一个 一个 Q
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
小号 小号 小号 小号 小号 一个 Q 一个 Q
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
小号 小号 小号 小号 小号 一个 Q 一个 Q
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
小号 小号 小号 小号 小号 一个 Q 一个 Q
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
小号 小号 一个 一个 一个 一个 Q 一个 Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN"> Q 小号 小号 Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN"> Q 小号 小号 小号 小号 一个 一个 一个 Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HTML//EN"> 小号 小号 小号 Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HyperText Markup Language//EN"> 小号 小号 小号 小号 小号 一个 一个 一个 Q

历史笔记

Mozilla的doctype嗅探代码在2000年10月,2001年9月和2002年6月发生了重大变化。本文档描述了Mozilla版本在2000-10-19及更高版本(以及Netscape 6.x上)在ftp.mozilla.org上提供的情况。 )。本文档没有说明doctype嗅探在Mozilla M18(和Netscape 6.0 PR3)中的工作方式。自第一次公测以来,Safari的doctype嗅探代码也发生了重大变化。本文档未涵盖v73之前版本的行为。0.9。

在版本3.5之前,Konqueror的doctype嗅探代码似乎来自Safari的早期版本。Konqueror现在匹配其doctype嗅探代码来自Mozilla的Safari。

从表中可以看出,Opera的doctype嗅探已经逐渐从IE变为Mozilla式,尽管Opera 9.5和9.6已经退步。与此同时,Opera的Quirks模式的布局行为已经从模仿IE 6的Quirks模式转向Mozilla的Quirks模式。

附录:IE8的模式选择

开始:转到“X-UA兼容meta?”。

X-UA兼容meta

IE = 7:使用IE7标准。

IE = EmulateIE7:转到“Quirky还是No Doctype?(兼容模式)”。

IE = IE8或IE = IE7或IE = a或IE = EmulateIE8或不存在或script首先:转到“X-UA兼容的HTTP标头?”。

IE = 8或IE = Edge或IE = 99或IE = 9.9:转到“几乎标准Doctype?”。

IE = 5:使用Quirks(IE 5.5)。

兼容X-UA的HTTP标头?

IE = 7:使用IE7标准。

IE = EmulateIE7:转到“Quirky还是No Doctype?(兼容模式)”。

IE = IE8或IE = IE7或IE = a或IE = EmulateIE8或不存在:转到“显示所有网站...首选设置?”。

IE = 8或IE = Edge或IE = 99或IE = 9.9:转到“几乎标准Doctype?”。

IE = 5:使用Quirks(IE 5.5)。

古怪还是没有Doctype?(兼容模式)

是:使用Quirks(IE 5.5)。

否:使用IE7标准。

显示所有网站...首页设置?

是的:转到“Quirky or No Doctype?(兼容模式)”。

否:转到“显示Intranet站点...首选项?”。

显示Intranet站点... Pref Set?

是:转到“站点是否在Intranet区域?”。

否:转到“MS维护列表上的域名?”。

该网站是否位于Intranet区域?

是的:转到“Quirky or No Doctype?(兼容模式)”。

否:转到“MS维护列表上的域名?”。

MS维护列表上的域名?

是的:转到“Quirky or No Doctype?(兼容模式)”。

否:转到“框架兼容模式页面?”。

由兼容模式页面框架?

是的:转到“Quirky or No Doctype?(兼容模式)”。

否:转到“压缩兼容模式按钮?”。

按下兼容模式按钮?

是的:转到“Quirky or No Doctype?(兼容模式)”。

不:去“古怪或没有Doctype?(IE8)”。

古怪还是没有Doctype?(IE8)

是:使用Quirks(IE 5.5)。

不:转到“几乎标准的Doctype?”。

几乎标准Doctype?

是的:使用IE8几乎标准。

否:使用IE8标准。

这些步骤以PDFPNG格式的流程图提供。

致谢

感谢Simon Pieters,Lachlan Hunt和Anne van Kesteren帮助纠正各种Opera版本的模式表以及他们的评论。感谢Simon Pieters提供IE8流程图的文本替代方案。


版权所有 Henri Sivonen

最近更新时间:2013-03-09

主页

猜你喜欢

转载自blog.csdn.net/weixin_42400955/article/details/83348263
今日推荐