IE-winでも透過PNGは利用できる

Thursday, Jun 29, 2006 - 01:04 +09:00

※この記事は追記・編集して新サイトへ移行されています。

透過PNGってのは透明度を付加した画像のこと。「完全な透明」か「完全な不透明」かの二択しかなかった透過GIFと違い、もっと詳細に透明度を指定することができます。50%とか25%とか。巧く使えばデザインの自由度が凄く広がるシロモノなんだけど、IE-winはデフォルトでサポートしていません。

今回の纏めは、そのIE-winで透過PNGを使う方法。
といってもCSSにちょちょいとコピペするだけですけどね。以下みたく。

#overlay {
    background-image: none;
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="./overlay.png", sizingMethod="scale");
}

これは「AlphaImageLoader Filter」という指定。なんだか仰々しい文字列ですね。元は「要素」と「要素の背景」の間に画像を配置する指定で、Direct Xで実現してます。そして画像にαチャンネル(透過度情報を保存するデータ領域)が設定してある場合は、これが有効になると。

Attribute Property
enabled フィルターの有効、無効を指定します。
1(true)で有効、0(false)で無効。デフォルト値は1(true)。
sizingMethod 画像の貼り付け方を指定します。
cropはそのまま。imageは要素を画像の大きさに合わせ、scaleは要素の大きさに合わせて画像を拡大(縮小)します。デフォルト値はimage
src 画像のURLを指定します。
デフォルト値は無し。

AlphaImageLoaderに対応しているのは、IE6とIE5.5のみ。モダンブラウザ(Opera. Mozilla, NN, Firefox, Safari, Camino, IE-macなど)はPNGに対応しているから良いとして、IE5.0を対象に入れている場合は効果がないので一考の余地あり。

備考

AlphaImageLoaderを使用した要素内にリンクを設ける場合、リンクをクリックできなくなります。<a>領域を絶対配置にして要素の上に被せる必要があるでしょう。

追記: 2006/07/05

画像へのパスは、絶対指定で記述する。相対だと巧くいかないことが多いようです。また、<a>領域自体にAlphaImageLoaderを使用したなら、この場合はリンクが有効になるみたいです。

posted in HTML/CSS | Comment (2) | Trackback (0)

2 Comments

1. haya / September 05, 2006 at 22:02

まさに今やりたいことだったので、とても助かりました。ありがとうございます。

IEのみの対応なら、上記のようにしても問題ないのですが、Firefoxなどにも対応させるときは
* html div#overlay { ... }
のようなIEのみにCSSを適用させるいんちきハックを併用するといいと思います。Firefox、IEで両方とも思い通りに表示させられることを確認しました。

あと、試してみたところ <a> タグは絶対配置ではなく、相対配置(position: relative;)でもクリックできるようになりました。
positionを明記しない場合は、リンクだけでなく、フォームも選択不可能になりました。。。恐るべし。

2. Sig. / September 07, 2006 at 18:32

お役に立てたようで、嬉しいです。
指摘されたとおり、上記をそのままコピペするだけだとFirefox等のモダンブラウザで「background: none;」になっちゃいます。

その際、
* html div#overlay { ... }
とするのも手ですが、「* html」だけだとIE-macにも適用されてしまう(IE-macは透過PNGに対応してる)ので、余裕があれば

/* hide from IE-mac \*/
* html div#overlay { ... }
/* --- end --- */

とでもしておくと良いでしょう。
リンクやフォームに関しては、相対配置でも「z-index」を適切に指定しておけば大丈夫です^^b

Trackback

このエントリーのトラックバックURL
http://rospear.info/other/mt-tb.cgi/189

« Previous Entry - Next Entry »