什么是 DOCTYPE?

  • 什么是 DOCTYPE? 我为什么要使用它?
  • 我可以使用哪些不同的 DOCTYPE?
  • 标准模式和怪癖模式之间有什么区别? 使用不同设置的 DOCTYPE 时,我可能会遇到哪些怪癖?

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

72290 次浏览

Doctype 定义文档使用的 HTML/XHTML 的版本。您可能希望使用 doctype,以便在通过验证器运行代码时,验证器知道要检查哪个版本的 HTML/XHTML。本页提供了一个很好的概述:

别忘了添加 doctype

这里列出了你可以使用的常见文档类型:

DTD 推荐列表

你应该选择哪种文档类型取决于你使用的代码,但是为了得到一个想法,尝试通过 W3C 验证器运行你的代码,并使用“更多选项”菜单中的 文件类别下拉菜单来尝试不同的文档类型。

W3C验証服务

Doctype 是一种描述类似 xhtml 的文档内容的文档(如网页)。注意: 这只定义了该页面的语法,该页面的呈现不是由 DTD 定义的!

例如,doctype 可以定义 <table>-tag 的外观——它接受哪些属性,以及每个属性接受哪些值/值类型。把它想象成你当前网页的词典。

Wikipedia 有一个关于各种常用 Doctype 的信息页面。请注意,没有什么可以阻止您创建自己的 doctype。但是,浏览器可能不知道如何呈现文档。

使用哪个 DTD 取决于您要编写的内容。例如,XHTML 具有与 HTML 完全不同的 DTD。

首先,没有一个文档类型是您应该使用的,但是大多数设计人员都试图让它在 XHTML 1.0 Strick 中工作。

Doctype 只不过是一个声明,说明在 html 中可以使用哪些标记(尽管浏览器可以使用比定义的更多或更少的标记) ,实际上可以打开 doctype 文件并开始读取(XHTML 1.0严格)

如果您没有指定 doctype,浏览器将尽最大努力猜测,但并不总是命中正确的类型。

离奇模式只是浏览器用来向后兼容的一种技术,离奇模式的一个很好的例子就是 IE 渲染框

文档类型告诉浏览器页面是用什么语言编写的,是 HTML 还是 XHTML,

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

告诉浏览器将页面呈现为 HTML4 strict。旧的浏览器用于不正确地呈现页面,因此新的浏览器在发现旧的 doctype 时会模拟旧浏览器的错误。

今天,您至少应该使用 HTML4或更好的 XHTML。

关于 doctype 的博客条目是 用正确的 DOCTYPE 修复你的网站(来自 分开列表)。

DOCTYPE 告诉消费用户代理(web 浏览器、 web 爬虫、验证工具)文件的类型。使用它可以确保使用者按照您的意图正确地解析 HTML。

HTML、 XHTML 和 Frameset 有几种不同的 DOCTYPES,每种 DOCTYPES 都有严格和过渡两种模式。严格说明您的标记正在准确地使用已定义的标准。有关详细信息,请参阅 W3C DTD页。

Quirkmode 基本上是浏览器大战时期的布局方法,当时的标准还没有得到足够的重视和定义。一般来说,标准模式页面(这是有效的)将在不同浏览器之间更加一致地进行布局,但是可能缺乏您需要的某些特性。其中一个这样的特性是锚标记的 target 属性。古克斯莫德站点是这些差异的重要资源。

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

<!DOCTYPE html>

使用这个 DOCTYPE 是一种向前兼容的方法,可以指定页面处于标准模式,并且是 HTML。这就是 Google 使用的方法,并且相当容易记住。我建议使用这个 DOCTYPE,除非您计划使用 XHTML。

基本上,DOCTYPE 描述将在页面中使用的 HTML。

浏览器还使用 DOCTYPE 来确定如何呈现页面。不包含 DOCTYPE 或包含不正确的 DOCTYPE 都会触发怪癖模式。

奇怪的是,Internet Explorer 中的怪异模式和火狐(以及其他浏览器)中的怪异模式有很大的不同,这意味着你将面临一个更困难的工作: 如果怪异模式被触发,你将尝试确保你的页面呈现与所有浏览器一致,而在标准模式下则不然。

Wikipedia 对 使用各种 DOCTYPE 时呈现的差异有更深入的总结。XHTML 是由某些 DOCTYPE 启用的,关于 XHTML 的使用有相当多的争论,XHTML ーー神话与现实已经很好地讨论了这个问题。

不同的“标准兼容”的 DOCTYPE 之间有细微的差别,比如 HTML5 DOCTYPE (在 HTML5之前,<!DOCTYPE html>只是被称为“瘦文档类型”,它不会触发老式浏览器中的标准化渲染)和其他 DOCTYPE 之间的差别,比如这个 HTML 4.01过渡版:

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

在 Web 上,doctype 除了告诉浏览器是否需要标准、几乎标准或怪癖模式之外什么也不做。

怪癖模式的变化取决于浏览器: Firefox,Opera,Safari 和 Chrome 实现了一系列有限的怪癖,比如在代码 <table><tr><td><img></td></tr></table>(解决方案: td img { vertical-align:bottom; })中移除文本下拉框。另一方面,IE 在 IE5.5中还原为渲染引擎。这意味着您将无法使用自2000年以来实现的新特性的 任何

为了触发标准模式,我建议使用 HTML5 doctype,<doctype html>,因为它是最容易记住的。

在网页上使用的 HTML (包括 XHTML)中,DOCTYPE 是一个字符串,它触发一些浏览器模式(怪异模式、标准模式、几乎标准模式) ,这取决于 DOCTYPE 的确切拼写。您希望使用它来选择最适合您的页面的浏览器模式。

在形式上,在 SGML 和 XML 中,DOCTYPE 声明是对文档类型定义(Document Type Definition,DTD)的引用,DTD 指定标记语言的形式化语法规则。没有一个浏览器曾经使用过 DTD 或者访问过它们。但是,它们被 SGML 和 XML 标记验证器(如 W3C 标记验证器)使用,除了在 HTML5模式下。因此,DOCTYPE 的选择决定了如果将文档提交给验证器,验证器是如何工作的。但是,验证器的操作模式也可以在其用户界面中选择。(SGML 和 XML 处理器也可能以不同的其他方式使用 DOCTYPE,但这个问题显然只限于 HTML 上下文、 Web 浏览器和密切相关的软件。)

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

“标准模式”通常是指浏览器尽可能遵循 HTML、 CSS、 DOM 和其他规范的操作模式。它通常并不意味着完全一致。“怪异模式”在不同的浏览器中是不同的,但通常它意味着模仿非常老的浏览器如 IE5的行为的尝试。这样做的目的是让旧的页面继续工作,前提是它们可能依赖于旧浏览器中的特性和 bug。请参阅描述 在怪诞模式下会发生什么?注意,在 HTML5中有一个非常不同的、更有限的“怪异模式”概念,它与称为 怪癖模式生活标准的文档非常相似。

一个典型的问题是,在怪异模式和标准模式中计算元素宽度的方法是不同的。这意味着页面的布局可能会或多或少地改变,甚至完全混乱,如果一个页面设计为在怪异模式下工作是在标准模式下查看(或反之亦然)。

因此,应该对新页面使用 <!DOCTYPE html>,并保留对旧页面使用过的 DOCTYPE (如果有的话)。

然而,在某些浏览器中,怪异模式意味着 CSS 的许多新特性不受支持。这意味着,如果您希望使用 CSS3的某些特性来增强旧页面,那么很可能需要切换到触发标准模式的 DOCTYPE。在这种情况下,您需要检查和测试该页面,以确定它是否将在标准模式下运行。