第一次看到这个doctype的时候,很疑惑为什么每一个html文件中都要带上它,这个doctype是要告诉浏览器什么吗?是规定HTML版本的吗?如果规定了一个版本之后之后HTML版本更新我们还需要更新自己项目中的HTML版本吗?doctype存在到底有什么意义?
实际上doctype并没有HTML版本区分的意思,那为什么文档一开头就要写doctype呢?这么写并不是为了给浏览器看而是写给验证器看的,是为了让验证器按照该doctype来验证我们的文档。
浏览器反倒是无所谓的,因为遵循伯斯塔尔法则,在接收的时候必须要开放,因此他不会检查任何格式类型,但验证器会,验证器才会关心格式类型,这就是doctype存在的意义。
而按照HTMLI5 的另一个设计原理,它必须向前向后兼容,兼容未来的HTML版本,不管是 HTML6. HTML7,还是其他版本,都要与当前的HTMLS兼容。因此,把一个版本号放在doctype里面没有多大的意义,对验证器也一样。
但是有一种情况下,使用doctype 会影响到浏览器,这也是为了达到某种特殊的目的才使用doctype。当初微软在引入CSS的时候,走在了标准的前头,他们率先在浏览器中支持CSS,也推出了自己的盒模型。后来标准发布了,但标准中使用了不一样的盒模型。微软想支持标准,但也想向后兼容自已过去推出的编码方式。于是,他们想出了一个非常巧妙的主意,那就是利用有效的doctype 触发标准模式。而不是兼容模型(quiks mode")。这个想法非常巧妙。我们今天也都是在这样做,在向文档中加入doctype时,就相当于声明了使用标准模式,但这并不是发明doctype的本意。这只是为了达到特殊的目的在利用doctype.
HTML5 规范的本质是不追求理论上的完美。HTML5所体现的不是给用户一个简短好记的doctype,好记的doctype也无法适应现在的浏览器,所以doctype不仅从理论上看简短好记,而且在实践中仍然可以触发标准模式。