dtd(document type definition,文档类型定义)是一系列的语法规则, 用来定义xml或(x)html的文件类型。浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。
事实上dtd可以定义所有 sgml语族的文档类型,但由于太过繁琐, xml schema反而更加流行。
多数html编辑器都会为我们添加一行doctype声明,但doctype却是我们最容易忽略的部分。 下面我们会看到,doctype声明 并不是可有可无的。
doctype doctype是用来声明文档类型和dtd规范的,一个主要的用途便是文件的合法性验证。 如果文件代码不合法,那么浏览器解析时便会出一些差错。html编辑器通常也会在语法高亮的同时提供合法性验证。
doctype声明包括标准版本和一个dtd文件的uri。常用的doctype声明有以下几种:
以下代码来自 http://www.w3school.com.cn/tags/tag_doctype.asp
html 5
html 4.01 strict 该 dtd 包含所有html 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(framesets)。
html 4.01 transitional 该 dtd 包含所有html 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(framesets)。
浏览器模式 为了能够很好地显示满足标准的页面,又能最大程度兼容不合法的html。 浏览器厂商一般会提供两种浏览器模式:
标准模式(standards mode):浏览器根据标准规约来渲染页面。 混杂模式(quirks mode):浏览器采用更加宽松的、向后兼容的方式来渲染页面。 混杂模式下,浏览器会模仿旧浏览器的行为,比如ie6,在此基础上兼容新的标准特性。 混杂模式又称兼容模式、怪异模式等。
doctype切换 浏览器根据不同的doctype选择不同的渲染方法就叫做 doctype切换。 其实doctype切换就是用来识别和兼容旧网页的。
以下情况浏览器会采用标准模式渲染:
给出了完整的doctype声明 doctype声明了strict dtd doctype声明了transitional dtd和uri 以下情况浏览器会采用混杂模式渲染:
doctype声明了transitional dtd但未给出uri doctype声明不合法 未给出doctype声明 如果你是使用最新标准编写的页面但未给出doctype声明,这时就可能会出现一些怪异的行为。 例如盒模型不正确、窗口的 size不正确等问题。所以,尽量为你网站的所有页面都给出合法的doctype声明。
