网页HTML之<!DOCTYPE>详解

        DTD——即DOCTYPE,或者称为 Document Type Declaration(文档类型声明,缩写DTD)通常情况下,DOCTYPE 位于一个 HTML文档的最前面的位置,位于根元素HTML的起始标签之前。这样一来,在浏览器解析 HTML 文档正文之前就可以确定当前文档的类型,以决定其需要采用的渲染模式(不同的渲染模式会影响到浏览器对于 CSS 代码甚至 JavaScript 脚本的解析)。XHTML1.0提供了三种DOCTYPE可选择:

过渡型(Transitional )

严格型(Strict )

框架型(Frameset )

        <!DOCTYPE> //文档类型声明(浏览器并不只支持 HTML,还支持 XML 类型的文档;对 HTML 文件来说,浏览器使用文件开头的 DOCTYPE 来决定使用怪异模式处理或标准模式处理)

怪异模式:

        在很久以前的网络上,页面通常有两种版本:为网景的 Navigator 准备的版本,以及为微软的 Internet Explorer 准备的版本。当 W3C 创立网络标准后,浏览器不仅要按照新的标准去支持HTML和CSS,还要对老旧的网页进行兼容,而这一前一后的两种支持方式,就是我们所称的标准模式(StandardMode,)和怪异模式(QuirksMode)。浏览器采用了两种模式,用以把能符合新规范的网站和老旧网站区分开。

对于现代规范的网页,浏览器一般用标准模式去解析和渲染,而对于古老的网页,浏览器就会使用怪异模式去渲染.而在ie的开发者工具中,你可以自定义改变文档模式。

目前浏览器的排版引擎使用三种模式:

怪异模式(Quirks mode):

        排版会模拟 Navigator 4 与 Internet Explorer 5 的非标准行为。(为了避免“破损”那些按照在20世纪90年代末风行的实践创作的页面,浏览器违背了现代的Web格局规范。不合的浏览器实现了不合的怪癖行动。IE6、7和8中,怪癖模式有效地冻结在IE5.5 。其他浏览器中,怪癖模式是标准模式的少量偏移)

触发格式:

(第一行不写,或写错DOCTYPE就能触发)

接近标准模式(Almost standards mode):

        只有少数的怪异行为被实现。(它遵守传统的做法来实现表格单位格的垂直尺寸而不是严格的遵守CSS2规范,更接近Mozilla的准标准模式而不是Mozilla的标准模式)

触发格式:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN">

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">

标准模式(Standards mode):

        会尽量执行 HTML 和 CSS 规范所指定的行为。(浏览器按W3C标准规范解析执行代码)

触发格式:

 <!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 HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- 兼容XHTML放弃的标签 -->

        <!DOCTYPE html>是所有可用的 DOCTYPE 之中最简单的,也是 HTML5 所推荐的。HTML 的早期变种也属于推荐标准,不过,当今的浏览器都使用 DOCTYPE 标准模式,就算是早已过时的 Internet Explorer 6 也一样。目前,并没有正当的理由,去使用其他更复杂的 DOCTYPE。如果你使用其他的 DOCTYPE,你可能会面临触发接近标准模式或者怪异模式的风险。

        请确定你把 DOCTYPE 正确地置于 HTML 文件的顶端。如果有任何其他字符位于 DOCTYPE 之前,比如注释或 XML 声明,会导致 Internet Explorer 9 或更早期的浏览器触发怪异模式。

        在 HTML5 中,DOCTYPE 唯一的作用是启用标准模式。更早期的 HTML 标准中,DOCTYPE 会附加其他意义,但没有任何浏览器会将 DOCTYPE 用于怪异模式和标准模式之间互换以外的用途。

三种模式下的表现差异:

        首先,怪癖模式是不可取的,因为其没有兼容性可言。在IE(IE6-IE9)中,混杂模式使用IE5.5内核来解析并渲染页面。

      其次,准标准模式是在尽可能遵循标准的基础上兼容部分非标准代码,比如一些已经弃用的标签等。

      最后,标准模式则是对统一标准实现最好的模式,它要求标签必须闭合(唯一不需要闭合的就是DOCTYPE标签),不能使用已经废弃的标签等等。目前,使用最多的DOCTYPE声明为过渡型HTML或XHTML,因为它能最大化的兼容一些老代码。不过,技术领先的公司(比如google、facebook、twitter等都如此)都已经使用了html5的DOCTYPE声明,即<!DOCTYPE html>,它所触发的模式与严格型HTML或严格型XHTML所触发的模式完全相同,但好处是节省代码且向前兼容(HTML5时代)。