aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/quirks_mode_and_standards_mode/index.html
blob: 04e0eabb4f4cd41cfeb1a942c4c38b696670c798 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
title: Quirks Mode and Standards Mode
slug: Quirks_Mode_and_Standards_Mode
---
<p>在web产生初期, <span class="long_text short_text" id="result_box" lang="zh-CN"><span>网页</span><span>通常被</span><span></span><span></span><span>两个版本</span></span>: 其中一个是为网景公司的 Netscape Navigator浏览器而写, 另外一个是为微软公司的 Internet Explorer浏览器而写. 随后,当W3C组织制定了web标准,各浏览器并不能立即的严格按标准执行,因为这样做会让一些已经存在的不符合新标准的网页无法正常显示.为此<span class="long_text short_text" id="result_box" lang="zh-CN"><span>,</span><span>浏览器</span><span>推出</span><span></span><span>两种</span><span>模式来</span><span>分别对待</span><span></span><span></span><span>符合标准的</span><span>网也与</span><span>旧的标准指定之前遗留的</span><span>网页</span><span>.</span></span></p>
<p>如今,浏览器的渲染引擎已发展成为拥有三种渲染模式:quirks mode, almost standards mode, 和full standards mode. 在<strong>quirks mode(</strong>混杂模式<strong>)</strong>中,渲染引擎会模拟Navigator 4 和 Internet Explorer 5这些古老浏览器的不标准的渲染行为来渲染网页,以防止现代浏览器不能正常渲染已经存在的一些古老网页.在<strong>full standards mode(标准规范模式)</strong>中,渲染引擎会尽量使用HTML 和 CSS 规范规定的行为来渲染网页.在<strong>almost standards mode(接近标准模式)</strong>中,渲染引擎有极少数行为不遵循标准.</p>
<h3 id="How_does_Mozilla_determine_which_mode_to_use.3F" name="How_does_Mozilla_determine_which_mode_to_use.3F">浏览器如何决定使用何种模式?</h3>
<p>对于HTML文档,浏览器使用该文档开头定义的DOCTYPE来决定是否使用quirks mode还是standards mode来渲染. 为了让你的网页完全按照full standards mode被渲染, 请确保页面开始处包含如下例子中的DOCTYPE:</p>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=UTF-8&gt;
    &lt;title&gt;Hello World!&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>例子中的DOCTYPE是这样定义的:<code>&lt;!DOCTYPE html&gt;</code>,这是有史以来最简洁的DOCTYPE了,而且也是HTML5规范所推荐的写法.早起版本的HTML标准还推荐了其他的一些DOCTYPE写法,不过.<code>只有在&lt;!DOCTYPE html&gt;这样的</code>DOCTYPE定义下,才可以很好的保证所有浏览器都会按照full standards mode去渲染网页,即使是老掉牙的Internet Explorer 6也会如此.再没有什么理由去使用更复杂的DOCTYPE了,因为使用它们可能让你的网页触发一些浏览器的almost standards mode 或者 quirks mode.</p>
<p>确保你已经将DOCTYPE 放在HTML文档的最开始处,如果DOCTYPE前面放置了注释或XML声明等其他元素,Internet Explorer 9或更低版本将会按照quirks mode渲染该网页.</p>
<p>在HTML5中,使用DOCTYPE的唯一目的就是要激活full standards mode.旧版本的HTML标准给DOCTYPE添加了额外的意义,但是除了在quirks mode 和 standards mode之间切换,没有浏览器使用DOCTYPE做过其他的任何事情.</p>
<h4 id="XHTML">XHTML</h4>
<p>如果你将自己的网页 <code>Content-Type</code> HTTP头的值设定为 <code>application/xhtml+xml</code> MIME类型,你不需要在网页文档内部定义任何DOCTYPE就可以开启standards mode渲染网页.这是由于<code>Content-Type</code> HTTP头的优先级是最高的.但是这样的设置会导致Internet Explorer 8及其以下版本因不认识如上的MIME类型而显示下载文件的窗口,Internet Explorer 9及其以上版本解决了这个问题.</p>
<p>如果你将自己的XHML网页的<code>Content-Type</code> HTTP头设定为<code>text/html的</code>MIME类型,浏览器将会按照HTML文件去读取它,如果想使用standards mode,你必须指定DOCTYPE.</p><h3 id="What_are_the_differences_between_the_modes.3F" name="What_are_the_differences_between_the_modes.3F">不同模式之间的差别</h3>
<p>查看 <a href="/en/Mozilla_Quirks_Mode_Behavior" title="en/Mozilla_Quirks_Mode_Behavior">list of quirks</a><a href="/en/Gecko's_&quot;Almost_Standards&quot;_Mode" title="en/Gecko%27s_%22Almost_Standards%22_Mode">almost standards mode</a> 了解不同模式之间的差别.</p>
<p>{{ languages( { "en": "en/Quirks_Mode_and_Standards_Mode" } ) }}</p>