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