正如标题所描述的那样,可用的不同文档类型是什么?它们的含义是什么? 我注意到当我切换时,IE7中的布局看起来有点不同
至
还有其他人,有什么影响或后果?
谢谢!
这应该是社区维基恕我直言。
Doctype或文档类型声明将文档与文档类型定义相关联。
文档类型定义是XML文档的标准。 XML和XHTML文档都有许多DTD。除了要求一切都格式正确之外,XML本身没有太多的模式或非常具体的规则。您可以将DTD视为文档的更具体的架构。
渲染模式
由于标准的移动,大多数现代浏览器实际上都有不同的渲染模式(标准模式,根据更新的Web标准渲染文档和css,以及怪癖模式,其中浏览器从网络的早期带回一些渲染想法)。这些模式是为了向后兼容而设立的。在网络的第一个时代创建的网页的广阔景观是根据他们的时间规则呈现的,而较新的文档可以吸引新的标准浪潮。随着时间的推移和想象的新格式,可能会创建相应的DTD。
浏览器差异
在理想的世界中,浏览器加载的页面将读取顶部的Doctype并使用它来查找文档类型定义。然后,它将使用该DTD的模式作为读取文档其余部分的基础。因此,Doctypes对于验证标记文档至关重要。 DTD将提供验证文档的标准。
不幸的是,这不是一个理想的世界。浏览器在这里并不一定表现一致,如果它们一致,那么一致的行为与Doctypes的原始愿景并不完全一致。虽然解析是独立于Doctype完成的,但主要浏览器至少会检查Doctype以确定渲染模式。如果您的Doctype不存在或不完整,浏览器可能会以怪异模式呈现。要使编写良好的现代文档正确显示,浏览器应以标准模式呈现。 Mozilla,Safari和一些最新版本的Opera实际上实现了Almost Standards模式,该模式完全专用于过渡页面。
当您更改Doctype并注意页面显示方式的变化时,这是因为浏览器在尝试解析文档时可能会应用稍微不同的规则集。因此,结果页面可能会略有不同,具体取决于其所有部分是否符合DTD,或者至少(取决于浏览器),您的数据在doctype建议的呈现模式中验证。
选择Doctype
为了遵守标准,应尽可能使用严??格的Doctypes。
在XHTML中编写时,此Doctype很常见:
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
在HTML 4.1中编写时,这个是常见的:
/p>
"http://www.w3.org/TR/html4/loose.dtd">
此处列出了XHTML和HTML 4的一些其他常见文档类型,以确保完整性:
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
/p>
"http://www.w3.org/TR/html4/strict.dtd">
/p>
"http://www.w3.org/TR/html4/frameset.dtd">
关于严格与过渡性Doctypes的争论
标准传播者呼吁Web开发人员停止在新页面上使用Transitional Doctype,而是使用Strict。同样,这是理论和实践在协调方面存在一些困难的情况。过渡性Doctype的最初希望是为将旧网站转变为符合标准提供一个中途之家。对于过渡性文档类型,对元素和属性的限制实际上"不那么严格",因此开发人员能够更快地在标准模式下运行,并逐步消除突出的差异。
存在争议是因为开发人员在企业环境中更改Doctype并不总是那么简单。自由开发者和中小型网站的制作者通常可以更容易地确定他们的Doctype并进行这种转换。在针对高要求的基于Web的服务的企业生产环境中,遗留系统和第三方代码产品本身就存在更复杂的依赖关系,这些产品本身可能在路线图上进行删除或重新设计,但此类更改的执行必须是有条不紊地和渐进地完成。
有用的工具
W3C(万维网联盟)是一个在定义这些标准方面发挥积极作用的团体。他们在http://validator.w3.org/上维护了一个有用的在线工具,用于根据标准验证和验证文档。还有许多其他第三方工具和具有类似功能的浏览器扩展。
好。
浏览器不关心你使用什么doctype(好吧,几乎是真的),他们只用一件事,一件事:决定使用哪种渲染模式。参见例如关于使用什么算法来决定使用哪种模式的实际例子的Fx或Opera文档(我想有一些文档也可以在MSDN中隐藏某些文件...... [这可能是正确的页面](http:/ /msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx),我不知道,对不起)。
然而,在大多数浏览器中有两种主要模式(某些浏览器也具有几乎标准模式):
怪癖模式(当没有找到"正确"的doctype时使用,从浏览器的角度来看是"正确的"):尝试将文档呈现为IE的某些旧版本(最重要的差异之一,即影响渲染最多) ,有些浏览器在这种模式下利用IE盒模型bug,
和标准模式(当浏览器找到它认为正确的doctype时使用):尝试按照标准说的那样做。
您可以在前面提到的浏览器中使用(非标准)document.compatMode属性来检查用于呈现当前文档的模式。
(关于XHTML的注意事项:我假设您将文档作为HTML(text/html)提供,如果您将文档作为XHTML(可能是application/xhtml+xml)提供,大多数浏览器直接跳转到标准模式并且根本不关心文档类型据我所知。)
顺便说一句:其他答案中的推荐(或看起来像推荐)被打破了,过渡性DTD不应该用在新文件上。总是使用严格(术语"严格"是一种误导,应该是"默认"或其他非恐怖的),期间:
Authors should use the Strict DTD when possible, but may use the Transitional DTD when support for presentation attribute and elements is required. -- HTML 4.01: 22 Transitional Document Type Definition.
We recommend that authors write documents that conform to the strict DTD rather than the other DTDs defined by this specification. -- HTML 4.01: 4 Conformance: requirements and recommendations
有很多关于此的博文,例如请不要过渡DOCTYPE(从2006年开始,但有些人显然仍有问题:)。
这篇文章首先指出浏览器不关心你选择什么,然后发展成为一个关于如何选择正确的DTD的咆哮,有趣......但是如果你要花费(/浪费?)时间和精力选择一个DTD你也可以选择正确的DTD(从HTML 4.01标准的角度来看)。
或者,您可以忽略所有这些,并尽快使用以下内容:
(这个回答"任何不开始使用HTML 5 doctype的原因?"与最后一部分有关。)
对于开发(阅读:通过验证的正确性测试),doctypes确实发挥了作用。 在那之后,你所说的适用。
我写了一篇文章,解释了如何在渲染模式选择中使用doctypes。
以下是W3C各种DTD的官方解释:
http://www.w3.org/QA/2002/04/valid-dtd-list.html
您可能还会发现以下好处:
http://www.freedivs.com/tutorials/Choosing%20a%20DOCTYPE/
关于doctypes有很多错误的信息。混淆源于这样一个事实,即doctypes最初是出于一个目的(识别DTD,即使用的HTML版本),但在现实世界的浏览器中用于完全不相关的目的。
Doctype声明仅用于当今浏览器中的一件事,即在怪异渲染模式和CSS标准渲染模式之间切换。所以基本上它是一个CSS的东西,而不是HTML的东西。
Quirks模式渲染向后兼容旧版浏览器中的一些旧渲染错误,并且对于您不想修复的旧内容非常有用。新内容应始终使用标准模式,因为它在浏览器中呈现更正确和一致。 (使用标准模式时,浏览器之间仍然存在渲染差异,但在怪癖模式下更糟糕。)
无论您选择HTML还是XHTML docytype都没有任何区别,如果您选择严格或过渡的doctype也不会有任何区别。渲染模式基本上是这样选择的:
如果文档没有任何doctype,则选择quirks模式。
如果文档具有无法识别的doctype,则选择标准模式。这意味着您可以编写一个像这样的随机文档类型,它将完美地运行。
没有正确url的官方W3C doctypes(标记中的第二个字符串)选择quirks模式。所有其他doctypes都选择标准模式。 (编辑:当然它比这更复杂,甚至在浏览器中,哪些已识别的doctypes触发了怪癖模式.Se hsivonens概述,从另一个答案链接。)
历史上,doctypes旨在声明使用了哪个版本和HTML子集。 HTML4定义了几个版本,其中"transitional"允许许多元素和"严格"中不允许的属性(如FONT)。理论上,浏览器可以处理与"过渡"文档不同的"严格"文档。但是没有浏览器实际上这样做。
编辑:scunliffe指出IE8将有另一种渲染模式,"IE8标准"模式。但是,AFAIK此模式不是由doctype触发,而是由元标记触发。
不,它不只是一个CSS的东西。 浏览器在以不同模式访问DOM时表现不同(或者至少是IE),更糟糕的是在IE8中,有3种不同的模式,怪癖,标准和IE8标准模式。
基本上,doctype决定了IE的疯狂程度。
如果你没有把它设置为XHTML,或者"严格",那么当涉及到IE时,你将生活在一个受到伤害的世界中(即使你设置它,你仍然会讨厌IE,但它确实会让它变成它好了很多)。
如果您需要针对IE 6或7,那么无论如何您只能获得几乎标准模式