【问题标题】:Peculiar Use of Conditional Comments in IEIE 中条件注释的特殊使用
【发布时间】: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 无关。相反,问题在于浏览器将如何处理&lt;html&gt; &lt;html class="test"&gt; &lt;head&gt;&lt;/head&gt; &lt;body&gt;&lt;/body&gt; &lt;/html&gt; 之类的文档,如本文所述,IE 和 Firefox 似乎都合并了两个 html 标签。

标签: internet-explorer comments conditional


【解决方案1】:

这看起来像是 technique developed by Paul Irish 的变体,但它不完整,我怀疑它的可预测性较差。

【讨论】:

  • 感谢 Paul Irish 文章的链接。这种方法很有意义......不像我遇到的突变版本。
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2012-02-24
  • 2016-07-22
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2012-12-21
相关资源
最近更新 更多