正如标题所描述的那样,可用的不同文档类型是什么?它们的含义是什么?我注意到当我从
切换时,IE7中的布局看起来有点不同<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
到
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
还有其他人,有什么影响或后果?
谢谢!
答案 0 :(得分:54)
Doctype 或文档类型声明将文档与文档类型定义相关联。
文档类型定义是XML文档的标准。 XML和XHTML文档都有许多DTD。除了要求一切都格式正确之外,XML本身没有太多的模式或非常具体的规则。您可以将DTD视为文档的更具体的架构。
渲染模式
由于标准的移动,大多数现代浏览器实际上都有不同的渲染模式(标准模式,用于根据更新的网络标准渲染文档和CSS,以及怪癖模式,其中浏览器从网络的早期带回一些渲染想法。这些模式是为了向后兼容而设立的。在网络的第一个时代创建的网页的广阔景观是根据他们的时间规则呈现的,而较新的文档可以吸引新的标准浪潮。随着时间的推移和想象的新格式,可能会创建相应的DTD。
浏览器差异
在理想的世界中,浏览器加载的页面会读取顶部的Doctype并使用它来查找文档类型定义。然后,它将使用该DTD的模式作为读取文档其余部分的基础。因此,Doctypes对于验证标记文档至关重要。 DTD将提供验证文档的标准。
不幸的是,这不是一个理想的世界。浏览器在这里并不一定表现一致,如果它们一致,那么一致的行为与Doctypes的原始愿景并不完全一致。虽然解析是独立于Doctype完成的,但主要浏览器至少会检查Doctype以确定渲染模式。如果您的Doctype不存在或不完整,浏览器可能会以怪癖模式呈现。要使编写良好的现代文档正确显示,浏览器应以标准模式呈现。 Mozilla,Safari和一些最新版本的Opera实际上实现了Almost Standards模式,该模式完全专用于过渡页面。
当您更改Doctype并注意页面显示方式的变化时,这是因为浏览器在尝试解析文档时可能会应用稍微不同的规则集。因此,结果页面可能会有所不同,具体取决于其所有部分是否符合DTD,或者至少(取决于浏览器),您的数据在doctype建议的呈现模式下验证。
选择文档类型
为了追求符合标准,应尽可能使用严格的Doctypes。
在 XHTML 中撰写时,此Doctype很常见:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
在 HTML 4.1 中撰写时,这一点很常见:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
此处列出了XHTML和HTML 4的一些其他常见文档类型,以确保完整性:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
关于严格与过渡性文档类型的争论
标准传播者呼吁网络开发人员停止在新网页上使用Transitional Doctype,而是使用Strict。同样,这是理论和实践在协调方面存在一些困难的情况。过渡性Doctype的最初希望是为将旧网站转变为符合标准提供一个中途之家。对于过渡性文档类型,对元素和属性的限制实际上“不那么严格”,因此开发人员可以更快地在标准模式下运行,并逐步消除突出的差异。
存在争议,因为开发人员在企业环境中更改Doctype并不总是那么简单。自由开发者和中小型网站的制作者通常可以更容易地确定他们的Doctype并进行这种转换。在针对高要求的基于Web的服务的企业生产环境中,遗留系统和第三方代码产品本身就存在更复杂的依赖关系,这些产品本身可能在路线图上进行删除或重新设计,但此类更改的执行必须是有条不紊地和渐进地完成。
有用的工具
W3C(World Wide Web Consortium)是一个在定义这些标准方面发挥积极作用的团体。他们在http://validator.w3.org/维护了一个有用的在线工具,用于根据标准验证和验证文档。还有许多其他第三方工具和browser extensions具有类似的功能。
答案 1 :(得分:7)
浏览器don't care你使用什么doctype(好吧,几乎是真的),他们只用一件事,一件事:决定使用哪个渲染模式。参见例如Fx或Opera documentation是关于使用什么算法来决定使用哪种模式的实际示例(我猜有一些文档也被隐藏在MSDN中的某个地方...... [这可能是正确的页面](http://msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx),我不知道,抱歉)。
在大多数浏览器中有两种主要模式(某些浏览器也有almost standards mode):
您可以在前面提到的浏览器中使用(非标准)document.compatMode
属性来检查用于呈现当前文档的模式。
(关于XHTML的注意事项:我假设您将文档作为HTML(text/html
)提供给您,如果您将文档作为XHTML(可能是application/xhtml+xml
)提供给大多数浏览器直接跳转到标准模式并且不要关注所有AFAIK的doctype。)
作者应尽可能使用Strict DTD,但在需要支持表示属性和元素时可以使用Transitional DTD。 - HTML 4.01: 22 Transitional Document Type Definition。
我们建议作者编写符合严格DTD的文档,而不是本规范定义的其他DTD。 - HTML 4.01: 4 Conformance: requirements and recommendations
有很多关于此的博文,例如no more Transitional DOCTYPEs, please(从2006年开始,但一些,显然仍有问题:)。
这篇文章首先指出浏览器并不关心你选择什么,然后发展成一个关于如何选择正确的DTD的咆哮,有趣......但是如果你要花钱(/浪费?)选择DTD的时间和精力你也可以选择正确的DTD(从HTML 4.01标准的角度来看)。
或,您可以忽略所有这些,并使用以下代码,soon anyway:
<!doctype html>
(This answer以“任何不开始使用HTML 5文档类型的原因?”与最后一部分有关。)
答案 2 :(得分:3)
答案 3 :(得分:3)
答案 4 :(得分:2)
关于doctypes有很多错误的信息。这种混淆源于这样一个事实,即doctypes最初是出于一个目的(识别DTD,即使用的HTML版本),但在现实世界的浏览器中用于完全不相关的目的。
Doctype声明仅用于当今浏览器中的一件事,即在 quirks 渲染模式和CSS的标准渲染模式之间切换。所以基本上它是一个CSS-thing,而不是HTML-thing。
Quirks模式渲染向后兼容旧浏览器中的一些旧渲染错误,并且对于您不想修复的旧内容非常有用。新内容应始终使用标准模式,因为它在浏览器中呈现更正确和一致。 (在使用标准模式时,浏览器之间仍存在渲染差异,但在怪癖模式下则更糟糕。)
不是否选择HTML或XHTML docytype会有所不同,如果您选择严格或过渡性doctype,它也不会有任何区别。渲染模式基本上选择如下:
<!DOCTYPE Chris>
这样的随机文档类型,它可以完美地运行。历史上,doctypes旨在声明使用了哪个版本和HTML子集。 HTML4定义了几个版本,其中“transitional”允许许多元素和“严格”中不允许的属性(如FONT)。理论上,浏览器可以处理与“过渡”文档不同的“严格”文档。但是没有浏览器实际上这样做。
编辑:scunliffe指出IE8将有另一种渲染模式,“IE8标准”模式。但是,AFAIK此模式不是由doctype触发,而是由元标记触发。
答案 5 :(得分:0)
基本上,doctype决定了IE的疯狂程度。
如果你没有将它设置为XHTML,或者说“严格”,那么当涉及到IE时,你将生活在一个受到伤害的世界中(即使你设置它,你仍然会讨厌IE,但它确实让它好多了。)