本节书摘来自异步社区《html5+css3网页设计入门必读》一书中的第2章,第2.4节,作者: 【英】jeremy keith , 【美】dan cederholm 更多章节内容可以访问云栖社区“异步社区”公众号查看。
文档类型声明(document type declaration)简称为doctype,一直用于指定文档所编写的标记类型。
html 4.01的 doctype如下所示(»为自动换行标记):
xhtml 1.0 的doctype如下所示:
这些doctype看起来并不易读,但它们以其独特的方式简单地说明了:“该文档用html 4.01编写”或“该文档用xhtml 1.0编写”。
如果doctype声称“该文档用html5编写”,那么按道理其中应该会出现数字5。但事实并非如此。html5的doctype如下所示:
该doctype是如此之短,甚至可以让人将其背诵下来。
这实在是太不可思议了!如果 doctype中不含有版本号,那么该如何指定其他版本的html呢?
第一次看到html5的doctype的时候,我认为这是高度傲慢的结果。心想:“难道他们真相信这就是标记规范的最终版了吗?”
然而事实上,html5的doctype是非常务实的。由于html5需要支持现有内容,所以其doctype可以应用于现有的html 4.01文档和xhtml 1.0文档。任何未来版本的html也需要支持html5中的现有内容,因此应用版本号来标记文档的观念是有缺陷的。
事实上,doctype并不那么重要。假设需要为一个文档提供html 4.01的doctype。如果该文档中包含来自另一个规范的元素,如html 3.2或html5,那么浏览器将仍然呈现该文档的这一部分。这是因为浏览器支持的是特性,而非doctype。
起初,文档类型声明(document type declaration)是为验证器而非为浏览器而设计的。浏览器仅在“doctype转换”的情况下才会关注doctype——“doctype转换”(doctypy switching)是一个聪明的小黑客,它根据是否存在合适的doctype来转换显示模式,即怪异模式(quirks mode)或标准模式(standard mode)。
为了确保浏览器以标准模式显示,至少需要html5的doctype。事实上,这是包含doctype的唯一原因。不用html5的doctype编写的html文档仍然是有效的html5。