
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で処理しないと動作しない


コメント