使用条件注释定位 IE8 是不是有效?
Posted
技术标签:
【中文标题】使用条件注释定位 IE8 是不是有效?【英文标题】: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 提供不同的样式表。 这个问题应该早就结束了。 【参考方案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 的下一次回归会给我们带来什么。
【讨论】:
以上是关于使用条件注释定位 IE8 是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章