【问题标题】:How to link a conditional style sheet without access to the head如何在不访问头部的情况下链接条件样式表
【发布时间】:2009-12-08 03:59:08
【问题描述】:

我在一个无法让我直接访问页面头部的企业 CMS(Autonomy/Interwoven Teamsite)中工作。我只能链接样式表并添加外部 js 文件。通常我会添加一个条件注释来链接 ie6/ie7 样式表。在一些搜索中,我找到了一种方法来定位 ie,在 js 中使用条件注释和基于 jscript 版本的特定 ie 版本

在js中:

/*@cc_on
    document.createStyleSheet("/css/all_ie_fixes.css");
    /*@if (@_jscript_version = 5.6)
        document.createStyleSheet("/css/ie_6.css");
    /*@end
@*/

这似乎是一个丑陋的 hack。有什么建议吗?

【问题讨论】:

  • 对不起,我想我不明白你为什么不能使用条件 cmets。我认为它们也可以从页面正文中工作。
  • 是的。那么,在正文顶部的 css 文件链接比使用 js 或 cssHack 并保持 html 干净更可取?

标签: javascript css internet-explorer conditional-comments


【解决方案1】:

可能没有不丑的方法可以做到这一点。也就是说,使用 YUI (relevant YUI doc) 之类的库提供的用户代理检测可以说会产生比上述黑客更清晰和更明确的代码。比如:

if (YAHOO.env.ua.ie >= 6 && YAHOO.env.ua.ie < 7)
{
        document.createStyleSheet("/css/ie_6.css");
}

丑陋,是的。但是很清楚意图是什么。

【讨论】:

  • 我喜欢这种明确性,Ben - 并且会查看 YUI 文档。如果我只将 YUI 用于这一功能,您认为添加库是否值得?
  • 不,可能不是——但我相信 jQuery 有类似的东西(如果你想使用其他 jQuery 功能)。并且可能有一个很好的独立版本检测库。 (真的会建议这样做,而不是尝试滚动您自己的检测,这显然是一场噩梦)
【解决方案2】:

试试Conditional CSS:

// Conditional block example  

[if IE] @import('ie.css'); 

【讨论】:

  • 谢谢,Nimbuz - 条件 CSS 看起来不错......但我认为我无法获得服务器端安装的批准。
【解决方案3】:

有些人不赞成,但有针对 IE 的 css hack,不需要条件 cmets。

例如只有 IE6 会读取这种样式:

* html p {color:red;}

IE6太笨了,看不懂这个:

html>body p {color:red;}

快速的谷歌搜索会出现许多其他人:http://www.webdevout.net/css-hacks#in_css-selectors

【讨论】:

    【解决方案4】:

    如果您使用 IE6 做任何事情,那么您的代码将充满丑陋的 hack。您代码的未来维护者会知道这一点并表示同情,而不是诅咒您的名字。如果它有效,那就去吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 2016-11-20
      • 1970-01-01
      • 2018-05-24
      • 2020-09-29
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多