所谓DOCTYPE,最初是XML概念,即经过一个特定语法,作为一个元数据,来描述XML文档中许可出现元素,和各元素组成、嵌套规则等。具体概念能够在WIKI中中得到一个更具体结果。 不过在HTML中,DOCTYPE又有着部分不一样效果,其中之一就是著名触发浏览器标准模式功效。即假如没有DOCTYPE,浏览器会进入一个被称为Quirks模式怪异状态,在该模式下,浏览器盒模型、样式解析、布局等全部和标准要求存在差异。 需要注意是,所谓HTML标准、DOM标准等,只要求了在标准模式下概念和行为,正如文档组成中提到,DOCTYPE是一个HTML文档绝对不能够省略部分,所以就根本不存在“Quirks模式”这么概念。也正是因为标准中没有对Quirks模式做出任何要求,所以不一样浏览器在Quirks模式下处理也是不一样,应用Quirks模式可谓难上加难。 HTML4DOCTYPE 在HTML4标准中,DOCTYPE被归属于“HTML版本信息”一章中。在该章节中,标准指定了3种DOCTYPE: •严格模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML //EN" "">。 •过渡模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Transitional//EN" "">。 •框架模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Frameset//EN" "">。 在HTML4标准中,每一个DOCTYPE对应dtd文件全部是有正当URL指定,能够经过互联网进行下载。浏览器能够依据URL取得到dtd具体内容,并依据内容要求来解析文档。 现实是不一样 HTML4如同XML一样,是一个相当理想化标准。不过,现实往往并没有这么理想,试想下面HTML文档: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Frameset//EN" ""> <html> <head> <title>I'm not a frameset</title> </head> <body> <p>So what?</p> </body> </html> 这个文档采取了一个框架模式DOCTYPE,但其正文确没有使用任何<frame>元素,相对应地使用了应该由严格模式或过渡模式指定,标准HTML结构。那么在这种情况下,浏览器能做什么呢? 拒绝渲染该页面?不,浏览器不敢这么做,在猛烈市场竞争之中,假如所以而造成部分页面无法渲染话,就只能眼睁睁看着市场份额注入别家田了。所以浏览器顶多弱弱地报一个警告以示抗议,却依旧得乖乖地解析出这个文档并正确渲染。 这就是所谓浏览器“容错性”,实际上不管你DOCTYPE是什么,浏览器全部会以最大兼容能力去解析一个文档,并以最大努力让这个文档显示得符合开发者预期。而浏览器这一特征,也逐步让标准制订者开始意识到,DOCTYPE似乎真不怎么关键。所以,在HTML5中,DOCTYPE发生了一次重大改变…… HTML 5DOCTYPE 到了HTML 5了,这一改变相信多数人已经知道,就是HTML 5将DOCTYPE申明简化了,只需要<!DO