[IE対策]IEでfade効果などをさせた場合のPNG画像が透過されない(黒くなる)時の対処法

jQuery

pngimg

jQueryなどで画像をふわっとfade効果を与えることって今の時代当たり前のなってきたと思います。

ただIE8以下の固有のバグでカーソルをpng画像にhoverした際に輪郭に黒くギザギザした汚いものが表示されますよね。

こんな時に対処する2つの方法を備忘録を兼ねて紹介します。

alphaImageLoaderを使用

AlphaImageLoaderはCSSのみで対応可能。

filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(Enabled, sizingMethod,src);

これをPNG画像に適用。

ただ手っ取り早く大量のPNG画像に適用させたい場合はjavascriptを利用
※jQuery必須

// for IE
jQuery(function() {
    if(navigator.userAgent.indexOf("MSIE") != -1) {
        jQuery('img').each(function() {
            if(jQuery(this).attr('src').indexOf('.png') != -1) {
                jQuery(this).css({
                    'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + jQuery(this).attr('src') + '", sizingMethod="scale");'
                });
            }
        });
    }
});

ただjavascriptを利用した場合は下記の問題点もあります。

問題点

  • 背景のみの指定。
  • background-repeatで表示されるタイル並べやbackground-positionに非対応。
  • AlphaImageLoaderを使ったブロック要素のpositionプロパティがrelativeかabsoluteに指定されている場合、子孫要素のa要素、疑似要素hover等が不可。

DD_belatedPNGを使用

jQuery版のbelatedPNG.jsが公開されているのでコチラを使用

belatedPNG.js(jquery版)

使用方法

<!--[if lt IE 6]>
<script src="jquery.belatedPNG.min.js"></script>
<script>
$("selector").fixPng();
</script>
<![endif]-->

png画像の要素を指定します

問題点

  • マウスオーバーで画像を変更させたい場合などはJavascriptを使わずcssで処理しないと動作しない

コメント

タイトルとURLをコピーしました