- 什么是 DOCTYPE,我为什么要使用它?
- 我可以使用哪些不同的 DOCTYPE?
- 标准和怪癖模式之间有什么区别,我可能会遇到不同设置的 DOCTYPE 的一些怪癖?
最后,我应该使用什么正确的 DOCTYPE?
基本上,DOCTYPE 描述了将在您的页面中使用的 HTML。
浏览器还使用 DOCTYPE 来确定如何呈现页面。不包含 DOCTYPE 或包含不正确的 DOCTYPE 可能会触发怪癖模式。
关键在于,Internet Explorer 中的 quirks 模式与 Firefox(和其他浏览器)中的 quirks 模式完全不同。这意味着如果触发 quirks 模式,尝试确保您的页面与所有浏览器一致地呈现,而不是在标准模式下呈现,您将面临更艰巨的工作。
Wikipedia 对使用各种 DOCTYPE 时的渲染差异进行了更深入的总结。XHTML 是由某些 DOCTYPE 启用的,关于 XHTML 的使用存在相当多的争论,XHTML 很好地涵盖了这一点——神话和现实。
不同的“符合标准”的渲染 DOCTYPE 之间存在细微的差异,例如 HTML5 DOCTYPE(<!DOCTYPE html>
在 HTML5 之前,仅称为“瘦 doctype”,不会在旧版浏览器中触发标准化渲染)和其他 DOCTYPE,例如这个HTML 4.01 过渡:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
DOCTYPE 告诉消费用户代理(网络浏览器、网络爬虫、验证工具)文件是什么类型的文档。使用它可以确保消费者按照您的预期正确解析 HTML。
HTML、XHTML 和 Framesets 有几种不同的 DOCTYPE,每一种都有 Strict 和 Transitional 两种模式。Strict 表示您的标记完全使用定义的标准。有关详细信息,请参阅W3C DTD页面。
Quirksmode 基本上是浏览器大战时代的布局方法,当时标准很少受到尊重和定义。通常,有效的标准模式页面将在各种浏览器中更一致地布局,但可能缺少您需要的某些功能。锚标记的目标属性就是这样的特征之一。Quirksmode网站是这些差异的绝佳资源。
最后一个想法是新的 HTML5 标准建议使用一个非常简单的 DOCTYPE:
<!DOCTYPE html>
使用此 DOCTYPE 是一种向前兼容的方式来指定您的页面处于标准模式,并且是 HTML。这是 Google 使用的方法,并且相当容易记住。除非您打算使用 XHTML,否则我建议使用此 DOCTYPE。
doctype 定义了您的文档使用的 HTML/XHTML 版本。您可能希望使用 doctype,以便当您通过验证器运行代码时,验证器知道要检查哪个版本的 HTML/XHTML。此页面提供了一个很好的概述:
您可以使用的常见文档类型在此处列出:
您应该使用哪种文档类型取决于您使用的代码,但要了解一下,请尝试通过 W3C 验证器运行您的代码,并使用“更多选项”菜单中的文档类型下拉菜单来尝试不同的文档类型.
在网页上使用的 HTML(包括 XHTML)中,DOCTYPE 是一个字符串,它根据 DOCTYPE 的确切拼写触发几种浏览器模式(怪癖模式、标准模式、几乎标准模式)之一。您想使用它来选择最适合您的页面的浏览器模式。
正式地,在 SGML 和 XML 中,DOCTYPE 声明是对文档类型定义 (DTD) 的引用,它指定了标记语言的正式语法规则。没有浏览器曾经将 DTD 用于任何事情,甚至没有访问过它们。但是,SGML 和 XML 标记验证器(例如W3C 标记验证器)使用它们,HTML5 模式除外。因此,DOCTYPE 的选择决定了当文档提交给它时验证器的工作方式。但是,也可以在其用户界面中选择验证器的操作模式。(SGML 和 XML 处理器也可能以不同的其他方式使用 DOCTYPE,但这个问题显然仅限于 HTML 上下文以及 Web 浏览器和密切相关的软件。)
没有权威的 DOCTYPE 列表。每个 HTML 规范或草案都定义了自己的 DOCTYPE 或 DOCTYPE。选择模式时浏览器识别的 DOCTYPE 集因浏览器而异。在实践中,没有理由使用<DOCTYPE html>
HTML5 中定义的 DOCTYPE ,尽管 HTML5 也列出了一些“遗留 DOCTYPE”。如果您需要标准模式(推荐用于新页面),则可以使用该 DOCTYPE;如果您需要 quirks 模式(旧页面可能需要该模式),则可以不使用 DOCTYPE。
“标准模式”通常是指浏览器尽可能遵循 HTML、CSS、DOM 和其他规范的操作模式。它通常并不意味着完全符合。“Quirks 模式”在不同的浏览器中有所不同,但通常它意味着试图模仿非常旧的浏览器(如 IE 5)的行为。目的是保持旧页面正常工作,假设它们可能依赖于旧浏览器。查看描述Quirks 模式会发生什么?请注意,HTML5 中有一个相当不同、更有限的“怪癖模式”概念,它与名为Quirks Mode Living Standard的文档非常相似。
一个典型的问题是元素宽度在 quirks 模式和标准模式下的计算方式不同。这意味着,如果在标准模式下查看设计为在 quirks 模式下工作的页面(反之亦然),页面的布局可能或多或少会发生变化甚至完全混乱。
因此,您应该将<!DOCTYPE html>
其用于新页面并保留您一直用于旧页面的任何 DOCTYPE(如果有)。
然而,怪癖模式意味着,在某些浏览器中,CSS 的许多新特性不受支持。这意味着,如果您想使用一些 CSS3 功能增强旧页面,可能需要切换到触发标准模式的 DOCTYPE。在这种情况下,您需要查看和测试页面以查看它是否会在标准模式下运行。
doctype 是一个文档,它描述了类似 xhtml 的文档的内容(如网页)。注意:这仅定义了所述页面的语法,页面的呈现不是由 DTD 定义的!
例如,一个 doctype 可以定义<table>
-tag 的外观 - 它接受哪些属性,以及每个属性接受哪些值/值类型。将其视为您当前网页的词典。
维基百科有一个关于常用的各种 Doctype 的信息页面。请注意 - 没有什么能阻止您创建自己的文档类型。然而,浏览器可能不知道如何呈现您的文档。
使用哪个 DTD 取决于您要编写的内容。例如,XHTML 具有与 HTML 完全不同的 DTD。
Doctypes 告诉浏览器页面是用什么语言编写的,无论是 HTML 还是 XHTML。例如,
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
告诉浏览器将页面呈现为HTML4 strict
. 旧版浏览器过去常常错误地呈现页面,因此新版浏览器在找到旧版文档类型时会模拟旧版浏览器的错误。
今天你应该至少使用 HTML4 或更好的 XHTML。
一篇关于 doctypes 的博客文章是使用正确的 DOCTYPE 修复您的网站!(来自A List Apart)。
首先,您不应该使用一种文档类型,但大多数设计人员都试图使其在 XHTML 1.0 Strict 中工作。
doctype 只不过是声明您可以在 html 中使用哪些标签(尽管浏览器可以使用更多或更少的定义)您实际上可以打开 doctype 文件并开始阅读(XHTML 1.0 Strict)
如果您不指定 doctype,浏览器会尽力猜测,但并不总是能找到正确的类型。
Quirks 模式只是浏览器用来向后兼容的一种技术,quirks 模式的一个很好的例子是IE 如何呈现框
在 Web 上,doctype 只告诉浏览器您想要标准、几乎标准或怪癖模式。
quirks 模式中的哪些变化取决于浏览器:Firefox、Opera、Safari 和 Chrome 实现了一组有限的 quirks,例如在<table><tr><td><img></td></tr></table>
(solution: td img { vertical-align:bottom; }
) 之类的代码中删除文本下行的空间。另一方面,IE 在 IE5.5 中恢复为渲染引擎。这意味着您将无法使用自 2000 年以来实施的任何新功能。
要触发标准模式,我建议使用 HTML5 文档<doctype html>
类型,因为它最容易记住。