我们在HTML文档书写中,在开头总会添加一句<!DOCTYPE>,我们大概粗略的知道这是用来标识文档类型的。而在老版本的HTML中,如HTML4规范中,需要写:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
但这样的语句很难记忆,它想告诉浏览器“这个文档是XHTML1.0的文档”,在HTML5中简化了规范。
但是,只是看到这个DOCTYPE,可能不知道到底要怎么告诉浏览器具体的信息,所以这到底该怎么解释?
其实这个DOCTYPE并不是写给浏览器看的,而是给验证器,我们在开头写下XHTML1.0是为了让验证器按照这个来验证文档。
而对浏览器来说,什么版本都无所谓,浏览器不会因为某个标签不存在某个版本的规范中而不被解析,因为浏览器遵守伯斯塔尔法则——“对自己严格,对别人宽容”,所以浏览器会支持所有版本的HTML,会尽量让我们任性,所以这就是为什么我们书写的HTML很多并不规范,但任然不影响它们在网页中被正常解析(但为了养成一个良好的习惯,我们也应该严格要求自己)。话再说回来,验证器会在意这个格式类型,这就是DOCTYPE存在的原因。
HTML5 不基于 SGML,所以不需要引用 DTD。
在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。
SGML:标准通用标记语言。
HTML5的一个设计原理,就是要求它前后兼容,以往的将来的都应该兼容,因此把一个版本号放在DOCTYPE里面没有多大的意义,对验证器也一样。
但是也不是说DOCTYPE完全可以不用存在。当初微软在引入CSS的时候,它的浏览器率先支持了CSS,也推出了自己的盒子模型标准。但是标准发布后,两种盒子模型截然不同。微软希望支持标准,也希望能保留自己的东西,所以就利用了DOCTYPE。在文档中加入DOCTYPE就表示触发标准模式。但是这不是DOCTYPE发明的本意。
总之,HTML5希望给用户一个简短的DOCTYPE标签。