日期:2014-05-17  浏览次数:20743 次

html5系列2-1 : DOCTYPE与渲染模式(一)

      DOCTYPE,全称Document Type(文档类型)。DOCTYPE标签用于告知浏览器文档使用哪种HTML或XHTML规范。<!DOCTYPE> 声明必须位于HTML源文件的第一行。如果它前面还有东西,哪怕只是一个空行,某些浏览器都会认为该页面没有DOCTYPE。

      目前主流的大多数网站都有<!DOCTYPE> 声明。可是,当我看到DOCTYPE标签的用法时,脑子里却冒出3个问题:
     (1) 为何要将 DOCTYPE 放在HTML源文件的第一行?
     (2) 假如一个网页没有 DOCTYPE 声明会怎样呢?
     (3) DOCTYPE 又从何而来呢?

      带着这些问题我们引出DOCTYPE 的由来。在Internet Explorer 5 for Mac 的开发过程中,微软发现新推出的浏览器虽然对标准的支持加强了,却造成一些旧的网页不能正确呈现。当时,占统治地位的浏览器是Netscape 4和Internet Explorer4。为了兼容这部分网页,微软提出了DOCTYPE,在浏览器渲染页面前,会首先检查DOCTYPE,如果没有DOCTYPE标签,则使用混杂模式 (quirks mode)进行渲染。如果有DOCTYPE标签,则使用标准模式(standards mode)。微软的这个方案很快得到了认可和推广,几乎所有的主流浏览器都有了这两种模式。之后,Mozilla在发布其浏览器的1.1版本时,发现有的网页尽管以标准模式进行渲染,可在部分细节上还依赖于某个混杂模式。为了更好的兼容这部分网页,Mozilla提出了准标准模式(almost standards mode)。

       DOCTYPE 的由来已经介绍完了,现在可以很轻松的回答那3个问题了:
      (1) 因为浏览器读取页面文件后首先要检查的就是DOCTYPE,所以DOCTYPE必须放在HTML源文件的第一行。
      (2) 假如一个网页没有 DOCTYPE 声明,那么浏览器会用混杂模式去渲染它。
      (3) DOCTYPE是微软在ie5发布时提出的。 

       总结下,渲染模式(rendering mode)分以下三种:
      (1)混杂模式 (quirks mode) 为了兼容90年代ie5发布之前的老网页。
      (2)标准模式(standards mode)HTML5中也将该模式称为"非quirks模式",用符合标准规范的方式去渲染页面文档。
      (3)准标准模式(almost standards mode)HTML5中也将该模式称为"有限quirks模式"(limited quirks mode)。可以将其理解为介乎混杂模式与标准模式之间的一种中间模式。该模式的大部分细节都与标准模式极其相似,但有一点却和混杂模式比较接近:the height calculations for line boxes and some of the inline elements in them(行框以及行框内的某些内联元素的高度计算)。这点会影响表格单元格内的图片布局。
(上面的这句英文引自https://developer.mozilla.org/en-US/docs/Gecko's_Almost_Standards_Mode)

        附上网络上截取的一张图,说明各浏览器与渲染模式之间的对应关系

         备注:该博文为原创博文,如果转发请注明出处。(max.li)