【问题标题】:Will targeting IE8 with conditional comments work?使用条件注释定位 IE8 是否有效?
【发布时间】:2010-09-15 02:57:39
【问题描述】:

IE8 发布后,以下代码是否可以添加条件样式表?

<!--[if IE 8]>
  <link rel="stylesheet" type="text/css" href="ie-8.0.css" />
<![endif]-->

我已经阅读了关于这是否适用于测试版的相互矛盾的报告。我希望有人可以分享他们的经验。谢谢。

【问题讨论】:

  • 太棒了。来自 Microsoft 的另一个非标准扩展。
  • 这个非常古老而且非常有用,因为它允许非 hack CSS 开关为 MSIE 提供不同的样式表。
  • 这个问题应该早就结束了。

标签: html css internet-explorer internet-explorer-8 stylesheet


【解决方案1】:

它对我有用——无论是在怪癖模式还是在标准合规模式下。但是,当切换到 IE8 兼容模式时,它不起作用

【讨论】:

  • 你说的是IE7兼容模式吗?
  • 否:Beta 2 有浏览器模式和文档模式。文档模式允许 IE 7 兼容性(以及严格模式和怪癖模式)。浏览器模式有“IE 7”、“IE 8”和“IE 8 兼容模式”选项。我就是这个意思。
【解决方案2】:

需要注意的一点:

它确实有效,但是如果您正在加载页面/站点本地网络(例如 Intranet)它将以 IE7 模式默认加载!(更新 - localhost[*] 是一种特殊情况,确实以标准模式呈现)

这违背了 MSFT 最初默认采用 STANDARDS 的声明。

例如

http://127.0.0.1/mysite/mypage.php  <-- IE8 by default (updated!)
http://localhost/mysite/mypage.php  <-- IE8 by default (updated!)
http://machinename/mysite/mypage.php  <-- IE7 by default
http://192.168.100.x/mysite/mypage.php  <-- IE7 by default
http://google.com/  <-- IE8 by default

[*] - Scott Dickens [MSFT] 在评论 here on the IE Blog 中指出 localhost 是 Intranet 中的一个特殊场景(通常用于开发 Internet 站点),因此默认情况下会以标准模式呈现。

要测试 IE8 中页面真正呈现的模式,您可以使用检查开发人员工具或使用此小书签代码(仅适用于 IE8):

javascript:
var vMode=document.documentMode;
var rMode='IE5 Quirks Mode';
if(vMode==8){
  rMode='IE8 Standards Mode';
} else if(vMode==7){
  rMode='IE7 Strict Mode';
}
alert('Rendering in: '+rMode);

【讨论】:

  • 我认为这取决于文档类型(虽然不确定,尚未测试):我理解微软的方式,IE 8 严格模式会在 any 有效时触发指定了 HTML 文档类型。
  • 不,不正确。如果您指定了 doctype,则本地网络上的 IE8 将以 IE5(怪癖模式)或 IE7(标准模式)呈现。为了看到以 TRUE IE8 STANDARDS 模式呈现的本地站点,您必须明确告诉 IE 您想要它(例如,用户必须选择它)
  • 好吧有趣 - 你怎么知道的?你能提供一些证据吗?当我进入 IE8 中的开发人员工具时,它报告它在加载本地页面(例如 localhost/somepage.html)时正在为渲染和浏览器模式运行 IE8 模式
  • @Whyamistilltyping - IE 博客 (blogs.msdn.com/ie) 发布有关 IE 进度的信息。对于 IE8 Beta 2 (blogs.msdn.com/ie/archive/2008/08/27/…),他们引用:“在默认状态下,公共 Internet 上的所有站点都以 Internet Explorer 8 标准模式(兼容性视图关闭)显示,所有 Intranet 网站都以 Internet Explorer 7 标准模式(兼容性视图)显示在)。” - 他们后来确实改变了这种行为(因此我现在正在更新我的答案)从本地机器加载的页面是一个例外,默认情况下以标准模式呈现。
  • ...更改发生在 IE8 RC1 记录。阅读完整的 cmets 以了解有关集群的完整详细信息... EricLaw [MSFT] 5 天后在 cmets 中“澄清”:blogs.msdn.com/ie/archive/2008/12/03/…
【解决方案3】:

工具/兼容性视图设置

全部取消勾选

【讨论】:

    【解决方案4】:

    感谢您的帮助。我发现了解决方案,显然问题在于让每个样式表都使用自己的标题属性。一旦我把标题从除主样式表之外的所有地方去掉,就没有问题了。

    这是 IE8 独有的一个奇怪问题 - 虽然我被告知它应该以这种方式工作,但与“样式表首选项”有关 - 它只会产生问题,因为解决方案要求您删除标题在编写脚本等时可能会有所帮助 - 当您需要调用样式表时。

    无论如何,不​​确定这是否是一个错误,或者它应该是这样,但我希望微软进一步调查。

    谢谢

    【讨论】:

    • 我认为您不应该将相同的标题添加到不同的链接样式表。 AFAIR 在 Konqueror 中也表现不佳(几年前)。
    【解决方案5】:

    为什么还要为 IE8 编写单独的样式表?

    如果您已经针对 IE7 进行了调试,则可以强制 IE8 进入兼容模式,从而将您的代码显示为 IE8 是 IE7。

    您所要做的就是把它放在开头标签的正下方。其他任何地方都行不通。

    然后每个项目平均只需要半小时左右的工作量,不需要对 IE8 进行密集调试!

    即使是 Msn.com 也这样做 - 有点讽刺,嗯?

    最近写了一篇关于它的博文:http://blog.sankhomallik.com/2009/11/16/stop-wasting-time-debugging-on-ie8-when-you-dont-have-to-or-get-ie8-to-behave-like-ie7/

    【讨论】:

    • 当 IE9 出现时会发生什么?
    【解决方案6】:

    与 IE7 相比,IE8 的渲染效果非常好,我有 IE6、IE7 和 IE8 的样式表;起初我认为条件 cmets 在经过一些实验后不适用于 IE8,我发现 IE8 没有应用一些规则,只是因为我需要将祖先类或父类放在首位,例如 我有一个像

    的课

    .niceclass {some:properties;more:properties;}

    只有在我将其更改为以下内容时才起作用:

    .parentclass .niceclass {some:properties;more:properties;}

    #parentselector .niceclass {some:properties;more:properties;}

    顺便说一句,在我只支持 IE8 的 css 中,我只有一个压倒一切的规则,其余的几乎就像 firefox 一样呈现,尽管这不会让我离开 FF!。

    【讨论】:

      【解决方案7】:

      就我而言,我想使用 css 来使用圆角边框。 Vista 上的 IE8 不支持此类。而且由于图形的圆形边框也会显示出漂亮的圆形阴影,因此页面在 IE8 中看起来很糟糕。

      我尝试使用条件 cmets,但无济于事,IE8 不会评估 if IE 表达式,因此不会包含外部样式表。

      然后我看看将它置于 quirks/compatblity 模式,然而,这仍然不起作用,因为我使用的 CSS hack 不再适用于 IE8。

      最后但最不重要的是,我发现了一个可以在兼容模式下正确呈现页面的 CSS hack。

      * + html #test[id] { color:lime } 
      

      现在,我不知道这是否适用于 IE7 或更低版本,所以您至少需要三个 您想要支持的每个 IE 版本都有不同的 hack,例如

      * + html #test,
          html+body #test,
          * html body #test
          { color:lime }
      

      我想知道 Internet Exploiter 的下一次回归会给我们带来什么。

      【讨论】:

        猜你喜欢
        • 2010-12-14
        • 2013-09-08
        • 1970-01-01
        • 2010-10-31
        • 2023-03-08
        • 2013-06-08
        • 2012-08-08
        • 2012-03-31
        • 1970-01-01
        相关资源
        最近更新 更多