Автор:
harisov
Оригинал: http://harisov.livejournal.com/58661.html
MSIE6- полупрозрачные PNG не поддерживает, это всем известно. Как обойти это с помощью AlphaImageLoader тоже всем известно. Но обычно описывается или решение в лоб, когда для каждого PNG-24 указывается в стиле AlphaImageLoader с конкретным URL к картинке, или громоздкое решение со скриптом.
Искал сегодня универсальное решение, чтобы не надо было ни прописывать для каждой картинки свой собственный AlphaImageLoader, ни применять внешние скрипты (мало того, что там написано дофига, так это ещё и внешний файл + используется прозрачный GIF).
Нашёл такое решение:
HTML:
<img class="png" src="/path/to/your.png" alt="different story"/>
CSS:
img.png { background-image: expression( this.runtimeStyle.backgroundImage = "none", this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "', sizingMethod='image')", this.src = "/path/to/transparent.gif" ); }
Вроде бы то, что надо. Но, во-первых, оно у меня не заработало :), во-вторых, используется прозрачный GIF (т.е. + ещё один HTTP запрос), а в-третьих, нет поддержки MSIE5.
Думал, пыхтел, пробовал, ругался.
В итоге родилось такое решение:
<i class="png"><img src="image.png" alt="Image"/></i>
HTML код чуть больше, чем в предыдущем примере. Сейчас станет понятно почему. Самое главное, как обычно, в CSS:
* html .png { width: expression(this.firstChild.width); filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ this.firstChild.src+"', sizingMethod='image')"); background: expression("transparent url("+ this.firstChild.src.replace(".png", ".gif")+") no-repeat"); backgr\ound: none !important; } * html .png img { behavior: expression(this.style.visibility="hidden"); }
Теперь по порядку:
Итак, что получилось: