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

89

我正在使用专有的MS“filter”属性,试图创建一个非丑陋的相当于CSS3文本阴影和盒子阴影的效果;

直到我遇到了这个问题,我实际上一直做得很好。看起来当我在另一个也有过滤器的div内应用过滤器时,过滤器效果最终会在子对象上合并。

我尝试使用filter:none;进行重置,但没有成功。我还尝试了不同语法的变体,如“-ms-filter:'progid:...Glow()'”,“filter:progid:... Glow()”,“filter:Glow()”等。

在IE8中进行测试


8
这对我有效:filter:; - Web_Designer
1
filter:; 在 lessphp CSS 预处理器中无法工作,但 filter:-; 可以。 - David Meister
使用 filter: ;。我猜这会强制IE将该属性全部删除,因为它不是有效值。 - Bhumi Singhal
3
使用SCSS时,我不得不使用filter:none;来避免语法错误。 - Nic Barbier
7个回答

95

谢谢!渐变滤镜对于带有特定背景图像的按钮不太友好 - 滤镜会覆盖在图像上... - Adam

20

-ms-filter属性是一个非标准,特定于某些浏览器的CSS属性,在使用时需要将其参数用引号括起来。因此,-ms-filter: "none" 就可以正常工作。


16

尝试这个:

过滤器: -;


在IE7中,这对我起作用了,而“-ms-filter:“progid:DXImageTransform.Microsoft.gradient(enabled=false)”;”则没有。谢谢。 - Simon Arnold
@SimonArnold "-ms-filter" 只被 IE8 及以上版本支持;IE7 仅支持 "filter" 属性。请参阅 http://msdn.microsoft.com/en-us/library/ie/ms530752(v=vs.85).aspx。 - vee

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]-->

在你的CSS中使用类似以下的代码:

.ie9 .element {filter: none; }

6
我已经通过将子元素进行绝对或相对定位而取得了一些成功。但这似乎早些时候不起作用,所以一旦我变得更加复杂,它可能会再次中断。
我认为一旦父级应用了筛选器,所有子元素实质上都在内部成为DirectX表面。您仍然可以选择文本,但会有延迟。我认为文本选择是一个hack,它使每个字母成为单独的表面。这是一个糟糕的混乱,这很大程度上解释了为什么浏览器总体上以及特别是过滤器为什么如此错误。

1

2
它不起作用,你无法覆盖父级筛选器的子级。 - SpliFF

0

我发现最好的方法是使用display:inline-block(将white-space:nowrap应用于容器)。但它似乎在IE7及以下版本中效果不佳。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接