什么是DOCTYPE?

180
  • 什么是 DOCTYPE,为什么要使用它?
  • 可以使用哪些不同的 DOCTYPE?
  • 标准模式和怪异模式有什么区别,以及使用不同的 DOCTYPE 可能会遇到的一些怪异行为是什么?

最后,我应该使用什么正确的 DOCTYPE?


10
这不应该是一个维基页面吗? - Alex
8个回答

79
基本上,DOCTYPE描述了您页面中将使用的HTML。
浏览器还使用DOCTYPE确定如何呈现页面。不包括DOCTYPE或包括不正确的DOCTYPE可能会触发怪异模式。
关键在于,Internet Explorer中的quirks模式与Firefox(和其他浏览器)中的quirks模式非常不同。这意味着,如果触发了quirks模式,则尝试确保页面在所有浏览器中一致呈现的工作要比在标准模式下呈现要困难得多。
维基百科有一个更深入的文档类型使用时各种差异的总结。某些DOCTYPE启用XHTML,并且对于使用XHTML的使用存在相当多的争论,这在XHTML-真假之争 中有很好的涵盖。
不同的“符合标准”的渲染DOCTYPE之间存在细微差别,例如HTML5 DOCTYPE()以及其他一些DOCTYPE,例如用于HTML 4.01 transitional的此DOCTYPE。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

40
最近我更喜欢使用HTML5 DOCTYPE声明:它可以在所有现代浏览器中使用,包括IE6。 - Walter Rumsby
64
IE6不属于现代浏览器。 - user2176127

29

DOCTYPE 声明告诉使用者代理(如网页浏览器、网络爬虫、验证工具)文档类型。使用它可确保消费者正确地解析 HTML,就像您想要的那样。

HTML、XHTML 和 Framesets 中有几个不同的 DOCTYPE,并且每种都有两种模式:Strict 和 Transitional。 Strict 表示您的标记完全符合定义的标准。请参阅W3C DTDs页面以获取更多详细信息。

Quirksmode 基本上是来自浏览器战争时期的布局方法,当时标准远不如今天这么受尊重和定义。通常,一个有效的标准模式页面将在各种浏览器中更一致地布局,但可能缺乏您需要的某些功能。其中一个功能是锚标记的目标属性。 Quirksmode 网站是了解这些差异的好资源。

最后一个想法是,新的 HTML5 标准建议使用非常简单的 DOCTYPE:

<!DOCTYPE html>

使用此 DOCTYPE 是一种向前兼容的方式,指定您的页面为标准模式,并且是 HTML。这是 Google 使用的方法,并且相当容易记忆。我建议除非您打算使用 XHTML,否则使用此 DOCTYPE。


2
DOCTYPE是HTML标签吗?如果是,为什么我们需要它一开始就存在? - CuriousMind
2
@vipinkoul DOCTYPE标签指定了您要发送给User-Agent的HTML文档类型。它可以是HTML或XHTML或Frameset。它可以是Strict HTML / XHTML / Frameset或Transitional HTML / XHTML / Frameset。大多数情况下,这会影响解析器在遇到错误时的反应方式。 - Rob

6
一个文档类型定义(doctype)是指您的文档使用的HTML/XHTML版本。您需要使用doctype,这样当您将代码通过验证器运行时,验证器就会知道要检查哪个版本的HTML/XHTML。此页面提供了一个很好的概述:不要忘记添加doctype
您可以使用的常见doctype列在这里:推荐的DTD列表
您应该选择哪个doctype取决于您正在使用的代码,但为了了解情况,请尝试通过W3C验证器运行您的代码,并在“更多选项”菜单中使用“文档类型”下拉菜单来尝试不同的doctype。W3C标记验证服务

4
在网页上使用的HTML(包括XHTML)中,DOCTYPE是一个字符串,会触发一些浏览器模式(怪异模式、标准模式、准标准模式),具体取决于DOCTYPE的拼写方式。您希望使用它来选择最适合您页面的浏览器模式。
在SGML和XML中,正式地说,DOCTYPE声明是对文档类型定义(DTD)的引用,它指定了标记语言的正式语法规则。没有任何浏览器曾经使用过DTD或者访问过它们。然而,像W3C Markup Validator这样的SGML和XML标记验证器除了HTML5模式之外,都会使用它们。因此,如果提交到验证器的文档中选择了DOCTYPE,则验证器的工作方式也会相应改变。但是,处理器也可以在其用户界面中选择验证器的工作方式。(SGML和XML处理器也可能以不同的方式使用DOCTYPE,但是问题显然只限于HTML上下文和与Web浏览器及其相关软件密切相关的内容。)

没有权威的DOCTYPE列表。每个HTML规范或草案都定义了自己的DOCTYPE或DOCTYPEs。浏览器在选择模式时识别的DOCTYPE集合因浏览器而异。实际上,除了HTML5中定义的<DOCTYPE html>之外,没有理由使用其他DOCTYPE,尽管HTML5还列出了一些“遗留的DOCTYPE”。如果您想要标准模式(推荐新页面使用),可以使用该DOCTYPE,如果您想要怪异模式(对于旧页面可能需要),则不使用DOCTYPE。

“标准模式”通常意味着浏览器尽可能遵循HTML、CSS、DOM和其他规范的操作模式。通常并不意味着完全符合规范。“怪异模式”在不同的浏览器中有所不同,但通常意味着试图模仿像IE 5这样非常旧的浏览器的行为。其目的是保持旧页面的工作,假设它们可能依赖于旧浏览器中的功能和错误。请参阅在怪异模式下会发生什么? 的描述。请注意,在HTML5中存在一个相当不同、更有限的“怪异模式”概念,它与称为Quirks Mode Living Standard的文档非常相似。
一个典型的问题是元素宽度在怪异模式和标准模式中计算方式不同。这意味着如果在标准模式(或反之亦然)下查看旨在在怪异模式下工作的页面,则页面的布局可能会更改或甚至完全混乱。
因此,对于新页面应使用<!DOCTYPE html>,而对于旧页面应保留任何DOCTYPE(如果有)。
然而,在某些浏览器中,怪异模式意味着许多CSS的新特性不受支持。这意味着如果您想使用一些CSS3功能来增强旧页面,则可能需要切换到触发标准模式的DOCTYPE。在这种情况下,您需要检查和测试页面以查看它是否能在标准模式下运行。

感谢提供额外的细节,特别是这些:“没有浏览器曾经使用过DTD或者访问它们”,以及“除了在HTML5中定义的<DOCTYPE html>之外,没有理由使用其他的DOCTYPE”。 - Armfoot

2
一个文档类型定义(DOCTYPE)是描述类似于 XHTML 的文档内容可以如何显示的文档(比如网页)。注意:这仅定义了该页面的语法,而页面的渲染并不由DTD定义!例如,一个文档类型定义可以定义 <table> 标签的样式 - 它接受哪些属性,以及每个属性接受哪些值/值类型。可以把它看作是当前网页的词汇表。 Wikipedia 上有关于常见使用的各种文档类型定义的信息页面。请注意 - 没有任何阻止您创建自己的文档类型定义。但是,浏览器可能无法知道如何呈现您的文档。
使用哪个DTD取决于你要写什么。例如,XHTML与HTML具有完全不同的DTD。

2

文档类型声明告诉浏览器页面所使用的语言,可以是HTML或XHTML。例如,

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

告诉浏览器以 HTML4 strict 的方式渲染页面。旧版浏览器会错误地渲染页面,因此新版浏览器在发现旧的文档类型时会模拟旧版浏览器的错误。
如今,您应该至少使用 HTML4 或更好的 XHTML。
有关文档类型的博客文章是《使用正确的 DOCTYPE 修复您的站点!》(来自A List Apart)。

1
首先,没有一个doctype是你应该使用的标准,但大多数设计师尝试使其在XHTML 1.0 Strict中运作。
doctype仅仅是声明你可以在你的html中使用哪些标签(虽然浏览器可以使用定义之外的标签)。你实际上可以打开doctype文件并开始阅读(XHTML 1.0 Strict)。
如果你没有指定doctype,浏览器将尽力猜测,但不总是命中正确的类型。
怪异模式只是浏览器用于向后兼容的技术,一个很好的例子就是IE如何呈现盒子

1
在网页上,doctype 只是告诉浏览器你想要标准模式、准标准模式还是怪异模式。
怪异模式下的变化取决于浏览器:Firefox、Opera、Safari 和 Chrome 实现了一组有限的怪异模式,例如在代码中删除文本下降符号的空格(解决方法:td img { vertical-align:bottom; })。另一方面,IE 则回到了 IE5.5 中的渲染引擎。这意味着你将无法使用自 2000 年以来实施的任何新功能。
为了触发标准模式,我建议使用 HTML5 doctype,<doctype html>,因为它最容易记住。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接