HTML DTDs - 有什么作用?

5
可能重复:
HTML中不同的doctype有什么意义? 作为web开发某些方面经验较少(我一直更注重后端而非前端),请问是否应该担心在网页开头处做出的DOCTYPE声明?
最常见的是HTML 4.01,我应该按照这个标准构建我的web app吗?
4个回答

4

John Resig(jQuery)在这个问题上有发言权。此外,文档类型有助于使MSIE6 使用正确的盒模型,同时也减轻了验证您的网站的痛苦(对于开发来说,这是一个事情;将其视为调试)。


3

作为页面的第一条语句,您应该绝对包含一个DOCTYPE,因为它会将Web浏览器切换到标准模式。这意味着它们将至少尝试使用W3C和IETF标准来呈现您的页面,而不是按照向后兼容的模型(即怪异模式)。

根据我的观察,现在更多地使用XHTML 1.0 Transitional,而不是HTML 4.01。XHTML 1.0 Transitional是一种折中方案,可以为您提供一些XHTML的好处,而不会太过繁琐。


2
DTD用于验证和实体定义。它们大致指定了某个标记语言和版本的语法要求。
可以通过使用验证器对DTD进行验证。或者,在解析过程中,用户代理也可以进行验证(这是一些验证HTML/XML解析器的情况)。如果用户代理支持,DTD中定义的实体可能会被提供。
DOCTYPE声明是标记语言在文档中引用内联/外部DTD的方式(至少在HTML和XML中)。
就浏览器的HTML(text/html)解析器而言,DOCTYPE声明仅控制呈现模式(DOCTYPE切换)。该模式将根据所引用的HTML版本以及是否指定DTD URI而为标准、几乎标准或怪异模式。实际的DTD不会被使用。
例如,带有DTD URI的XHTML 1.0 Transitional doctype 可能只会将浏览器置于准标准模式,而带有DTD URI的XHTML 1.0 Strict doctype应该会将浏览器置于标准模式。此外,HTML5的doctype <!DOCTYPE html> 将使所有浏览器都处于标准模式,并将IE8+置于超级标准模式(因此在呈现时它的行为更像现代浏览器)。但总体而言,doctype 对Javascript和DOM支持影响较小(但也有例外,特别是在IE8中)。
对于浏览器,由于您几乎总是希望使用完整的标准模式,因此您真正需要的只是 <!DOCTYPE html>。任何其他内容都不会帮助浏览器。但是,该doctype适用于HTML5。如果您想符合HTML 4.01 DTD或XHTML 1.0 DTD,则必须使用HTML 4.01 strict或带有正确DTD URIs的XHTML 1.0 strict以获得完整的标准模式。
如果您想符合HTML5标准,可以在http://validator.nu/上测试语法。它不会针对DTD进行验证,比DTD验证更先进。它更好地反映了HTML 5,并且由于HTML5更好地反映了浏览器真正支持的内容,因此其语法检查更符合浏览器的兼容性。
如果您想符合HTML 4.01或XHTML 1.0 DTD,请使用W3C验证器。请注意,这些DTD并不反映浏览器支持的内容,只大致反映了它们所用于的规范。这些DTD仅用于捕获粗略的语法错误和完全利用它们的非浏览器用户代理。它们也不知道浏览器在text/html和application/xhtml+xml之间的行为差异。
要了解有关浏览器文档类型切换的信息:

http://www.mozilla.org/docs/web-developer/quirks/doctypes.html

http://www.opera.com/docs/specs/doctype/

http://hsivonen.iki.fi/doctype/


0

忽略所有良好的实践,人们使用诸如XHTML 1.0 Transitional之类的DOCTYPE的最大原因是将IE中的CSS盒模型切换为与其他浏览器相同。这可以避免CSS布局带来的许多挫败感。在此处更详细地解释了这一点:http://css.maxdesign.com.au/listamatic/about-boxmodel.htm


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