BLOG
Enjoy when you can, and endure when you must.
MAY 13, 2013/HTML
一条注释引发的“血案”

今天在调试页面的时候出现一个很奇怪的现象:所有的页面只在IE下显示非常奇怪,但检查CSS又并未发现严重的兼容性问题。正百思不得其解时,同事将置于HTML代码最上面的注释删除后,一切恢复正常。于是想到了一个东西 —— 文档类型。虽然在之前也了解过不少文档类型这方面的东西,但因为之前自己并未尝试过在文档类型申明之前加入任何东西,故一时半会儿没醒悟过来。

文档类型作为一个决定浏览器对于HTML文档采取何种模式的“开关”,应出现在HTML文档的最前面。但有时候出于某些原因,有的作者会在 其之前放置一些内容如注释,从而让浏览器感到极为“困惑”,它第一眼看到的不是文档类型的申明,故可能会认为页面没有文档类型是申明而触发混杂模式。

在文档类型前加入不同的东西会导致不同的后果。对于普通文本和HTML标签,各浏览器均会进入了混杂模式,这个很好理解,都看到疑似的HTML文档正文了,浏览器不太会往下追查DOCTYPE在哪里。对于HTML注释和XML声明,它们和上面的普通文本和HTML标签有些差别,它们不会在页面中展示出来,即不可视。这时,有的浏览器则显得十分“智能”,非IE浏览器均会忽略它们的存在,DOCTYPE被正确解析。但是在IE6-8中,DOCTYPE之前的XML声明会导致页面进入混杂模式,而所有的IE均会使DOCTYPE之前出现了HTML注释的页面进入混杂模式。在IE9中当出现这种情况时,浏览器在控制台中给出了提示:“HTML1113: 文档模式从IE9标准重新启动到Quirks”,看来微软在这一点上不打算“随大流”,这样做也可以敦促作者尽量避免在DOCTYPE之前加入其他内容。

看来选择正确的DOCTYPE以及保证DOCTYPE在HTML文档中绝对开头的位置则是使DOCTYPE发挥其正确作用的关键。

COMMENTS
LEAVE COMMNT