我为什么需要一个文档类型声明?(它的作用是什么)

75

可能是重复问题:
HTML: 什么是!DOCTYPE的功能

我最近在这里提问,解决方案很简单:

你需要在页面中添加一个文档类型声明。这应该可以解决你的问题。

现在,我的页面在没有文档类型声明的情况下在每个浏览器中都可以正常工作(除了IE)。IE是否需要文档类型声明(这是IE特有的事情),其他浏览器是否只是假定它 或者 它正在做我没看到的一些事情。

它的功能是什么,它是如何工作的呢?

8个回答

67

所有浏览器都需要DOCTYPE。如果没有 DOCTYPE ,则会强制浏览器在怪异模式下呈现。

然而,浏览器在确定方言和解析方面只部分使用了 DOCTYPE ,尽管这是其目的。这就是为什么HTML5将 DOCTYPE 简化为:

<! DOCTYPE html>

2.2. DOCTYPE

HTML5的HTML语法要求指定DOCTYPE以确保浏览器以标准模式呈现页面。 DOCTYPE没有其他作用,因此对于XML来说是可选的。带有XML媒体类型的文档始终以标准模式处理。 [DOCTYPE]

DOCTYPE声明是<! DOCTYPE html>,在HTML语法中不区分大小写。较早版本的HTML的DOCTYPE更长,因为HTML语言基于SGML,因此需要引用DTD。但在HTML5中不再需要,DOCTYPE仅用于启用使用HTML语法编写的文档的标准模式。浏览器已经为<! DOCTYPE html>执行此操作。

来源:HTML5与HTML4的差异:DOCTYPE


4
实际上,它确实决定了文档呈现为严格模式、准严格模式或怪异模式,因此它确实具有作用。 - Kevin Ji
3
请看这个表格:http://hsivonen.iki.fi/doctype/ 它对之前的(X)HTML版本有明显影响。 - Kevin Ji

17

Doctype有两个作用:

  1. 它标识了你使用的HTML方言。
  2. 它控制浏览器使用“标准”或“怪异”模式来渲染文档。

如果没有Doctype或者存在未被识别的Doctype,那么浏览器会使用“怪异”模式并尽力解释文档。如果存在Doctype并被识别出来,那么浏览器就按照标准进行解析。渲染结果可能因为如何解释文档而有所不同。


7
为什么要指定文档类型?因为它定义了您的文档实际使用的(X)HTML版本,这是一些处理文档的工具所需的关键信息。例如,指定文档的文档类型允许您使用诸如标记验证器之类的工具来检查您的(X)HTML语法。如果它们不知道您正在使用哪种文档,这样的工具将无法工作。但最重要的是,对于大多数浏览器系列,文档类型声明将使许多猜测变得不必要,并因此触发“标准”呈现模式。
来源:http://www.w3.org/QA/Tips/Doctype

3
我认为一个在2009年最后编辑并且最初在2002年创建的页面,在这个时候已经不再是一个可靠的参考资料了。 - Kevin Peno
2
@KevinPeno 我不认为你知道W3是谁。 - Raynos
1
@Raynos,你在说什么?哈哈?我的观点是它比doctype上的HTML5变更早2年。因此,它并不可靠,因为它没有参考讨论。他们网站上有很多页面都已经过时了。 - Kevin Peno
1
@KevinPeno 你认为需要DOCTYPE的需求会发生什么变化吗? - onteria_
1
@Raynos,DOCTYPE仅存在于向后兼容性。所以是的,我是说当规范被取代时。 - Kevin Peno
显示剩余2条评论

4
你应该为任何浏览器添加DOCTYPE。它告诉浏览器如何解释HTML和CSS。这就是为什么HTML4和HTML5有不同的定义(以及XHTML)。这对于验证非常重要。
IE会将文档放入所谓的“quirks模式”,基本上忽略了现代CSS应该遵循的许多规则。这里有一个问题的好总结。它回到了不标准化的CSS支持的不好的旧日子。

你所说的“interpret”是什么意思?是指大小、颜色等方面,还是元素、标签等方面? - aName

4
浏览器至少需要以所谓的标准模式进行渲染。请参阅John Resig关于html 5 doctype的文章:http://ejohn.org/blog/html5-doctype/。如果你想让你的浏览器不使用标准并像1990年一样进行渲染,那么你可以不添加任何内容,但是你会发现浮动和其他现在标准化的项目不能正常工作。如果您希望您的页面按照特定标准呈现/验证,则需要添加更多文档类型,但这并非必要。

2

根据W3Schools的定义,文档类型(doctype)是“网页编写所使用标记语言版本的指示,用于告诉浏览器应该如何解析网页”。(http://www.w3schools.com/tags/tag_doctype.asp)

如果你没有包含文档类型,浏览器可能会认为你使用的是不同于实际情况的语言,导致页面呈现不正确。


2

来自W3Schools.com:

文档类型声明不是HTML标签,而是一条指令,告诉网络浏览器页面所写的标记语言版本。

有几种不同的文档类型声明,更改它们可能会大大改变您的页面呈现方式。


1
声明应该是HTML文档中的第一件事情,位于标签之前。 声明不是HTML标签,而是向Web浏览器说明页面所编写的标记语言版本的指令。 声明是指文档类型定义(DTD)。DTD指定了标记语言的规则,以便浏览器正确地呈现内容。 参考资料

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