-

透過PNGがjQueryアニメーションでopacityを使うとIE8だけ黒く塗りつぶされて表示されてしまいます。
対策として、pngFixを施したりDD_belatedPNGやjQuery.belatedPNGをやってみたのですがだめでした。
(IE6と7は対象外なので考えておりません。)
黒く塗りつぶされてしまうpng画像は、主にテキストをpng画像として保存したものです。
今後のIE対策としてもクリアしておきたいところなので、ご教授して頂ければ幸いです。よろしくお願い致します。

みんなの回答 10 件

名無しさんの回答

そもそもopacityってIEブラウザ対応していないんじゃない?
クロスブラウザ用のjs入れたら解決しないかな。

名無し

IE専用のopacityプロパティで対応することができるようですよ。

名無しさんの回答

IE8は、opacityでなく、alphaImageLoaderで対応。

もしくは、下記プラグイン。
ただし、少しバグがあるので対策しながら使用を。

jQuery.belatedPNGをアップデートしました。 | プログラマ気分

http://wakuworks.jugem.jp/?eid=156
名無し

あ、使ってるのか。失礼。

名無しさんの回答

this.style.removeAttribute("filter");
あたりで解決しないかな?

名無しさんの回答

VMLは?

名無し

ありがとうございます。VMLは記述の仕方がわからないのでできませんでした。

名無しさんの回答

似たような人がいました。

ie8でもやっぱりpngfix - markup おぼえがき

http://ongak.com/markup/2011/11/ie8pngfix.html
名無し

ありがとうございます。この方法試しました。一部の画像はこれで黒つぶれしなくなったのですが、もう一部の画像は改善されませんでした。

名無し

治るものと治らないものがあるんですね。それは画像形式の差ですか?それとも他の要因?人事ではないので、詳しく聞きたい。

名無し

フェードインとフェードアウトだけでしたら、これで解決できました。画像形式の差はないと思います。詳しくは、このトピの別の投稿に書きますね。

名無しさんの回答

background-color つけると治るんだけど、わざわざ透過PNG使ってる時にbackground-colorなんて付けられない事のほうが多いんだよね・・・。

名無し

background-color:transparent;は、jQueryアニメーションでopacity:0とかにしない場合は、有効かもしれないですね。

名無し

aaa.pngを透過させたい場合、<div id="item"><img src="aaa.png"></div>というhtmlに対して$(function() { $("#item").fixPng();});というスクリプトを書くということですよね?

名無し

すいません、書き込むところを間違えました。失礼しました。

名無しさんの回答

もしかしてbelatedPNGの対象が画像自体じゃなくて親要素にしてる?それじゃ効かないよ

名無し

aaa.pngを透過させたい場合、<div id="item"><img src="aaa.png"></div>というhtmlに対して$(function() { $("#item").fixPng();});というスクリプトを書くということですよね?

名無し

$("#item img").fixPng(); じゃないとダメです

名無し

ありがとうございます。試してみたところ、pngの透過部分がうっすら黒くなってしまいました。場合によっては、使わない方がいいときもあるようですね。

名無しさんの回答

これどうやっても無理だと思う。何回もチャレンジしたけど全然だめ。このサイトは技術的に有名な人が作ったみたいだけどIEで見ると透過PNGはフェードしないで切り替わってる。たぶんIEで透過フェードはあきらめたんだろう。

アマナグループ|amanagroup INDEX

http://amana.jp/
名無し

IEのみ別の動作にした方が手っ取り早そうですからね。

名無しさんの回答

VMLとか頑張ってやってみたけど、かなり汚いので結局使い物にならなかった記憶がある。結局IE8以下は透過PNGはフェードさせないで切り替えるのがベスト、という結論に今のところしている。IE8以下でフェードしないと文句言われたことがない。むしろ頑張って透過フェードを対応して重くなるほうが問題。

名無し

css3pie使ってみたんですけど、動作が重くなったので止めましたね。

名無しさんの回答

皆様、アドバイスありがとうございます。今回、jQueryのアニメーションで透過PNGをopacityプロパティを使うと黒く塗りつぶされてしまう件に関しまして下記の方法で解決致しました。
基本的に、フェードインとフェードアウトはpngFIXで解決できました。ですが、アニメーションで2回処理をする場合、これだけだと黒く塗りつぶされてしまいます。なので、2回目の処理をif($.browser.msie){IEの場合の処理}else{IE以外の場合の処理}で解決することにしました。具体的には、2回目のアニメーションでopacity:0にした後、opacity:1にしないで、opactiy:0のままにしておくというものです。IE以外の場合、消えたままなのですが、IEの場合は、表示されるようになりました。しかも、黒つぶれしない状態で。上記の方法で、今回のIE対策をすることができたので報告致します。

名無し

報告ありがとうございます。参考にさせていただきます。

最終更新日:2012-10-04 (30,292 views)

関連するトピックス

ページ上部に戻る