如何重置或覆盖IE CSS过滤器?

Spl*_*iFF 89 css internet-explorer filter

我正在使用专有的MS'filter'属性来尝试创建一个非丑陋的等同于css3 text-shadow和box-shadow;

在我遇到这个问题之前,我确实做得非常好.看起来当我将一个过滤器应用于另一个div中的div时,该div也有一个过滤器,过滤器效果最终被组合在子对象上.

我无法解释它比这更好,这是一个演示:http: //cableflow.dev.arc.net.au/test/filters.html

我尝试过使用filter:none; 做重置但没有快乐.我也尝试了不同的语法变体,即"-ms-filter:'progid:... Glow()'","filter:progid:... Glow()","filter:Glow()"等等..

在IE8中测试

小智 95

启用了布尔属性,您可以为其设置falsetrue http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx

例:

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)";
Run Code Online (Sandbox Code Playgroud)

  • 对我来说这很有用,但我不得不使用`!important` (4认同)

小智 20

-ms-filter属性是非标准的,特定于浏览器的CSS条目,因此要求其参数用引号括起来.所以-ms-filter:"none"可以正常工作.


小智 16

试试这个:

过滤器: - ;


Spl*_*iFF 6

通过将孩子定位为绝对或亲戚,我取得了一些成功.这似乎没有提前工作,所以一旦我变得更复杂,它可能会再次破裂

我认为一旦父母有一个过滤器应用它的所有孩子基本上在内部成为directx表面.您仍然可以选择文本,但它会滞后.我认为文本选择是一个黑客,它使每个字母成为一个单独的表面.这是一个糟糕的混乱,它解释了为什么一般的浏览器和特别是过滤器是如此错误.


小智 6

如果您使用的是HTML5,则可能需要沿着使用途径前进

<!doctype html>
<!--[if lt IE 7 ]> <html lang="en" class="ie6 oldie"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="ie7 oldie"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8 oldie"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html lang="en" class="gtie9 modern">
<!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

在你的CSS中使用类似的东西:

.ie9 .element {filter: none; }
Run Code Online (Sandbox Code Playgroud)