PNG-24, проблема отображения в IE. Как исправить?
Проблема:
В браузере IE версии 6 и ниже неверно отображаются прозрачные картинки в формате PNG.
Решение:
Как и всегда на просторах интернета довольно легко найти множество готовых решений проблемы, но далеко не все они работают в контексте той или иной ситуации.
Суть решения заключается в использовании фильтра AlphaImageLoader
Установить фильтр можно через стили или через скрипт:
1 |
<div style="height:250px; width:250px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/img/bg.png', sizingMethod='scale');"> </div> |
1 |
<script type="text/javascript"> document.getElementById('elemId').style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/img/bg.png', sizingMethod='scale')"; </script> |
Но это только общий вид.
Еще нужно учесть, что нужна прозрачная картинка на замену строй, в моем примере она лежит по адресу:
/images/system/transporant.gif
Для решения мой проблемы подошел такой вариант:
На JavaScript использовать функцию:
1 |
function fixPNG(element) { if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent)) { var src; if (element.tagName=='IMG') { if (/\.png$/.test(element.src)) { src = element.src; element.src = "/images/system/transporant.gif"; } } else { src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i) if (src) { src = src[1]; element.runtimeStyle.backgroundImage="none"; } } if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')"; } } |
А в CSS добавить:
1 |
img, .img
{
filter:expression(fixPNG(this));
} |
Проблема этого метода в параметре sizingMethod='scale' – из-за него некоторые фоновые картинки могут сильно деформироваться.