【问题标题】:What is DOCTYPE?什么是 DOCTYPE?
【发布时间】:2010-09-29 17:12:32
【问题描述】:
  • 什么是 DOCTYPE,我为什么要使用它?
  • 我可以使用哪些不同的 DOCTYPE?
  • standard 和 quirks 模式有什么区别,使用不同设置的 DOCTYPE 可能会遇到哪些怪癖?

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

【问题讨论】:

  • 这不应该是一个维基吗?

标签: html xhtml doctype dtd


【解决方案1】:

基本上,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">

【讨论】:

  • 最近我更喜欢 HTML5 DOCTYPE: 它适用于所有现代浏览器,包括 IE6。
  • IE6 ∉ 现代浏览器
【解决方案2】:

DOCTYPE 告诉消费用户代理(网络浏览器、网络爬虫、验证工具)文件是什么类型的文档。使用它可以确保消费者按照您的预期正确解析 HTML。

HTML、XHTML 和 Frameset 有几种不同的 DOCTYPE,每一种都有 Strict 和 Transitional 两种模式。 Strict 表示您的标记完全使用定义的标准。有关详细信息,请参阅W3C DTDs 页面。

Quirksmode 基本上是浏览器大战时代的布局方法,当时标准很少受到尊重和定义。通常,有效的标准模式页面将在各种浏览器中更加一致地布局,但可能缺少您需要的某些功能。锚标记的目标属性就是这样的特征之一。 Quirksmode 网站是这些差异的绝佳资源。

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

&lt;!DOCTYPE html&gt;

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

【讨论】:

  • 是 DOCTYPE HTML 标签吗?如果是这样,那我们为什么需要这个开始呢?
  • @vipinkoul DOCTYPE 标签指定您发送给用户代理的 HTML 文档类型。它可以是 HTML 或 XHTML 或 Frameset。它可以是 Strict HTML/XHTML/Frameset 或 Transitional HTML/XHTML/Frameset。大多数情况下,这会影响解析器在遇到错误时的反应。
【解决方案3】:

在网页上使用的 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 集因浏览器而异。在实践中,没有理由使用&lt;DOCTYPE html&gt; 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 模式下工作的页面(反之亦然),页面的布局可能会或多或少发生变化,甚至完全混乱。

因此,您应该将&lt;!DOCTYPE html&gt; 用于新页面,并保留您一直用于旧页面的任何 DOCTYPE(如果有)。

但是,怪癖模式意味着,在某些浏览器中,CSS 的许多新功能不受支持。这意味着,如果您想使用一些 CSS3 功能增强旧页面,可能需要切换到触发标准模式的 DOCTYPE。在这种情况下,您需要检查和测试页面,看看它是否会在标准模式下运行。

【讨论】:

  • 感谢您提供额外的详细信息,特别是这些:«没有浏览器曾经使用过 DTD 甚至访问过它们»和«没有理由使用除&lt;DOCTYPE html&gt; 之外的 DOCTYPE 作为@987654325 @»。
【解决方案4】:

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)。

【讨论】:

    【解决方案5】:

    在网络上,doctype 只会告诉浏览器您想要标准、几乎标准还是怪癖模式。

    怪癖模式的哪些变化取决于浏览器:Firefox、Opera、Safari 和 Chrome 实现了一组有限的怪癖,例如在 &lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; 之类的代码中删除文本下行字符的空间(解决方案:td img { vertical-align:bottom; })。另一方面,IE 在 IE5.5 中恢复为渲染引擎。这意味着您将无法使用自 2000 年以来实施的任何新功能。

    要触发标准模式,我建议使用 HTML5 文档类型,&lt;doctype html&gt;,因为它最容易记住。

    【讨论】:

      【解决方案6】:

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

      Don't forget to add a doctype

      您可以使用的常用文档类型在此处列出:

      Recommended list of DTDs

      您应该使用哪种文档类型取决于您使用的代码,但要了解一下,请尝试通过 W3C 验证器运行您的代码并使用“更多选项”菜单尝试不同的文档类型。

      W3C Markup Validation Service

      【讨论】:

        【解决方案7】:

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

        例如,一个文档类型可以定义&lt;table&gt;-标签的外观——它接受哪些属性,以及每个属性接受哪些值/值类型。将其视为您当前网页的词典。

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

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

        【讨论】:

          【解决方案8】:

          首先,您不应该使用一种文档类型,但大多数设计人员都试图使其在 XHTML 1.0 Strict 中工作。

          doctype 只不过是声明您可以在 html 中使用哪些标签(尽管浏览器可以使用更多或更少的标签)您实际上可以打开 doctype 文件并开始阅读 (XHTML 1.0 Strict)

          如果您不指定文档类型,浏览器会尽力猜测,但并不总是能找到正确的类型。

          Quirks 模式只是浏览器用来向后兼容的一种技术,quirks 模式的一个很好的例子是IE renders boxes

          【讨论】:

            猜你喜欢
            • 2011-10-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-21
            • 2010-10-15
            相关资源
            最近更新 更多