原文: What is the DOCTYPE Declaration in HTML?

HTML 文档类型声明,也被称为 DOCTYPE,是每个 HTML 或 XHTML 文档中需要的第一行代码。DOCTYPE 声明是给 Web 浏览器的一个指令,说明网页是用什么版本的 HTML 写的。这可以确保不同的网络浏览器对网页的解析方式是相同的。

在 HTML 4.01 中,DOCTYPE 声明是指文档类型定义(DTD)。DTD 定义了一个 XML 文档的结构和元素。因为 HTML 4.01 是基于标准通用标记语言(SGML)的,所以在 DOCTYPE 声明中提到 DTD 是必要的。

此外,HTML 4.01 的 doctype 要求声明 stricttransitionalframeset  DTD,每一种都有不同的使用情况,如下所述。

  • 严格型 DTD:用于排除某些属性和元素的网页——W3C 希望随着 CSS 支持的增加而逐步淘汰这些属性和元素。
  • 过渡型 DTD:用于包括某些属性和元素的网页——W3C 希望随着 CSS 支持的增加而逐步淘汰这些属性和元素。
  • 框架型 DTD:用于带有框架的网页。

相比之下,HTML5 DOCTYPE 的声明要简单得多:它不再需要引用 DTD,因为它不再基于 SGML。请看下面的例子来比较 HTML4.01 和 HTML5 DOCTYPE

示例

HTML5 及以后的 doctype 语法:

<!DOCTYPE html>

严格型 HTML 4.01 的 doctype 语法:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

过渡型 HTML 4.01 的 doctype 语法:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

框架型 HTML 4.01 的 doctype 语法:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

历史

在 HTML 的形成期,web 标准还没有达成一致。浏览器供应商会以他们想要的方式创建新的特性。人们很少关注竞争性的浏览器。

其结果是,web 开发者不得不选择一个浏览器来开发他们的网站。这意味着网站在不支持的浏览器中无法很好地呈现。这种情况不能再继续下去了。

W3C(万维网联盟)制定了一套 web 标准来处理这种情况。所有的浏览器供应商和 web 开发人员都应该遵守这些标准。这将确保网站在不同的浏览器上都能很好地呈现。

该标准所要求的变化与一些现有的做法有很大的不同。遵循这些标准会破坏现有的不符合标准的网站。

为了解决这个问题,供应商开始在他们的浏览器中设置渲染模式。web 开发者需要在 HTML 文档的顶部添加一个 doctype 声明。doctype 声明将告诉浏览器对该文档使用何种渲染模式。

各个浏览器通常有三种不同的渲染模式:

  • 完全标准模式是根据 W3C 网络标准来渲染页面。
  • 怪异模式以不符合标准的方式渲染页面。
  • 准标准模式接近于完全标准模式,但具有支持少量怪异的特性。

在现代的 HTML5 时代,web 标准在所有主要的浏览器中都得到了充分的实施。网站一般都是以符合标准的方式开发的。正因为如此,HTML5 doctype 声明的存在只是为了告诉浏览器以完全标准模式来渲染文档。

使用

除了注释之外,doctype 声明必须是 HTML 文档中的第一行代码,如果需要,注释可以放在前面。对于现代 HTML5 文档,doctype 声明应该如下:

<!DOCTYPE html>

更多信息

虽然不再普遍使用,但还有几个其他的 doctype 声明类型来自以前的 HTML 版本。也有专门针对 XML 文档的版本。要想了解更多关于这些类型的信息,并查看每种类型的代码示例,请看维基百科的文章

W3 上的解释

MDN 词汇

W3Schools

关于怪异模式和标准模式的解释