DOCTYPE的作用是什么?

9
我知道不同的文档类型本质上是关于html的兼容性,但指定哪种文档类型有什么区别呢?浏览器会根据文档类型处理相同的代码吗?
更新 - 大多数答案都提到如果没有指定文档类型,则可能会开启怪异模式。但xhtml和html 4.01之间有什么不同呢?
8个回答

9
最重要的事情是有没有文档类型声明。如果没有,浏览器将以“怪异”模式而不是标准模式工作,并且许多东西会略有不同。如果您有一个——任何一个——那通常会在浏览器中激活更符合标准的行为。
有关文档类型在各种不同浏览器上的作用以及不同浏览器所具有的模式——怪异、标准、几乎标准等——请参见本文。引用相关部分:

文本/HTML内容的模式

选择文本/HTML内容的模式取决于DOCTYPE嗅探(稍后在本文档中讨论)。在IE8和IE9中,模式还取决于其他因素。但是,默认情况下,即使在IE8和IE9中,对于非Intranet站点,模式也取决于未由Microsoft提供的黑名单的DOCTYPE。

无论如何,必须强调的是,即使在本文档中进行了统一讨论,模式的确切行为因浏览器而异。

怪异模式

在怪异模式下,浏览器违反了当代Web格式规范,以避免“破坏”按照20世纪90年代流行的惯例编写的页面。不同的浏览器实现了不同的怪癖。在Internet Explorer 6、7、8和9中,怪异模式实际上被冻结在IE 5.5中。在其他浏览器中,怪异模式是与几乎标准模式有所偏差。

如果您现在正在编写新页面,则应符合相关规范(尤其是CSS 2.1),并使用标准模式。

标准模式

在标准模式下,浏览器尝试按照特定浏览器中实现的规范正确处理符合规范的文档。

由于不同的浏览器处于不同的合规阶段,因此标准模式也不是一个单一的目标。

HTML 5将此模式称为“无怪异模式”。

几乎标准模式

Firefox、Safari、Chrome、Opera(自7.5以来)、IE8和IE9还具有一种称为“几乎标准模式”的模式,该模式根据CSS2规范传统地而不是严格地实现表单元格的垂直调整大小。Mac IE 5、Windows IE 6和7、Opera 7.5之前和Konqueror不需要几乎标准模式,因为它们在各自的标准模式中没有严格按照CSS2规范实现表单元格的垂直调整大小。事实上,它们的标准模式比新浏览器的标准模式更接近几乎标准模式。

HTML 5将此模式称为“有限怪异模式”。

IE7模式

IE8和IE9具有大多数是IE7标准模式的冻结副本的模式。其他浏览器没有这样的模式,而且HTML5没有指定此模式。

IE8标准模式

IE9具有大多数是IE8标准模式的冻结副本的模式。其他浏览器没有这样的模式,而且HTML5没有指定此模式。

IE8几乎标准模式

IE9具有大多数是IE8几乎标准模式的冻结副本的模式。其他浏览器没有这样的模式,而且HTML5没有指定此模式。

...但请查看完整讨论文章。


3

来自维基百科

文档类型声明(DOCTYPE)是一条指令,将一个特定的SGML或XML文档(例如网页)与文档类型定义(DTD)(例如特定版本HTML的正式定义)相关联。在文档序列化形式中,它表现为符合特定语法的短字符串标记。

现代Web浏览器中的HTML布局引擎执行DOCTYPE“嗅探”或“切换”,其中在作为text/html提供的文档中的DOCTYPE确定布局模式,例如“quirks mode”或“standards mode”。不基于SGML的HTML5的text/html序列化仅使用DOCTYPE进行模式选择。由于Web浏览器采用专用的HTML解析器而不是通用的基于DTD的解析器,因此它们不使用DTD,即使提供了URL也永远不会访问它们。在HTML5中保留DOCTYPE只是为了在常见浏览器中触发“standards mode”,但它是“基本无用但必需”的标题。

我决定引用这段文字,因为它比我更好地回答了您的问题 :). 缺少DOCTYPE在某些浏览器中会触发“quirks mode”,这很重要。


2

这一切都与标准有关,是的,浏览器会以不同的方式处理代码。这意味着所有浏览器应该平等地显示页面。如果没有指定标准,浏览器将按照自己的想法解释页面。


2

声明不是XHTML标签,而是指示网络浏览器该页面所编写的标记语言版本。

声明指的是文档类型定义(DTD)。DTD规定了标记语言的规则,以便浏览器正确地呈现内容。


2

2
浏览器模式
过去,浏览器按照自己的规则实现CSS。随着时间的推移,浏览器现在已经适应了W3C标准。
为了确保网站在各种浏览器上正确呈现,Web开发人员必须根据这些浏览器的要求实现CSS。因此,大多数网站使用的CSS方式并不完全符合规格。
因此,当标准合规性变得重要时,浏览器供应商面临着艰难的选择。更接近W3C规范是正确的方法,但如果他们只是改变CSS实现以完美地匹配标准,许多网站将在各种程度上出现故障。如果现有的CSS突然以正确的方式解释,它将开始显示奇怪的副作用。
因此,更接近标准合规性会引起问题。另一方面,不接近标准合规性将使浏览器战争时代的一般混乱持续下去。
为此,所有浏览器都必须开始支持两种模式。Quirks模式用于旧设计,标准模式用于新设计。
摘自这里:Quirks mode and strict mode 文档类型(DocTypes)
选择使用哪种模式需要一个触发器,而这个触发器被发现在“doctype switching”中。根据标准,任何(X)HTML文档都应该有一个doctype,告诉世界这个文档使用哪种(X)HTML的风格。
引用自这里:Quirks mode and strict mode 附加资源:
- 文档类型声明 - 维基百科上的怪异模式 - Quirks mode and strict mode - Internet Explorer盒子模型错误 - CSS盒子模型

1

在HTML文档中,doctype声明应该是位于<html>标签之前的第一件事情。

<!DOCTYPE>不是一个HTML标签;它是一条指令,告诉浏览器页面所使用的标记语言版本。

随着HTML5的出现,这变得更加简单:<!DOCTYPE html>

如果你没有正确的doctype声明,浏览器就不会知道要使用HTML5。


-1

因为 Doctype 是告诉浏览器如何处理页面的标志。

例如:

HTML5 需要这个 doctype:<!DOCTYPE html> 如果您从页面中删除它,则页面内任何 HTML5 功能都不会被激活。

您可以在 http://www.w3.org/QA/Tips/Doctype 中阅读更多内容。


2
绝对不是。浏览器不区分HTML的版本。无论您使用HTML5 doctype、XHTML1 doctype还是HTML4 doctype,您的浏览器都能在页面中使用HTML5功能(只需确保您的doctype触发了标准兼容模式)。 - duri
抱歉Rudy,我不得不给你投反对票,因为没有doctype HTML5就不能工作是不正确的说法。如果省略doctype,浏览器可能不会以标准兼容模式运行。 - stephenmurdoch
1
从文档中得知:DOCTYPE声明是<!DOCTYPE html>,在HTML语法中不区分大小写。早期版本的HTML DOCTYPE更长,因为HTML语言基于SGML,因此需要引用DTD。但是,在HTML5中不再需要这样做,只有在使用HTML语法编写文档时才需要DOCTYPE以启用标准模式。浏览器已经为<!DOCTYPE html>执行此操作。 - Grzegorz Rożniecki
@Stephenmurdoch:你确定吗?根据W3C页面(http://www.w3.org/TR/html5/syntax.html)的说法:“由于历史原因,DOCTYPE是必需的。当省略时,浏览器倾向于使用不兼容某些规范的不同呈现模式。在文档中包含DOCTYPE可以确保浏览器尽力遵循相关规范。”上次我忘记加DOCTYPE时,我的HTML5相关代码完全无法工作。 - Rudy
3
如果您不使用文档类型声明(doctype),将会触发怪异模式(quirks mode),这可能导致在某些浏览器中呈现不正确以及无法使用HTML5功能。但是,由HTML5 doctype 触发的标准兼容模式与由其他 doctype 触发的标准兼容模式相同。如果我使用 <!doctype html public "-//W3C//DTD HTML 4.01//EN">,我将能够使用画布(canvas)、HTML5视频和所有其他HTML5功能,并且它将在任何地方都能正常工作。 - duri

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