【发布时间】:2011-11-03 05:28:56
【问题描述】:
我今天遇到了我以前从未见过的 IE 条件 cmets 的使用,这让我摸不着头脑。 HTML 是这样开始的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--[if IE 7 ]> <html class="no-js ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]> <html class="no-js ie8" lang="en"> <![endif]-->
...
</html>
我想知道 IE7 将如何处理这个文档。看起来该文档最终会带有两个 html 标签,第一个标签是未封闭的。肯定不会解析的。但确实如此。 我决定调查一下。
在IE9的IE7浏览器模式下,html标签结束为
<html class="no-js ie7" lang="en" xmlns="http://www.w3.org/1999/xhtml">
似乎包含的条件注释的 html 标记中的属性正在与现有的 html 标记合并。进一步修改后,如果条件 html 标记中的属性不存在于第一个 html 标记中,则它们似乎会添加到现有标记中。比如:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="not so fast" xmlns="http://www.w3.org/1999/xhtml">
<!--[if IE 7 ]> <html class="no-js ie7" lang="en"> <![endif]-->
结果:
<html class="not so fast" lang="en" xmlns="http://www.w3.org/1999/xhtml" sizcache="0" sizset="0">
这里,条件包含的html标签的class属性没有任何作用,因为无条件的html标签已经定义了一个class属性。 sizcache 和 sizset 属性从何而来完全是个谜。
无论如何,这些观察到的行为都不是我所期望的。有关条件 cmets 的 Microsoft 文档没有提及有关条件 cmets 的这种使用的任何内容,并且谷歌搜索已经枯竭。 该页面稍后包含一个样式表,其中包含引用 ie7 和 ie8 类的选择器,以便在 IE 7 和 8 不正确地呈现它们的情况下覆盖标准样式。
我只是好奇是否有人见过条件 cmets 的这种用法,或者知道这种混合行为是否记录在任何地方。
【问题讨论】:
-
经过进一步调查,很明显我的问题确实与条件 cmets 无关。相反,问题在于浏览器将如何处理
<html> <html class="test"> <head></head> <body></body> </html>之类的文档,如本文所述,IE 和 Firefox 似乎都合并了两个 html 标签。
标签: internet-explorer comments conditional