このページの本文へ

  • twitterでつぶやく
  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

Web制作の現場で使えるjQuery UIデザイン入門 ― 第18回

IE6対応!jQueryで透過PNGのロールオーバーを作る

2009年11月09日 11時00分更新

文● 西畑一馬/to-R


IE6で透過PNGを表示する

 さて、ここからが今回の本題です。サンプル01をIE6でも正しく表示できるようにします。IE6ではCSSの独自拡張(filterプロパティ)を使って透過PNG画像を背景として表示できます(関連記事)。jQueryのスクリプトを書く前に、IE6で単純に透過PNGを表示するHTMLとCSSを作成します。

 ナビゲーションメニューのHTMLはサンプル01と同様にul/li要素で記述します。IE6では透過PNGをimg要素に直接指定しても表示できませんので、代わりにダミー画像(1px×1pxの透過GIF画像=「transparent.gif」)を用意してsrc属性に指定します。img要素にはCSSを設定するため、「jquery」「javascript」などのメニューの項目名に対応したclass属性を付けておきます。

サンプル02(HTML部分)


<ul>
    <li><a href="#"><img src="images/transparent.gif" alt="jQuery" class="jquery" /></a></li>
    <li><a href="#"><img src="images/transparent.gif" alt="javascript" class="javascript" /></a></li>
    <li><a href="#"><img src="images/transparent.gif" alt="CSS" class="css" /></a></li>
    <li><a href="#"><img src="images/transparent.gif" alt="HTML" class="html" /></a></li>
</ul>


 CSSはIE6にのみスタイルを適用させるため、セレクターの頭に「* html」を付ける「スターハック」(CSSハックの一種)を使って記述しています(関連記事)。先ほど付けておいたclassごとにfilterプロパティを設定して、透過PNG画像をimg要素の背景として表示しています。filterプロパティの詳しい使い方はコラムで解説していますので参照してください。

サンプル02(CSS部分)


ul{
    padding: 10px;
    margin:0;
}
ul li{
    width:140px;
    height:40px;
    list-style-type:none;
    float:left;
}
ul li img{
    width:140px;
    height:40px;
    border:none;
}
* html img.jquery{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/jquery.png',sizingMethod='scale')
}
* html img.javascript{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/javascript.png',sizingMethod='scale')
}
* html img.css{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/css.png',sizingMethod='scale')
}
* html img.html{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/html.png',sizingMethod='scale')
}


透過PNG
実行結果。透過PNGをIE6で表示している

 以上でIE6で透過PNG画像を表示できました。次ページでは、サンプル01とサンプル02を組み合わせて、クロスブラウザーで表示できる透過PNG対応のロールオーバーに仕上げていきます。



【CSSワンポイントレッスン 】

透過PNGをWeb制作にもっと利用する

 ツールチップではp要素の背景として(関連記事)、今回のロールオーバーではimg要素として、IE6で透過PNGを表示しました。ここではIE6の透過PNG対応について、もう少し詳しく紹介しましょう。

 透過PNGを表示するCSSのfilterプロパティは以下のような記述でした。


filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/tooltip.png',sizingMethod='scale');


 IEの独自機能であるfilterプロパティに、「AlphaImageLoader」を指定して透過PNGを読み込んでいます。かなり長い記述ですが、この1行はお約束として覚えてしまいましょう。AlphaImageLoader (src='・・・',sizingMethod='・・・')内のsrcには画像のパスを、sizingMethodには以下のような画像の表示方法を指定します。

  • scale(透過PNGのサイズを要素のサイズに合わせる)
  • image(要素のサイズを透過PNGのサイズに合わせる)
  • crop (サイズを変化させずに要素に透過PNGを表示する)

 実際にどのように画像が表示されるか、簡単なサンプルで確認してみましょう。たとえば、100px×50pxの透過PNGを、200px×100pxの要素に配置した場合、次のようになります。上からCSSのbackgroundプロパティ、AlphaImageLoaderのscale、image、cropです。

IE PNGサンプル
IE6で透過PNGを表示したサンプル。上からCSSのbackgroundプロパティ、AlphaImageLoaderのscale、image、crop

サンプル04(HTML部分)


<p>background</p>
<div id="sample1"></div>
<p>scale</p>
<div id="sample2"></div>
<p>image</p>
<div id="sample3"></div>
<p>crop</p>
<div id="sample4"></div>


サンプル04(CSS部分)


div{
    width:200px;
    height:100px;
    border:1px solid red;
}
#sample1{
    background:url("images/alpha.png")
}
#sample2{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/alpha.png',sizingMethod='scale')
}
#sample3{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/alpha.png',sizingMethod='image')
}
#sample4{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/alpha.png',sizingMethod='crop')
}


 CSSのbackgroundプロパティとは挙動が大きく異なるため、通常はHTMLの要素のサイズ指定とPNG画像のサイズを同じにしておき、「scale」か「crop」を選ぶのがよいでしょう。CSSのbackground-imageプロパティのように、background-repat(繰り返し)やbackground-position(表示位置)は指定できないので、表示位置を考慮した1枚絵の画像を用意する必要があります。

 このほかにもAlphaImageLoaderを利用する際にはいくつか細かい注意点があります。1つはパスの指定方法です。CSSのbackgroundプロパティでurlを指定する際はCSSファイルからの相対パス、もしくは絶対パスで記述しますが、AlphaImageLoaderのsrcの中のファイルパスは読み込まれたHTMLファイルからの相対パス、もしくは絶対パスで記述します。

 また、背景にAlphaImageLoaderを設定した要素は、その子要素・孫要素のa要素のリンクや、clickイベント、mouseoverイベント、input要素のフォーカスが効かなくなってしまいます。その場合は、子要素や孫要素のpostionプロパティにrelativeを設定すれば、a要素のリンクやフォーカスなどが有効になります(*)

 このように一癖あるIE6での透過PNG利用ですが、うまく使いこなせるようになれば、他の画像フォーマットでは難しい、さまざまなデザイン表現ができるようになります。ぜひ覚えておきましょう。



 *ただし、AlphaImageLoaderを設定した要素のpositionプロパティがrelativeまたはabsoluteの場合は、その子要素にrelativeを指定しても有効になりません。

この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

VOCALOID3 スターターIA ARIA ON THE PLANETES

VOCALOID3 スターターIA ARIA ON THE PLANETES

ヤマハ

17,745円〜

24人が購入

標準HTML5タグリファレンス (WEB PROFESSIONAL)

標準HTML5タグリファレンス (WEB PROFESSIONAL)

アスキー・メディアワークス

2,205円〜

107人が購入

Google上位表示 64の法則 (WEB PROFESSIONAL)

Google上位表示 64の法則 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

69人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

11人が購入

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

スペックコンピュータ

4,333円〜

21人が購入

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

70人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

33人が購入

Amazon.co.jp