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が公開されているのでコチラを使用
使用方法
<!--[if lt IE 6]> <script src="jquery.belatedPNG.min.js"></script> <script> $("selector").fixPng(); </script> <![endif]-->
png画像の要素を指定します
問題点
- マウスオーバーで画像を変更させたい場合などはJavascriptを使わずcssで処理しないと動作しない
コメント