IEでアルファチャネル透過PNGを正常に表示させる・・・その後

導入してから気になっていたけど、メールとプリンタのアイコン。他にもあるけどトップページに表示されるので目に付く。なにが目に付くのかというと、数ドット間延びしてしまっている。どうしてこうなるのか探っていたが、どうやらJavascriptに問題があるようだ。中で何をやっているかというとIMGタグをすべてSPANタグに置き換えてDirectXで処理したものを表示している。
置き換えられたコード
<SPAN title="" style="DISPLAY: inline-block; FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader( src='http://geeklogtest.maryn.jp/layout/FixPCSS/images/mail.png', sizingMethod='scale'); WIDTH: 16px; CURSOR: hand; HEIGHT: 16px"></SPAN>
なぜ間延びしてしまうかというと、IEの場合1文字もない場合でもこのタグに指定されているフォントのサイズよりも小さいサイズにはできないのがそもそもの原因らしい。おまけにsizingMethod='scale'が指定されているので拡大されてしまっている。この条件が重なり合って間延びした気持ち悪い画像が表示されている。
解決するにはいくつか方法がある。
1.IMGタグに戻す
2.sizingMethod='scale'を取り除く
3.font-size:0;を挿入する
やはりまずIMGタグのまま使用できればそれに超したことはないので1の方法から試してみた。しかしどうにもうまくいかない。なぜか左の画像のようになってしまう(笑)これではさすがに使い物にならないので、残る手段は2か3ということになる。2の場合はそのものを取り除くだけなので楽なのだが、画像の高さと「ないテキスト」の高さが違うため空白部分ができてしまう。このためそれを意識したレイアウトにしないと崩れてしまう可能性があるのでやめた。そこで結局3のfont-sizeを0にするのが一番無難なので3の方法で表示させることにした。
ところがこれでも問題があることがわかった。元々のIMGタグにpaddingが指定されていると、これまた伸びてしまう。そこでsizingMethodについて調べてみるとimageという値にしてやれば要素のheightやwidthに関係なく要素を画像の大きさにあわせてくれるらしいので、最終的にその方法にした。
pngfix.js 35行目
+ "(src='" + img.src + "', sizingMethod='image');"></span>"
IMGタグをすべてSPANタグに置き換えているのでSPANタグ全体に適用されるスタイルがある場合その影響を受ける。注意しておかないとツボにハマりそうだ。
