89 votes

Comment réinitialiser ou remplacer les filtres CSS d'IE ?

J'utilise la propriété 'filter' de MS pour essayer de créer un équivalent non laid aux css3 text-shadow et box-shadow ;

Je m'en sortais très bien jusqu'à ce que je rencontre ce problème. Il semble que lorsque j'applique un filtre à un div à l'intérieur d'un autre div qui a également un filtre, les effets du filtre finissent par être combinés sur l'objet enfant.

J'ai essayé d'utiliser filter:none ; pour faire une réinitialisation, mais sans succès. J'ai également essayé différentes variations de la syntaxe, par exemple "-ms-filter : 'progid :...Glow()'", "filter : progid :...Glow()", "filter : Glow()", etc.

Test dans IE8

8 votes

Cela fonctionne pour moi : filter:;

1 votes

Filter: ; ne fonctionne pas avec le préprocesseur css de lessphp, mais filter:- ; oui.

0 votes

Utiliser filter: ; Je suppose que cela obligera IE à supprimer la propriété dans son ensemble, car il ne s'agit pas d'une valeur valide.

95voto

el22or Points 829

Il existe un attribut booléen activé pour lequel vous pouvez définir faux ou vrai http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx

Exemple :

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)";

1 votes

Merci ! Ça a marché pour moi aussi. J'avais un style d'arrière-plan qui ne voulait pas disparaître et je n'arrivais pas à le trouver malgré tous mes efforts.

0 votes

Merci ! Les filtres de dégradés pour les boutons ne sont pas compatibles avec le fait d'avoir certains boutons avec des images de fond - le filtre se superpose à l'image...

0 votes

Ça a marché comme un charme ! Merci !

20voto

Pink Duck Points 121

La propriété -ms-filter est une entrée CSS non standard, spécifique au navigateur, et en tant que telle, elle exige que son paramètre soit placé entre guillemets. Ainsi, -ms-filter : "none" fonctionnera parfaitement.

16voto

browzah Points 151

Essayez ceci :

filtre : - ;

0 votes

Cela a fonctionné pour moi dans IE7 avec -ms-filter : "progid:DXImageTransform.Microsoft.gradient(enabled=false)" ; ne l'a pas fait. Thx

0 votes

@SimonArnold "-ms-filter" n'est pris en charge que par IE8 et les versions ultérieures ; IE7 ne prend en charge que l'attribut "filter". Voir msdn.microsoft.com/fr/us/library/ie/ms530752(v=vs.85).aspx .

6voto

SpliFF Points 21945

J'ai eu du succès en positionnant les enfants de manière absolue ou relative. Cela n'a pas semblé fonctionner auparavant, donc il se peut que cela ne fonctionne plus lorsque je serai plus compliqué.

Je pense qu'une fois qu'un parent a un filtre appliqué, tous ses enfants deviennent essentiellement des surfaces directx en interne. Vous pouvez toujours sélectionner du texte mais ça traîne. Je pense que la sélection de texte est un hack qui fait de chaque lettre une surface séparée. C'est un foutoir qui explique en grande partie pourquoi le navigateur en général et les filtres en particulier sont si bogués.

6voto

John C Points 81

Si vous utilisez HTML5, vous pouvez utiliser

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

et dans votre CSS, utilisez quelque chose comme :

.ie9 .element {filter: none; }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X