Internet explorer IE中条件注释的特殊用法

Internet explorer IE中条件注释的特殊用法,internet-explorer,comments,conditional,Internet Explorer,Comments,Conditional,今天我遇到了一个我从未见过的IE条件评论,这让我抓狂。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

今天我遇到了一个我从未见过的IE条件评论,这让我抓狂。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属性的来源完全是个谜

无论如何,这些观察到的行为都不是我所期望的。微软关于条件性评论的文档中没有提到任何关于条件性评论使用的内容,谷歌也没有提及。 稍后的页面包括一个样式表,其中包含引用ie7和ie8类的选择器,以在ie7和ie8错误呈现的情况下覆盖标准样式


我只是好奇,是否有人见过这种条件注释的使用,或者知道这种混合行为是否在任何地方都有记录。

这看起来像是一种变体,但它不完整,我怀疑不太可预测。

感谢Paul Irish文章的链接。这种方法是有道理的。。。与我遇到的变异版本不同,经过进一步调查,我的问题显然与条件评论无关。更确切地说,这是一个浏览器将如何处理诸如
之类的文档的问题,IE和Firefox似乎都合并了这篇文章中描述的两个html标记。