Как сбросить или переопределить фильтры IE CSS?

89

Я использую собственное свойство MS 'filter', чтобы попытаться создать не уродливый эквивалент css3 text-shadow и box-shadow;

У меня действительно все было хорошо, пока я не столкнулся с этой проблемой. Похоже, что когда я применяю фильтр к div внутри другого div, у которого также есть фильтр, эффекты фильтра в конечном итоге объединяются в дочернем объекте.

Я пробовал использовать filter: none; сделать сброс но без радости. Я также пробовал разные варианты синтаксиса, например «-ms-filter: 'progid: ... Glow ()'», «filter: progid: ... Glow ()», «filter: Glow ()» , так далее..

Тестирование в IE8

SpliFF
источник
8
У меня это работает:filter:;
Web_Designer 01
1
фильтр:; не работает с препроцессором lessphp css, filter: -; хотя делает.
David Meister
использовать filter: ;. это, я думаю, заставит IE удалить свойство полностью, поскольку это недопустимое значение.
Бхуми Сингхал
3
Используя SCSS, мне пришлось использовать, filter:none;чтобы избежать синтаксических ошибок.
Ник Барбье

Ответы:

95

Там это логический атрибут включен , для которого вы можете установить ложный или истинный http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx

Пример:

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)";
el22or
источник
1
Спасибо! Это сработало для меня двоих. У меня был надоедливый стиль фона, который не исчезал, и я не мог его найти, как бы я ни старался.
racl101
Благодарность! градиентные фильтры для кнопок не очень хорошо сочетаются с определенными кнопками с фоновыми изображениями - фильтр накладывается на изображение ...
Адам,
Работал как шарм! Спасибо!
Богдан
20

Свойство -ms-filter является нестандартной записью CSS для конкретного браузера и, как таковое, требует, чтобы его параметр был заключен в кавычки. Итак, -ms-filter: "none" будет работать нормально.

Розовая утка
источник
16

попробуй это:

фильтр: -;

Browzah
источник
У меня работал в IE7, пока -ms-filter: "progid: DXImageTransform.Microsoft.gradient (enabled = false)"; не сделал. Thx
Саймон Арнольд
@SimonArnold "-ms-filter" поддерживается только IE8 и выше; IE7 поддерживает только атрибут «фильтр». См. Msdn.microsoft.com/en-us/library/ie/ms530752(v=vs.85).aspx .
vee
6

Я добился определенного успеха, позиционируя детей как абсолютные или относительные. Раньше это не работало, поэтому может снова сломаться, когда я усложню

Я думаю, что после того, как родительский элемент применил фильтр, все его дочерние элементы по сути становятся внутренними поверхностями directx. Вы все еще можете выделить текст, но он отстает. Я думаю, что выделение текста - это хитрость, которая делает каждую букву отдельной поверхностью. Это дерьмовый беспорядок, который во многом объясняет, почему браузер в целом и фильтры в частности так глючны.

SpliFF
источник
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; }
Джон К
источник
0

Я нашел лучший способ - display: inline-block (применяя white-space: nowrap к контейнеру). Но вроде плохо работает с IE7 и ниже

Максимум
источник