======================================================
注:本文源代码点此下载
======================================================
我们都知道,在编写一个标准化网页时,第一行的文档定类型义是必须的。其缘由是,浏览器厂商为了保证标准化之后浏览器可以向后兼容,即依然可以正确解析过去没有按照标准规范编写的网页,提供了两套模式解析方案:标准模式和怪异模式。
要简单介绍这两种模式的不同之处,有一个经典的例子,就是ie框模型的解析。怪异模式下元素的宽度包括了padding和border的总和,而标准模式下不会包括它们。
所以,我们之后必须要在网页第一行写上类似这样的文档类型定义,来保证浏览器会以正确模式来解析网页:
另外,也提一下一些细节:
就算写了文档类型定义,但是如果在文档类型定义之前出现非空格和换行字符,浏览器也会激活怪异模式。
激活怪异模式的方式有很多种,不同浏览器有不同的激活方式。但是不写文档类型定义是最通用也是最简单的一种方式。
不要认为写了文档类型定义就表示一定不进入怪异模式,因为有某些文档类型定义方式就是用来激活怪异模式的。这篇文章《activating browser modes with doctype》有详细讲解。
许多高版本的现代浏览器已经不能进入怪异模式了,这倒也不是什么坏事。
我估计很多人在之前都会和我一样有一个误区:要让网页使用标准模式来解析,必须完整一字不错地把标准模式的文档类型定义写出来。这个想法倒没有错,错的是我们还认为,如果写错了,网页可能会进入怪异模式。而事实上,浏览器只要看到了文档类型定义标签:,就已经默认是标准模式(严格模式)了,然后它会继续看其他信息,如果信息正确,它会激活相应的解析模型,如果信息不正确或者索性没有下文了,那文档就会直接按照标准模式来解析。
所以,我们在编写html5网页的时候,用来声明文档类型定义是有两层含义的:
对于尚未支持html5的浏览器,它无法获得具体文档类型定义,默认激活标准模式,它会按照标准模式来解析文档
对于已经支持html5的浏览器,它会检测到这是html5的文档类型声明,激活相应解析模式,使html5特性可以表现出来
参考资料
doctype switches support in opera presto 2.6
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/