以前もこの「DD_belatedPNG.js」に関してはエントリーしましたが
『IE6で透過pngを表示させるオススメscript、「DD_belatedPNG.js」』、あまりの素晴らしさにオススメするだけして使用法とか注意事項など大事な部分に触れずじまいでした。
この素敵な透過png対応策であるDD_belatedPNGちゃんですが、img要素に使用する際にも、div要素やp要素等の背景画像に対して使用する際も、ほんのちょっとしたクセがあります。
なので、今回はこの偉大なる「DD_belatedPNG.js」の使用方法と、使用に関するちょっとした注意点などをエントリーしようと思います。
DD_belatedPNGの使用法と注意点
1.使用するための準備
まずはこの「DD_belatedPNG.js」自体をダウンロードしないコトには始まりません。
配布元のDrew Diller’s blogに行き、左部の記事タイトルから「DD_belatedPNG 0.0.ナントカ」とあるテキスト(ナントカの部分はヴァージョンなので、最新のものを探してください。09年3月29日時点では0.0.7aが最新版となっています。)をクリックしてください。DDシリーズは複数あるので、ちゃんと”belatedPNG”かどうかを確認したらいいよ。
該当記事のショッパナの方にあるリンク(”http://www.dillerdesign.com/experiment/DD_belatedPNG/#release0.0.7a”とか書いてある部分)をクリック!
すると配布用記事の中段辺りに飛ばされます。少し上にスクロールしてみると、晴れて緑色のボタンがありますので、クリックしてください。
※通常版と圧縮版があるかと思いますが、中身を解析したいとかじゃなければフツーに圧縮版(○○○-min.jsの方)で問題ないと思います。
プレーンなJavaScriptが表示されます。これがウワサの「DD_belatedPNG.js」です!右クリックで「このページのソースを表示」をクリックし、表示されたソースをctrl + aかなんかで全てコピーし、新規テキストにでもペーストして、名前を「DD_belatedPNG.js」として保存してください。
以上で準備完了!めくるめくpngワンダーランドへようこそ☆
2.全体的な基本設定と使用方法
使用したいhtmlのhead部分に、下記のように記入してください。
<!--[if IE 6]>
<script src="○○○/DD_belatedPNG.js"></script>
<script>
DD_belatedPNG.fix('img, .png_bg');
</script>
<![endif]-->
ちょっと解説しますと、まず1行目と6行目の文で「IE6にだけ、このスクリプトを実行するよ」と宣言しています。
次に、2行目の「○○○」の部分には、DD_belatedPNG.jsを入れたフォルダパスを。
そして、肝心の4行目。’img, .png_bg’の部分。ここに、DD_belatedPNG.jsを反映させる要素名やid名、クラス名をCSSな書き方で記入します。
上記だと、img要素全て+png_bgというクラス名の要素に対してDD_belatedPNG.jsが動作します。
ホントは処理速度的に多少遅くなるので、できればimg要素にもクラス名を設定したほうが良いのかもしれませんが、いちいちpng画像のimg要素にだけクラス振るのもメンドーな自分は、上記のようにimg要素全てを指定しちゃってます。で、.png_bgは背景にpng画像を使う要素にだけ指定する、と。
ただ、DD_belatedPNG.js内部で画像がpng形式かどうかの判別を行っているようで、gifやjpgにまで影響を及ぼすことはなさそうです。
以上、コレだけで、上記で指定した要素のpng画像には透過が反映されます!
コレだけで、悪夢から覚めることが出来るのです!
3.img要素に使用する場合
ここで、img要素に使用する際のいくつかの注意点を。
ただimg要素にpng画像を使うだけなら、上記で何の問題もありません。
しかし、png画像のimg要素にロールオーバーを設定したい場合、少し注意とコツが必要なんです。
たとえば、png画像のimg要素を<a>要素で囲んでリンクボタンとして、img要素をロールオーバーさせたい場合、img要素に onmouseover=なんちゃら って指定しても、動きません。
ロールオーバーを実現したい場合、下記のようにCSSだけでロールオーバーの動作を再現する設定をしてあげないといけません。
<a href="http://○○○.html" id="rollover01" class="png_bg"></a>
#rollover01 {width:○○○px;height:○○○px;}
a#rollover01:link {background:url(mouse_on.png);}
a#rollover01:visited {background:url(mouse_on.png);}
a#rollover01:hover {background:url(mouse_off.png);}
a#rollover01:active {background:url(mouse_off.png);}
まずcss側で、ロールオーバーさせる画像のサイズ(widthとheight)を固定します。
それから各擬似要素でマウスオーバー時の画像などを指定する方法です。
また、不透明度を操作するJavaScriptには対応していないそうです。jQueryなどでフェードイン/アウトなどを指定しても反応しないのは、仕様の問題のようですね。
同じく仕様としては、input要素にも対応していないそうなので、ご利用の際はご注意ください。
4.divやpなどの背景に使用する場合
「DD_belatedPNG.js」を使う最大の利点とも言えるのが、背景にpng画像をリピート描画できるという事。
同じく背景にpng画像をリピート描画できるスクリプトに「IE PNG FIX v2.0 Alpha」がありますが、やはりこちらはDD_belatedPNG.jsに比べて処理が断然重いように感じます。
png画像を背景に使用する方法は、いたって簡単です。通常のgif形式やjpg形式の画像と同じように使用できます。
<div id="foo" class="png_bg"> <p>ほげほげふがふが</p> </div>
#foo {background:url(bg.png) repeat left top;}
まずは背景にpng画像を指定する要素に、head内で設定したクラス名を与えます。
あとは他形式の画像と同様に、繰り返すなり繰り返さないなり、絶対配置するなり相対配置するなり、好きにすればいいさ。
ただしこちらも仕様上の問題でいくつか注意すべき点があります。
忘れてるとハマりそうなのが、body・tr・td要素の背景には使えないという点。ページ全体にpng画像の背景を設定したい場合は、全体を<div id="wrap"></div>などで囲んで、そこに背景を設定する必要があります。
あと、どうやらbackground-position:fixed;には未対応の模様です。
簡単な入力でRSSがGoogle Feed APIのjQueryをタブにドーン!!!!です。
意味が分からない?期待して待て、続報☆





fantastic0924 より:
2009/04/30 8:19 AM
smknさん
はじめましてfantastic0924と申します。
web業界歴一年とチョットの初心者です。現在ポートフォリオサイト作ってまして透過PNGを背景に使用すると、、でましたIE6です。表示されません。
それで色々と探っていましたとこと、smknさんの記事にたどり着きました。見事問題は解決されました。本当に感謝しています。有難うございました。respect!