Jak zresetować lub zastąpić filtry CSS w przeglądarce IE?

89

Używam zastrzeżonej właściwości „filter” MS, aby spróbować stworzyć nie brzydki odpowiednik css3 text-shadow i box-shadow;

Właściwie szło mi naprawdę dobrze, dopóki nie napotkałem tego problemu. Wygląda na to, że gdy zastosuję filtr do elementu div wewnątrz innego elementu div, który również ma filtr, efekty filtru zostaną połączone na obiekcie podrzędnym.

Próbowałem użyć filtra: brak; zrobić reset, ale bez radości. Próbowałem też różnych odmian składni, np. „-Ms-filter: 'progid: ... Glow ()'", "filter: progid: ... Glow ()", "filter: Glow ()" itp.

Testowanie w IE8

SpliFF
źródło
8
To działa dla mnie:filter:;
Web_Designer
1
filtr:; nie działa z preprocesorem css lessphp, filtruj: -; chociaż.
David Meister
używać filter: ;. to chyba zmusi IE do usunięcia tej właściwości razem, ponieważ nie jest to poprawna wartość.
Bhumi Singhal,
3
Używając SCSS, musiałem użyć, filter:none;aby uniknąć błędów składniowych.
Nic Barbier

Odpowiedzi:

95

Jest włączony atrybut boolean , dla którego można ustawić wartość false lub true http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx

Przykład:

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)";
el22or
źródło
1
Dziękuję Ci! To zadziałało dla mnie dwóch. Miałem nieznośny styl tła, który nie zniknął i nie mogłem go znaleźć bez względu na to, jak bardzo się starałem.
racl101
Dzięki! filtry gradientowe dla przycisków nie grają ładnie z niektórymi przyciskami z obrazami w tle - filtr pojawia się na obrazie ...
Adam
Działał jak urok! Dziękuję Ci!
Bogdan
20

Właściwość -ms-filter jest niestandardowym wpisem CSS specyficznym dla przeglądarki i jako taka wymaga, aby jej parametr był ujęty w cudzysłów. Więc -ms-filter: "none" będzie działać dobrze.

Różowa kaczka
źródło
16

Spróbuj tego:

filtr: -;

browzah
źródło
Pracowałem dla mnie w IE7, gdy -ms-filter: "progid: DXImageTransform.Microsoft.gradient (enabled = false)"; nie. Dzięki
Simon Arnold
@SimonArnold "-ms-filter" jest obsługiwany tylko przez IE8 i nowsze; IE7 obsługuje tylko atrybut „filter”. Zobacz msdn.microsoft.com/en-us/library/ie/ms530752(v=vs.85).aspx .
vee
6

Odniosłem pewien sukces, ustawiając dzieci jako bezwzględne lub względne. To nie wydawało się działać wcześniej, więc może się ponownie zepsuć, gdy stanę się bardziej skomplikowany

Myślę, że gdy rodzic zastosuje filtr, wszystkie jego dzieci zasadniczo stają się wewnętrznie powierzchniami directx. Nadal możesz zaznaczyć tekst, ale jest on opóźniony. Myślę, że zaznaczanie tekstu to sztuczka, która sprawia, że ​​każda litera jest oddzielną powierzchnią. To gówniany bałagan, który w dużym stopniu wyjaśnia, dlaczego przeglądarka w ogóle, a filtry w szczególności, są tak błędne.

SpliFF
źródło
6

Jeśli używasz HTML5, możesz zechcieć przejść dalej ścieżką używania

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

aw swoim CSS użyj czegoś takiego:

.ie9 .element {filter: none; }
John C.
źródło
1

Czy próbowałeś włączyć / wyłączyć filtr (y)?

anddoutoi
źródło
2
to nie działa, nie możesz zastąpić filtru rodziców od dziecka.
SpliFF
0

Znalazłem najlepszy sposób wyświetlania: inline-block (zastosowanie spacji: nowrap do kontenera). Ale wydaje się, że działa źle z IE7 i niższymi

max
źródło