Стиль IE filter
- ужасный беспорядок. Он позволяет браузеру делать несколько трюков, которые в противном случае вышли бы за его рамки, но он нестандартен и имеет некоторые серьезные проблемы.
Я не могу быть уверен, не увидев ваш полный CSS, но мне кажется, что вы попали в одну из самых больших хитростей filter
уловок:
Если вам нужно указать более одного фильтра, вы должны указать их вместе. Если вы указываете их отдельно, как вы сделали в своем примере, второй filter
переопределяет первый, даже если они фактически выполняют совершенно другие действия. Это на самом деле согласуется с тем, как вообще работают таблицы стилей CSS, но нелогично из-за того, что filter
может сделать.
Вы можете указать несколько фильтров в одном стиле filter
, разделенных пробелом.
См. Здесь для справки: http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx
Проблемы с этим подходом очевидны, если вы хотите, чтобы в таблице стилей были разные эффекты, вызванные разными именами классов, - потому что нет способа объединить фильтры из разных источников в один и тот же элемент.
Другой большой недостаток, который может вас поймать, заключается в том, что фильтры, написанные с синтаксисом progid:
, на самом деле являются недействительными CSS из-за двоеточия, и это достаточно плохо, чтобы заставить некоторые браузеры не IE задыхаться от всей таблицы стилей , Этого можно избежать, используя сокращенный синтаксис (согласно фильтру alpha()
в вашем первом примере), для IE6 и IE7 или для IE8 с альтернативой -ms-filter
, используя более длинный синтаксис, заключая все это в кавычки .
Вот пример:
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50) progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/translucent_effect.png', sizing Method='scale');"
Надеюсь, это поможет.