IE8, прозрачный PNG и фильтр: альфа - PullRequest
4 голосов
/ 25 января 2011

Я режу прямо к делу.Вот вывод:

enter image description here

(теперь некоторый дополнительный код - только для чтения, если вы действительно хотите;))

Вот разметка:

<a href="/" id="logo_wrapper">
    <span class="logo logo_normal"></span>
    <span class="logo logo_hover"></span>
</a>

Вот CSS (сокращенно только для соответствующих материалов, для вашего удовольствия от чтения):

#logo_wrapper {
  position:relative;
}
#logo_wrapper .logo {
  display:block;
  width:260px;
  height:80px;
  background-image:url(logo.png);
  position:absolute;
}
#logo_wrapper .logo_normal {
  background-position:0 0;
}
#logo_wrapper .logo_normal:hover {
  opacity:0;
  filter:alpha(opacity=0);
}
#logo_wrapper .logo_hover {
  background-position:0 -80px;
  opacity:0;
  filter:alpha(opacity=0);
}
#logo_wrapper .logo_hover:hover {
  opacity:1;
  filter:alpha(opacity=100); /* THIS IS THE OFFENDER! */
}

Просто чтобы уточнить: я знаю, что могу сойти с одного span и простопереключение логотипа background-position при наведении курсора, но полный CSS имеет симпатичные переходы CSS3 для реальных браузеров, которые не должны прокручивать логотип вверх и вниз.

ОК, так что это PNG с 32-битным цветомглубина и, конечно же, прозрачность.Все хорошо в IE8, когда я вообще не использую альфа-фильтр или filter:alpha(opacity=0).Но с непрозрачностью, установленной на 100, простое использование фильтра приводит к тому, что IE8 сходит с ума и делает все не совсем прозрачные пиксели непрозрачными на 100%.Не то, чтобы это конкретное изображение выглядело так плохо с этим эффектом, но оно все еще раздражает: D.

Теперь я хорошо знаю, что IE8 печально известен проблемами прозрачного PNG, с проблемами, восходящими к IE6 и егоотвратительная сплошная голубая заливка прозрачных областей.Это можно исправить с помощью черной магии поведения IE.

Что можно сделать с IE8?

Ответы [ 4 ]

9 голосов
/ 15 января 2012

Простое исправление: просто добавьте цвет фона в .logo_hover: hover , и альфа-фильтр снова будет работать нормально.

Очевидно, что это исправление не всегда полезно (то есть, если вы не можете использовать цвет фона ниже png, который имитирует реальный фон).

1 голос
/ 20 октября 2011

Это сработало для меня:

filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='logo.png', sizingMethod='scale', alpha(opacity=100));

Спасибо, SLaks !!

1 голос
/ 25 января 2011

Вам нужно использовать фильтр AlphaImageLoader, как и в IE6.

0 голосов
/ 07 декабря 2014

Используйте filter:none в вашем :hover классе.

...