日期:2014-01-11 浏览次数:20945 次
HTML是万维网上发布超文本的通用言语[1]。从1982年Tim Berners-Lee简化SGML建立HTML的原始定义到2001年发布XHTML1.1规范,HTML成为了有多个版本的国际标准[2]。各版本的规范都用一种机器可读的言语定义,它描述了法定结构、元素和属性,这就是文档类型定义(Document Type Definition),简称DTD。
相关文章:HTML代码学习:DOCTYPE的缩写
DTD描述了文档类型声明(DTD declaration,简称doctype[3])位于HTML文档最前面,它是联系文档和DTD指令。比如HTML4.01 Strict的doctype是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
它指明了文档使用的HTML版本,这是诸如浏览器之类的工具解析文档时最需求的信息。比如W3C的验证工具可依据它来检查语法和指出错误。
晚期浏览器对标准的错误实现、私有扩展的大量繁殖和为了向前兼容以及晚期标准本身的混乱等导致了那时的文档既没有doctype也没有对DTD的直接援用,也导致了新的标准难以得到使用和普及,由于浏览器无法区分它们。为了处理依据Web标准创作的网页和依据陈旧实践创作的网页,Todd Fahrner 在1998年提出了“came up with a toggle”方法[4]能允许浏览器提供两套渲染模式: 即有完整的doctype的文档使用W3C的标准进行解析,否则使用旧的方式解析。
这个方法符合实际且简单无效。两年后,Mac版IE上初次运用,很快的其他浏览器制造商纷纷采用, 这就诞生了doctype嗅探(doctype sniffing或doctype switching)。浏览器通过它来决定其引擎应该采用标准模式、准标准模式还是怪癖模式,这将对HTML和CSS的解析、CSS规划及JavaScript脚本产生非常大的影响[5] 。毫无疑问,我们应该尽可能的采用标准模式。
HTML5虽然还处于草案中,但最新浏览器Firefox3.5、Chrome2、Safari4和IE8曾经开始支持部分特性,特别是Google Wave的发布掀起了推进HTML5实践的新高潮。HTML5并不基于SGML也没有DTD,但它为了向前兼容,接受了doctype嗅探这个理想,定义了在text/html中doctype是独一的模式转换声明,除此外没有什么用途。其doctype如此简约:<!doctype html>[6] 。
值得一提的是IE8为了处理向前兼容采用了X-UA-Compatible声明[7],导致在IE8中浏览器的渲染模式不只仅取决于doctype嗅探还取决于X-UA-Compatible声明,这个不只仅导致了模式判断愈加复杂[8],也违背了web设计的逐渐加强(progressive enhancement)思想[9]。
在web标准的道路上,我们不只需求充满理想主义向前兼容,更需求充满理想主义的向后兼容,这是保证我们的web能在未来正常任务的希望。在标准、简单和逐渐加强的思想下,如今我们页面的最佳方案或许是:
<!doctype html>
…
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
…
注释: