什么是不同的doctype在HTML中,它们是什么意思?
正如标题所描述的,有哪些不同的文档types,它们是什么意思? 我注意到,当我切换时,在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">
有没有其他的,有什么影响或后果?
谢谢!
文档types或文档types声明将文档与文档types定义相关联。
文档types定义是XML文档的标准。 XML和XHTML文档都有很多DTD。 XML本身没有太多的模式或一套非常特定的规则,除了要求所有东西都是格式良好的。 您可以将DTD视为文档的更具体的模式 。
渲染模式
由于标准的运动,大多数现代浏览器实际上有不同的呈现模式( 标准模式 ,根据更新的Web标准呈现文档和CSS,以及浏览器从网页早期带回一些呈现想法的怪癖模式 )。 这些模式是为了向后兼容的目的而设立的。 在networking第一时代创build的网页的广阔风景根据其时间规则呈现,而较新的文档可以吸引新的标准浪潮。 随着时间的推移和想象出新的格式,可能会创build相应的DTD。
浏览器差异
在理想的情况下,浏览器正在加载的页面将读取顶部的Doctype并使用它来查找文档types定义。 然后,它将使用该DTD的模式作为阅读文档其余部分的基础。 然后,Doctypes对于validation标记文档是非常重要的。 DTD将提供您的文档将被validation的标准。
不幸的是,这不是一个理想的世界。 浏览器在这里不一定performance一致,如果他们这样做,一致的行为是不符合最初的Doctypes的愿景。 尽pipeparsing是独立于Doctype完成的,但是主要的浏览器至less会检查Doctype来确定渲染模式。 如果您的Doctype不存在或不完整,浏览器可能会以怪癖模式呈现。 为了正确显示写得好的现代文档,浏览器应该以标准模式呈现。 Mozilla,Safari和Opera的一些最新版本实际上实现了一个完全专用于过渡页面的几乎标准模式。
当您更改Doctype并注意页面显示方式的变化时,这是因为浏览器在尝试parsing文档时可能会应用一些稍微不同的规则。 因此,结果页面可能有点不同,取决于它的所有部分是否符合DTD,或者至less取决于浏览器,您的数据在渲染模式下是否符合doctypebuild议。
select一个文档types
为了追求符合标准,应尽可能使用严格的文档types。
当用XHTML编写时,这种文档types是常见的:
<!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的其他常见文档types:
<!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">
关于严格与过渡文档types的争论
标准宣传者呼吁networking开发人员在新页面上停止使用Transitional Doctype,而是使用Strict。 再一次,这是一个理论和实践有一些困难调和的情况。 过渡型Doctype最初的希望是为遗留网站向符合标准的过渡提供一个半途而废的平台。 对于过渡types,对元素和属性的限制实际上是“不太严格”的,所以开发人员可以尽快在标准模式下运行,逐步淘汰这些突出的差异。
存在争议是因为开发人员在企业环境中更改Doctype并不总是那么简单。 中小型网站的自由职业开发人员和制作人员往往可以更轻松地确定他们的文档types并进行转换。 在高度需求的基于Web的服务的企业生产环境中,对遗留系统和第三方代码产品的依赖性本质上是更复杂的,这些产品本身可能处于移除或重新devise的路线图上,但是这种变化的执行必须是有条不紊地进行。
有用的工具
W3C( 万维网联盟 )是一个在定义这些标准方面发挥积极作用的组织。 他们在http://validator.w3.org/维护一个有用的在线工具,用于根据他们的标准validation和validation文档。 还有许多其他第三方工具和浏览器扩展具有相似的function。
浏览器不关心你使用的文档types(好,几乎是正确的),他们只用一件事和一件事:决定使用哪种渲染模式 。 看例如Fx或Opera文档的真实世界的例子是什么algorithm是用来决定使用哪种模式(我想还有一些IE的文档埋在MSDN的某处… [这可能是正确的页面]( http ://msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx) ,我不知道,对不起)。
然而在大多数浏览器中有两种主要模式(一些浏览器也具有几乎标准模式 ):
- 怪癖模式 (当没有find“正确的”文档types时使用,从浏览器的angular度来看是“正确的”):尝试渲染文档,因为一些旧版本的IE会做(最重要的差异之一,即影响渲染,就是有些浏览器在这种模式下利用了IE盒型号的bug ),
- 和标准模式 (当浏览器发现它认为正确的文档types时使用):按照标准说的去做。
您可以使用前面提到的浏览器中的(非标准) document.compatMode
属性来检查用于呈现当前文档的模式。
(关于XHTML的注意事项:我假设你将文档作为HTML( text/html
)提供,如果你将文档作为XHTML(可能是application/xhtml+xml
),大多数浏览器直接跳转到标准模式,而不关心文档types在所有AFAIK。)
顺便说一句:在另一个答案中的build议(或者看起来像一个build议)被打破了, 过渡的 DTD不应该用在新的文档上。 始终严格使用(“严格”这一术语是一种误导,应该是“违约”或其他非可怕的),期限:
作者应尽可能使用严格的DTD,但在需要对presentation属性和元素的支持时可以使用Transitional DTD。 – HTML 4.01:22过渡文档types定义 。
我们build议作者编写符合严格DTD的文档,而不是本规范定义的其他DTD。 – HTML 4.01:4一致性:要求和build议
有很多关于这个的博客文章,例如,请不要更多的Transitional DOCTYPE,请 (从2006年,但有一些 ,显然,仍然有这个问题:)。
这篇文章开始时指出,浏览器不关心你select什么,然后发展成如何select正确的DTD的咆哮,有趣的…但是,如果你要花费(/浪费?)时间和精力select一个DTD你也可以select正确的(从HTML 4.01标准的angular度来看)。
或者 ,您可以忽略所有这些,而是尽快使用以下代码:
<!doctype html>
( 这个回答 “任何不使用HTML 5文档types的原因?”都与最后一部分有关)。
我写了一篇文章,解释了如何在渲染模式select中涉及到doctypes 。
关于doctypes有很多错误的信息。 这种混淆源于这样一个事实,即doctype最初只是为了一个目的(为了识别DTD,即所使用的HTML版本),但是在现实世界中,浏览器被用于完全不相关的目的。
Doctype声明仅用于今天的浏览器中的一件事 ,即在CSS的怪癖渲染模式和标准渲染模式之间切换。 所以基本上它是一个CSS的东西,而不是HTML的东西。
怪异模式渲染向后兼容旧版浏览器中的一些旧的渲染错误,并且对于您不想修复的传统内容而言,它们最为有用。 新内容应该始终使用标准模式,因为它在浏览器中呈现更加正确和一致。 (在使用标准模式时,浏览器之间仍然存在渲染差异,但是在怪异模式下更糟糕。)
无论您selectHTML还是XHTML docytype,都没有任何区别,如果您select严格或过渡的文档types,它们也不会有什么区别。 渲染模式基本上是这样select的:
- 如果文档没有任何文档types,select怪癖模式。
- 如果文档具有无法识别的文档types,则select标准模式。 这意味着你可以写一个像
<!DOCTYPE Chris>
这样的随机文档,它可以很好地工作。 - 正式的W3C doctype 没有正确的URL(标签中的第二个string)select怪癖模式。 所有其他doctypesselect标准模式。 (编辑:当然它比这更复杂,它甚至不同浏览器哪些公认的文档types触发怪癖模式。
从历史上看,doctypes是为了声明使用哪个版本和HTML子集。 HTML4定义了几个版本,其中“过渡”允许一些元素和属性(如FONT)在“strict”中不被允许。 浏览器理论上可以处理与“过渡”文档不同的“严格”文档。 然而没有浏览器实际上这样做 。
编辑:scunliffe指出,IE8将有另一种渲染模式,“IE8标准”模式。 但是,AFAIK这种模式不是由文档types触发的,而是由元标签触发的。
基本上,文档types决定了IE将会如何疯狂。
如果你不把它设置为XHTML,或者“严格”,那么在IE中你将会生活在一个受到伤害的世界里(即使你设置了它,你仍然会对IE很憎恨,但它确实使它好了很多)。