<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
to
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
还有其他的吗?它们会产生什么影响或后果?
谢谢!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
to
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
还有其他的吗?它们会产生什么影响或后果?
谢谢!
Doctype(文档类型声明)通常是将文档与文档类型定义(DTD)相关联的。文档类型定义是针对特定XML或SGML文档的标准。在XML和SGML中,除了标签和属性的一般工作方式之外,它们本身并没有太多的模式或非常具体的规则。您可以将DTD视为特定类型文档的规则描述(例如HTML、SVG或MathML)。它们指定了允许哪些标记位于何处(例如,html元素必须包含恰好一个head元素,后跟一个body元素)。
有DTD等选择方案,但如今更普遍使用的是XML模式。
然而,浏览器根本不使用DTD。它们读取Doctype以确定渲染模式,但解析文档的规则完全内置于浏览器中。
这就是为什么HTML 5有一个Doctype(用于确定渲染模式)但没有DTD的原因。
渲染模式
早期的Web浏览器非常漏洞百出。当发布新版本时,它们必须与前辈和竞争对手保持兼容性。这使得修复错误变得非常困难,因为网站依赖于它们。
为了解决这个问题,现代浏览器有不同的渲染模式(标准模式,用于按照标准呈现文档和CSS,以及怪异模式,其中浏览器模拟早期浏览器的错误以及几乎标准模式,介于两者之间)。
选择Doctype
在选择Doctype时需考虑两个因素:
通常意味着您应该使用HTML 5。它是当前的标准,并最好反映了浏览器实际工作方式:
<!DOCTYPE html>
如果无法实现此目标。严格的文档类型可以避免使用 CSS 处理的大多数功能。
在编写 XHTML 1.0 时,通常会使用此文档类型:
<!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 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
在编写 HTML 4.01 时,通常使用以下内容:
<!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 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
和
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
您可以在上述提到的浏览器中使用(非标准的){{link2:document.compatMode
}}属性来检查用于呈现当前文档的模式。
(关于XHTML的说明:我假设您将文档作为HTML(text/html
)提供,如果您将文档作为XHTML(可能是application/xhtml+xml
),大多数浏览器直接进入标准模式,并且完全不关心文档类型,据我所知。)
顺便说一句:另一个答案中的建议(或者看起来像建议)已经过时了,转换DTD不应该在新文档中使用。始终使用严格(“严格”这个词有点误导,应该是“默认”或其他非可怕的术语),就这样:
作者应尽可能使用严格的DTD,但当需要支持表示属性和元素时,可以使用过渡的DTD。-- HTML 4.01:22 过渡文档类型定义。
我们建议作者编写符合严格DTD而不是本规范定义的其他DTD的文档。-- HTML 4.01:4 符合性:要求和建议
有许多关于此的博客文章,例如不再使用过渡性DOCTYPE,请(来自2006年,但显然仍然有些问题 :)。
这篇文章起初指出浏览器不关心你选择什么,然后发展成为一篇关于如何选择正确DTD的抱怨,很有趣...但如果你要花时间和精力选择DTD,那么你最好选择正确的DTD(从HTML 4.01标准的角度来看)。
或者,你可以忽略所有这些,改用以下内容,即将到来 无论如何:
<!doctype html>
“有没有任何理由不开始使用HTML 5 DOCTYPE?”的此答案与最后一部分有点相关。
有很多关于文档类型的错误信息。混淆的原因在于文档类型最初是为了一个目的而设计的(即标识DTD,即所使用的HTML版本),但在实际浏览器中用于完全不相关的目的。
在今天的浏览器中,doctype声明仅用于一件事情,那就是在CSS中切换quirks渲染模式和standards渲染模式。因此,它基本上是一个CSS问题,而不是HTML问题。
quirks模式渲染与旧版浏览器中的一些旧版渲染错误向后兼容,并且对于您不想修复的遗留内容非常有用。新内容应始终使用标准模式,因为它在浏览器之间呈现更正确和一致。(在使用标准模式时,仍然存在浏览器之间的渲染差异,但在quirks模式下更糟糕。)
选择HTML或XHTML文档类型以及选择strict或transitional doctype都不会产生任何影响。渲染模式基本上是这样选择的:
<!DOCTYPE Chris>
,而它将完美地工作。历史上,文档类型声明旨在声明使用的 HTML 版本和子集。HTML4 定义了几个版本,其中“过渡”允许使用一些元素和属性(如 FONT),而在“严格”模式下不允许。理论上,浏览器可以以不同于“过渡”文档的方式处理“严格”文档。然而,没有浏览器实际这样做。
编辑:scunliffe指出IE8将拥有另一个渲染模式,“IE8标准”模式。但是据我所知,这种模式不是由doctype触发的,而是由meta标签触发的。
基本上,文档类型决定了IE的疯狂程度。
如果你不将它设置为XHTML或“严格模式”,当涉及到IE时你会深感苦恼(即使你将其设置了,你仍然会讨厌IE,但它确实可以让它变得更好)。