透過PNGをIEできちんとopacityさせたい
透過PNGをIE6/7/8にエラーなく反映させたい時、みなさんどのように対処されていますか? 今回、つまずきがちなその問題に立ち向かうべく、私なりに色々と調べてみました。
有用と思しき記事に出会うたび、リンク切れだったり、ちょっと難しかったりしたので、 簡単にわかりやすく、次に自分が対応するときのことも考えて記事に残したいと思います。
今回はMach3.laBlogさんのページを参考に実際のサンプルを作っていくことにいたしました。
【参考サイト】
透過PNGをIE6で使用する際に有名なのは「DD_belatedPNG」ですが、 IE6向けのライブラリのため、IE8ではエラーが出てしまいます。
IE6/7/8全てに透過PNGを対応させるため、Mach3.laBlogさんの記事を元に、 「DD_belatedPNG」をjQueryプラグインとして移植して改造してくださった、 プログラマ気分さんの「jquery.belatedPNG.js」を使用いたします。
【参考サイト】
1.jQuaryをダウンロード
「Download」ボタンを押してjQuery本体をダウンロードして使います。
2.「jQuery.belatedPNG」をダウンロード
3.HTMLに記述
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.belatedPNG.js"></script>
4.jQueryを記述
「jquery.belatedPNG.js」は、 jQueryオブジェクトにfixPng()メソッドを提供します。
<script> $(function(){ $(".test").fixPng(); }) </script>
CSSを設定して透明度を50%に指定します。
<script> $(function(){ $(".test").fixPng().css("opacity","0.5"); }) </script>
5.body内に記述
マウスイベントが効かなくなる問題のために、 子要素に透過gifを入れます。
<a href="#" class="test"> <img src="spacer.gif" alt="CLICK" width="100" height="100" border="0"> </a>
Mach3.laBlogさんの内容をサンプルページにするとこんな感じ。
マウスイベントが効かなくなる問題も解決されて、 opacityもきちんと反映されています!
6-1.応用
ボタンとして利用する場合、できればマウスオーバーの機能をつけたいですよね。 そこで、jQueryを使ってマウスオーバーに透明度を設定します。 下記のサイトを参考にjQueryを書きます。
【参考サイト】
$(document).ready(function(){ $("a").hover(function(){ $(this).fadeTo("fast",0.5); }, function(){ $(this).fadeTo("fast",1.0); }); });
6-2.応用
もっといい方法があるかとは思いますが、さらにボタンの種類が数種類ある場合、 自由な位置にボタンを置きたい場合などもpositionを利用して配置を行ってやれば、スムーズに動いてくれます。
参考ページ
■IEの透過PNG+opacityの不具合を治すメモ | Mach3.laBlog
■DD_belatedPNG を改造して、jQuery.belatedPNG を作ってみた | プログラマ気分