DOCTYPE的混杂模式(quirks mode)和标准模式(standards mode)

来源:互联网 发布:c语言刷题网站 编辑:程序博客网 时间:2024/04/20 22:36

写在前面:文章主要参考:http://www.cnblogs.com/imxiu/p/3541932.html,《javascript高级程序设计(第三版)》,《前端面试江湖》。

首先,先提出一个问题:在HTML5中可以使用XHTML的语法么?

答案是可以的,因为HTML5向下兼容所有存在HTML的语法。通过声明头部DTD来设置怪异模式(也称为混杂模式)标准模式。

标准模式:

标准模式可以让IE的行为更接近于标准行为,混杂模式会让IE的行为与(包含非标准特性的)IE5相同。
在IE引入文档模式的概念后,其他的浏览器页纷纷效仿。在此之后,IE又提出一种所谓的准标准模式(almost standards mode)。这种模式下的浏览器特性又很多都是符合标准的,其中,不标准的地方主要在处理图片的间隙的时候(在表格使用图片的问题最为明显)。

声明:

如果在文档的开始处没有发现文档的类型的声明,所有的浏览器都会默认的开启混杂模式,但是采取混杂模式不是什么值得推荐的做法,因为不同的浏览器在这种模式下的行为差异很大。(建议可以使用dreamwear来进行观察各个版本的不同情况)
对于标准模式, 可以使用下面任何一种文档类型进行开启:
html5

<!DOCTYPE html>

html4.01严格型

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

xhtml1.0严格型

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

而对于准标准型模式,则可以通过过渡型(transitional)或者框架集型(frameset)文档类型来触发。
html4.01过渡型:

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

html4.01框架集型:

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

xhtml1.0过渡型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

xhtml1.0框架集型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

准标准模式和标准模式非常接近,他们的差异几乎可以忽略不计。因此有人提到标准模式时,有可能是指这两种模式的任何一种。
混杂模式可以简单的理解为:不写DOCTYPE。就这么简单!

表现差异:

首先,混杂模式是不可取的,因为其没有兼容性可言。在IE(IE6~IE9)中,混杂模式即使用IE5.5内核来解析并渲染页面。其次,近似标准模式是在尽可能遵循标准的基础上兼容部分非标准代码,比如一些已经弃用的标签等。标准模式则是对统一标准实现最好的模式,它要求标签必须闭合(唯一不需要闭合的就是DOCTYPE标签),不能使用已经废弃的标签等等。目前,使用最多的DOCTYPE声明为过渡型HTML或XHTML,因为它能最大话的兼容一些老代码。不过,技术领先的公司(比如google、facebook、twitter等都如此)都已经使用了html5的DOCTYPE声明,即<!DOCTYPE html>,它所触发的模式与严格型HTML或严格型XHTML所触发的模式完全相同,但好处是节省代码且向前兼
容(HTML5时代)
。(重要

判断当前的浏览器模式:

document.write(document.compatMode == "CSS1Compat" ? "当前处于标准模式" : "当前处于混杂模式");

阅读全文
0 0
原创粉丝点击