我如何使用过滤器:对于不会影响ie9的ie8?

时间:2013-01-05 20:21:54

标签: css internet-explorer-8 internet-explorer-9 sass

我有一个sass mixin,允许我定义alpha背景

@mixin background-rgba($r,$g,$b,$a) {

    $color: ie_hex($r,$g,$b,$a);
    $value: unquote("progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=##{$color},endColorstr=##{$color})");

    //ie
    -ms-filter: $value;
    filter: $value;
    zoom: 1;

    background-color: transparent\9;
  // Good browsers.
    background-color: rgba($r,$g,$b,$a);

这适用于IE 7-8,但过滤规则正由IE9选取。我意识到我可以在<head>中使用条件标签,但这不是我真正需要的。我需要能够在整个地方使用它。

2 个答案:

答案 0 :(得分:0)

您希望避免在<head>中使用条件标记来提供IE特定的CSS(据我理解您的陈述)。我能想到的两个想法是:

IE9 Class

不确定您是否也反对using conditional comments to set a class on the html or body tags?或者禁止,使用javascript设置类似的类。然后你可以预设mixin来生成...

.ie9 .yourSelectorUsingtheMixin { filter: none; ms-filter: none; }

...使用background-rgba mixin在主条目后面。

@Media Hack

This post注意到IE9的黑客攻击,它将@media与真正的黑客机动\0/结合起来,形式如下:

@media all and (min-width:0) {
    .yourSelectorUsingtheMixin { 
       filter: none \0/; 
       -ms-filter: none \0/;
    } 
}

答案 1 :(得分:0)

这最终为我工作,基本上关闭了IE9的过滤器。我对这个解决方案不满意,但现在必须做。

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)" !important; /* ie9 requires quotes */