这几天的笔试面试有几次涉及到了这个知识点,所以今天就来总结总结,有错误可以指出,大家一起交流,共同进步。
<!DOCTYPE>即文档类型声明,它的作用就是告诉浏览器的解析器应该以什么样的文档类型定义(DTD)来解析文档。
HTML 4.01规定了DTD有三种类型:strict,transitional,frameset
其中:strict:如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表(CSS)配合使用。
<!doctype html public "-/w3c/dtd html 4.01/en" "http://www.w3.org/tr/html4/strict.dtd">
transitional:Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 HTML 的呈现特性时,请使用此类型。
<!doctype html public "-/w3c/dtd html 4.01 transitional/en" "http://www.w3.org/tr/html4/loose.dtd">
frameset:Frameset DTD 应当被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD。
<!doctype html public "-/w3c/dtd html 4.01 frameset/en" "http://www.w3.org/tr/html4/frameset.dtd">
由于HTML5不基于SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为,而HTML4.01基于SGML,所以需要对DTD进行引用。
浏览器对页面的渲染(对css的解析)分为两种模式:标准模式和怪异模式,所谓的标准模式是指,浏览器按W3C标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。
当我们不使用<!DOCTYPE>或者使用错误的<!DOCTYPE>时,浏览器将会按照怪异模式解析文档,因此在不同的浏览器中页面呈现的方式有所不同或者是导致其他更加严重的后果,所以为了能够最大的兼容不同的浏览器,我们要养成正确使用<!DOCTYPE>的习惯,在HTML5之前最好都采用strict类型。
严格模式和怪异模式具体有什么差别呢?举例如下:
标准模式中IE6不认识!important声明,IE7、IE8、Firefox、Chrome等浏览器认识;而在怪异模式中,IE6/7/8都不认识!important声明。
这只是其中的一个差异,实际上还存在其他的一些差异,比如对盒子模型的解析等等。
参考:http://www.cnblogs.com/jenry/archive/2013/01/05/2846557.html
http://www.cnblogs.com/xiaomifeng/p/4502940.html