本节书摘来自异步社区《HTML5+CSS3网页设计入门必读》一书中的第2章,第2.4节,作者: 【英】Jeremy Keith , 【美】Dan Cederholm 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 DOCTYPE:形式更简洁
文档类型声明(Document Type Declaration)简称为doctype,一直用于指定文档所编写的标记类型。
HTML 4.01的 doctype如下所示(»为自动换行标记):
<!DOCTYPE HTML PUBLIC »
"-//W3C//DTD HTML 4.01//EN" »
"http://www.w3.org/TR/html4/strict.dtd">
XHTML 1.0 的doctype如下所示:
<!DOCTYPE html PUBLIC »
"-//W3C//DTD XHTML 1.0 Strict //EN" »
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
这些doctype看起来并不易读,但它们以其独特的方式简单地说明了:“该文档用HTML 4.01编写”或“该文档用XHTML 1.0编写”。
如果doctype声称“该文档用HTML5编写”,那么按道理其中应该会出现数字5。但事实并非如此。HTML5的doctype如下所示:
<!DOCTYPE html>
该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。