2009年12月16日

jQueryでIE6を透過PNGに対応させる

人気ブログランキングにほんブログ村 IT技術ブログへ

インターネットエクスプローラーのバージョン6(IE6)では、透過PNGという半透明の画像をそのまま表示させることができません。通常は画像の背景が灰色で塗りつぶされてしまいます。

しかしIEシリーズにはfilterと呼ばれる独自のメソッドがあり、その中のAlphaImageLoaderを使うとちゃんと透過PNGが表示されます。

ですので、前回のjQueryで作るロールオーバーで作成したメニューを改良して、IE6でも表示できる半透明のメニューを作りました。

注意点はli要素とimg要素にwidthとheightを同じに設定するところです。チュートリアルをちゃんと読んでいなかったがためにこの設定を見逃し、メニューが何も表示されないまま小一時間ほど悩んでしまいました。

ASCII.jp:IE6対応!jQueryで透過PNGのロールオーバーを作る|Web制作の現場で使えるjQuery UIデザイン入門を参考に、IE6でも表示できる透過PNGのメニューを作成しました。

季節感無い背景画像でごめんなさい。

IE6透過PNG対応メニュー

  • home
  • about
  • blog
  • contact


コードは以下の通り。
<style type="text/css">
#ie6transparent {
width:480px;
height:360px;
background:url("//img01.naganoblog.jp/usr/webdesign/wc0011.jpg") no-repeat;
}
#ie6transparent h2 {
margin:10px 0px;
text-indent:1em;
color:#ffffff;
}
#ie6transparent img {
width:100px;
height:40px;
margin:0px;
}
#ie6transparent li {
width:100px;
height:40px;
float:left;
}
/* フロートの背景を確保 */
.clear {
overflow: hidden;
}
.clear:after {
display: block;
clear: both;
height: 0px;
content: "";
}
/*\*/
* html clear {
height: 0px;
overflow: visible;
}
/**/
</style>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#ie6transparent li").css("listStyleType","none");
$("#ie6transparent img").css("border","none");
});
$(function(){
$("#ie6transparent img.on").each(function(){
$("<img>").attr("src",$(this).attr("src").replace(/^(.+)(\.[a-z]+)$/,"$1_on$2"));
});
if($.browser.msie && $.browser.version<7){
$("#ie6transparent img.on").each(function(){
$(this)
.data("src",$(this).attr("src"))
.attr("src","//img01.naganoblog.jp/usr/webdesign/ie6transparent.gif")
.css("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+$(this).data("src")+"',sizingMethod='scale')");
}).mouseover(function(){
$(this).css("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+$(this).data("src").replace(/^(.+)(\.[a-z]+)$/,"$1_on$2")+"',sizingMethod='scale')");
}).mouseout(function(){
$(this).css("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+$(this).data("src")+"',sizingMethod='scale')");
});
}else{
$("#ie6transparent img.on").mouseover(function(){
$(this).attr("src",$(this).attr("src").replace(/^(.+)(\.[a-z]+)$/,"$1_on$2"));
}).mouseout(function(){
$(this).attr("src",$(this).attr("src").replace(/^(.+)_on(\.[a-z]+)$/,"$1$2"));
});
}
})
</script>
<div id="ie6transparent" class="clear">
<h2>IE6透過PNG対応メニュー</h2>
<ul>
<li><a href="#"><img src="//img01.naganoblog.jp/usr/webdesign/ie6transparent_home.png" alt="home" class="on" /></a></li>
<li><a href="#"><img src="//img01.naganoblog.jp/usr/webdesign/ie6transparent_about.png" alt="about" class="on" /></a></li>
<li><a href="#"><img src="//img01.naganoblog.jp/usr/webdesign/ie6transparent_blog.png" alt="blog" class="on" /></a></li>
<li><a href="#"><img src="//img01.naganoblog.jp/usr/webdesign/ie6transparent_contact.png" alt="contact" class="on" /></a></li>
</ul>
</div>


同じカテゴリー(jQuery)の記事画像
jQueryで作るロールオーバー
jQueryで作るオリジナルツールチップ
jQueryでのアニメーション animate()
jQueryのアニメーションfadeIn Out To
jQueryのアニメーションslideUp Down 他
jQueryのアニメーションshow hide toggle
同じカテゴリー(jQuery)の記事
 jQueryで作るロールオーバー (2009-12-12 18:00)
 jQueryで作るオリジナルツールチップ (2009-12-11 23:44)
 jQueryで作るタブパネル (2009-12-10 18:00)
 jQueryで作るアコーディオンパネル (2009-12-09 18:00)
 jQueryでイメージギャラリーを作成。 (2009-11-29 17:58)
 jQueryでストライプの装飾 :nth-child() (2009-11-25 17:15)

Posted by ヒダカ at 20:34│Comments(0)jQuery
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。