CSS ファイルだけで IE 6 の背景に設定した png のアルファチャンネルを有効にする | ヨモツネット text ja 2008-04-07 http://www.yomotsu.net/wp/?p=400

CSS ファイルだけで IE 6 の背景に設定した png のアルファチャンネルを有効にする

IE 6 で背景に指定した png のアルファチャンネルを有効にするための JavaScript がいくつかありますが、それとほぼ同じことを CSS のなかで行うコードを書いてみました。

この方法を使うことの利点 / 欠点は

利点
  • JavaScript で背景の png を AlphaImageLoader に置き換える場合はページの読み込み完了後に置き換わるため、一瞬 png の半透明部分がグレーになりますが、この方法はそれがありません。
  • JavaScript で同じことを行う場合は IE のために Web ページで読み込む JavaScript のライブラリを増やさなければいけないかもしれませんが、この方法はそれがありません。
  • 背景にする png ファイルへのパスを相対パスで扱えます。
欠点
CSS に IE の独自実装を記述するので CSS 自体は Valid ではなくなります。

実際に動作を確認していただくために CSS ファイルだけで IE 6 の背景に設定した png のアルファチャンネルを有効にするためのコードの demo を用意しました。

実際に使う場合のコードは例えば、

div.sample{
background:url(img/bg.png) no-repeat;
}
があった場合、以下のコードを追加します。
* html div.sample{
behavior: expression(
this.style.behavior || (
this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=crop,src='"+this.currentStyle.getAttribute("backgroundImage").slice(5,-2)+"')",
this.style.backgroundImage = "none",
this.style.behavior = "none"
)
);
}

このコードは

を使って CSS 内で IE 6 対策も完結させてしまうためのものです。

具体的に何をやっているのかというと

  1. expression で自分 ( this ) の stylefilterAlphaImageLoader を設定してそこで使う png の参照先は自分の background-image に設定されている値にする
  2. 自分の background-imagenone に変更する
  3. expression がそのままだと無限に実行し続けるので最後に behaviornone にして expression を消す

という流れです。実際に CSS ファイルに記述するときは

div.sample{
background:url(img/bg.png) no-repeat;
}

* html div.sample{
behavior: expression(
this.style.behavior || (
this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=crop,src='"+this.currentStyle.getAttribute("backgroundImage").slice(5,-2)+"')",
this.style.backgroundImage = "none",
this.style.behavior = "none"
)
);
}

という感じににします。

リピートっぽくしたい場合は

* html div.sample{
behavior: expression(
this.style.behavior || (
this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src='"+this.currentStyle.getAttribute("backgroundImage").slice(5,-2)+"')",
this.style.backgroundImage = "none",
this.style.behavior = "none"
)
);
}

という感じで sizingMethod の部分に scale を設定します。ただし、実際には scale はリピートではなく、適用されている要素のwidth, height にアスペクト比を無視して伸縮させるだけです。タイル状にはなりません。

注意点

JavaScript で背景の png を AlphaImageLoader に置き換える場合にも同じことですが、以下の注意点があります。



トラックバックURI

http://www.yomotsu.net/wp/wp-trackback.php?p=400

コメント

[CSS]透過PNG画像をIE6で適用させる - ウェブミルクさんからのコメント

2009年2月20日 12:32

[...] CSSの指定だけで透過PNG画像をIE6で適用できる情報が、ヨモツネットさんとCSS TIPSさんで掲載されていたので引用メモ。 透過pngは便利な機能なのですが、IE6が対応していない為、通常のやり方では使用できません。 [...]
ギターを弾き語れ!管理人ブログさんからのコメント

2009年3月24日 21:45

IEにおける透過pngの不具合をCSSだけで解決する方法… 僕は普段インターネットのブラウズにFirefoxを使っておりまして、IEの事なんかまるで眼中にないデザインをしているのですが、他のPCで自分のブログを見た時、透過pngを使用している背景…

コメントフォーム

コメント

コメントでは一部の XHTML タグを使用できます。 : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

カテゴリー一覧

この Weblog の FEED

この Weblog の FEED