<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>belatedPNG &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/belatedpng/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 30 Sep 2013 01:46:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>belatedPNGと幸せにくらす為の小さなコツと小技</title>
		<link>https://blog.mach3.jp/2013/09/30/happy-life-with-belatedpng.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 30 Sep 2013 01:46:54 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[belatedPNG]]></category>
		<category><![CDATA[InternetExplorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PNG]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3271</guid>

					<description><![CDATA[様々な理由から多くの方がAlphaImageLoaderよりもbelatedPNGを活用されているようですが、 単純明快な前者と違って、後者は便利な反面ブラックボックスな部分も多いです。 今回のお話は、そんなbelate [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>様々な理由から多くの方がAlphaImageLoaderよりもbelatedPNGを活用されているようですが、 単純明快な前者と違って、後者は便利な反面ブラックボックスな部分も多いです。 今回のお話は、そんなbelatedPNGを使用する上で注意すべき点と、困ったときのおまじない。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-M_u13yQ_nV0/UkhVMLhz3MI/AAAAAAAACNA/BGLeski5_rI/s400/20130930-0.png" alt="belatedPNGと幸せにくらす為の小さなコツと小技"/></figure>



<p></p>



<span id="more-3271"></span>



<dl>
<dt>前提</dt>
<dd>ここで言う「belatedPNG」は<a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/">本家</a>ではなく、<br />
本家をフォークしている「<a href="https://github.com/wakuworks/jquery.belatedPNG/">jquery-belatedpng.js</a>」を指しています</dd>
</dl>



<h2 class="wp-block-heading">何をしてくれているのか、知っておく</h2>



<p>まず、belatedPNG が行ってくれる処理をおさらいしてみましょう。 簡単に書いていますが、結構面倒な事を一手に引き受けてくれている事がわかります。</p>



<ol class="wp-block-list">
<li>fixPng() をあてた要素の複製をVMLで生成してそれを表示する</li>



<li>元要素のスタイルの変更を検知してVML要素にも変更を加える</li>



<li>VML要素へのマウスイベントを元要素に伝えてくれる</li>
</ol>



<p>別にbelatedPNGに限った話ではないですが、どのような処理をしているのか知っておく事で何か不具合が発生した時に対処しやすくなりますね。 実際にどのようなVMLが生成されてどう配置されているのかは、IEの開発者ツール等で見る事ができますので困ったときは覗いてみましょう。</p>



<h2 class="wp-block-heading">fixPng()のセレクタは適切な物を</h2>



<p>たまに拝見するのが、次のようにゆるいセレクタで fixPng() を行っているコードです。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"div, img"</span>).fixPng();
</code></span></pre>


<p>これは大変極端な例ですが、全てのdiv要素とimg要素に対してbelatedPNGの処理を行っています。 多くの場合このコードは正常に動作しますが、正直好ましくないと思うのです。</p>



<h3 class="wp-block-heading">プレーンでない物が増えていく</h3>



<p>余計なものまで処理させてしまうコストの面もそうなのですが、 それ以上に重要なのは、予想外の物までVML化されてしまう点です。 そこで困るのはフロント開発のエンジニアさん達です。 プレーンな要素を想定して組み上げたアプリが何故か動かずに頭を抱えたり、 問題解決に辿り着くまでに大きな回り道をさせられてしまうかもしれません。</p>



<p>belatedPNG の内部で処理不要な要素（PNG画像が関わっていない物）はスルーしてくれているので、 そこまで大きな問題は発生しないかもしれませんが、「よくわからないもの」は出来るだけ少なくしておきたいですね。</p>



<h3 class="wp-block-heading">適切なセレクタで実行しよう</h3>



<p>そんなわけで、渡すセレクタは適切に絞った物を設定する事をお勧めしたいです。 可能なら、処理するクラス名を定義してしまうのが安全かもしれません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">".fixpng"</span>).fixPng();
</code></span></pre>


<h2 class="wp-block-heading">処理する環境を判別する</h2>



<p>belatedPNGが必要な環境はIE9未満（透明度を使用する場合）なので、その環境下だけで処理を行うようにします。 例えば条件分岐コメントを利用する場合はこの様な感じで。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-comment">&lt;!--&#91;if lt IE 9]&gt;
&lt;script src="jquery.belatedpng.js"&gt;&lt;/script&gt;
&lt;script&gt;
    $(".fixpng").fixPng();
&lt;/script&gt;
&lt;!&#91;endif]--&gt;</span>
</code></span></pre>


<p>ミニファイなどの都合でJS内で判別したい場合は、「CSSでopacityをサポートしていない」「IEである」という条件で如何でしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">if</span>(! $.support.opacity &amp;&amp; !! ActiveXObject){
    $(<span class="hljs-string">".fixpng"</span>).fixPng();
}
</code></span></pre>


<p>「VMLが使用可能か」という条件でも良いのですが、下記リンクで紹介されている様に、少し長くなってしまいます。</p>



<p>cf) <a href="http://stackoverflow.com/questions/654112/how-do-you-detect-support-for-vml-or-svg-in-a-browser">javascript &#8211; How do you detect support for VML or SVG in a browser &#8211; Stack Overflow</a></p>



<h2 class="wp-block-heading">コンテナ以下の要素の透明度をまるごと変更する</h2>



<p>belatedPNG（VML）の特徴の一つとして、親要素のopacityを継承しない問題がありますが、 あるコンテナ以下の要素の透明度をまるごと変えたい時はどうしたらよいでしょうか。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"holder"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"foo.png"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">""</span> /&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"bar.png"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">""</span> /&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"baz.png"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">""</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    $(<span class="hljs-string">".holder img"</span>).fixPng();
    $(<span class="hljs-string">".holder"</span>).fadeOut(); <span class="hljs-comment">// 画像の透明度が変わらない！</span>
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>上のコードで &#8220;.holder&#8221; まるごとフェードアウトしたい場合、例えば次のようにしてみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">".holder, .holder &#91;vmlInitiated]"</span>).fadeOut();
</code></span></pre>


<p>belatedPng はVMLに書き出す際に元要素に「vmlInitiated」という属性をつけるので、それを利用してみた例です。 あるいは、前述のようにクラスが決まっているのであればそれを指定してしまった方が効率的ですね。</p>



<h3 class="wp-block-heading">関数化してみる</h3>



<p>毎度面倒な場合は関数化してみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// $.fn.fadeOut() のラッパー</span>
$.fn.belatedFadeOut = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">this</span>.fadeOut.apply(<span class="hljs-keyword">this</span>.find(<span class="hljs-string">"&#91;vmlInitiated]"</span>), <span class="hljs-built_in">arguments</span>);
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.fadeOut.apply(<span class="hljs-keyword">this</span>, <span class="hljs-built_in">arguments</span>);
};
<span class="hljs-comment">// $.fn.fadeIn() のラッパー</span>
$.fn.belatedFadeIn = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">this</span>.fadeIn.apply(<span class="hljs-keyword">this</span>.find(<span class="hljs-string">"&#91;vmlInitiated]"</span>), <span class="hljs-built_in">arguments</span>);
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.fadeIn.apply(<span class="hljs-keyword">this</span>, <span class="hljs-built_in">arguments</span>);
};
<span class="hljs-comment">// $.fn.animate() のラッパー</span>
$.fn.belatedAnimate = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">if</span>(<span class="hljs-built_in">arguments</span>&#91;<span class="hljs-number">0</span>].opacity !== <span class="hljs-literal">undefined</span>){
        args = &#91;].slice.call(<span class="hljs-built_in">arguments</span>);
        args&#91;<span class="hljs-number">0</span>] = {<span class="hljs-attr">opacity</span>: <span class="hljs-built_in">arguments</span>&#91;<span class="hljs-number">0</span>].opacity};
        <span class="hljs-keyword">this</span>.animate.apply(<span class="hljs-keyword">this</span>.find(<span class="hljs-string">"&#91;vmlInitiated]"</span>), args);
    }
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.animate.apply(<span class="hljs-keyword">this</span>, <span class="hljs-built_in">arguments</span>);
};

<span class="hljs-comment">// fadeOut等のかわりに使います</span>
$(<span class="hljs-string">".holder"</span>).belatedFadeOut(<span class="hljs-number">1000</span>);
</code></span></pre>


<h2 class="wp-block-heading">クラスによるbackground-imageの変更を適用させる</h2>



<p>例えば次のように、クラスによって要素の背景画像が変わるCSSを組んでいるとしましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="css">
    <span class="hljs-selector-class">.box</span> { <span class="hljs-attribute">background-image</span>: <span class="hljs-built_in">url</span>(red.png); }
    <span class="hljs-selector-class">.box</span><span class="hljs-selector-class">.blue</span> { <span class="hljs-attribute">background-image</span>: <span class="hljs-built_in">url</span>(blue.png); }
</span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">if</span>(! $.support.opacity &amp;&amp; !! ActiveXObject){
        $(<span class="hljs-string">".box"</span>).fixPng();
    }
    $(<span class="hljs-string">".box"</span>).addClass(<span class="hljs-string">"blue"</span>); <span class="hljs-comment">// 通常は背景が blue.png に変わるが…</span>
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>通常、&#8221;.box&#8221; に &#8220;blue&#8221; クラスをあてれば背景が &#8220;blue.png&#8221; に切り替わるはずなのですが、 belatedPNGが効いた要素では残念な事に切り替わりません。</p>



<h3 class="wp-block-heading">なぜなのか</h3>



<p>belatedPNGでは、VML要素と元要素のスタイルの同期をとるために <em>&#8220;propertychange&#8221;</em> というイベントを利用しています。 これは、要素の属性に変更が加えられた際に発火するイベントです。</p>



<ul class="wp-block-list">
<li><a href="http://msdn.microsoft.com/en-us/library/ie/ms536956(v=vs.85).aspx">propertychange | onpropertychange event (Internet Explorer)</a></li>
</ul>



<p>元要素のスタイルに変更が加えられた時にこのイベントが発火して、 VMLの表示を元要素のスタイルにあわせて更新するという仕組みです。 ですが、背景の更新は背景に関する変更がなされた場合にしか行われません。 つまり、クラス名の変更を行っても何も起きないのです。</p>



<h3 class="wp-block-heading">独自属性で半ば強引に解決する</h3>



<p>要するに、元要素の「背景に関する属性」を変更すれば更新されるわけです。 コードを読むと「属性名に&#8221;background&#8221;という文字を含んでいるかどうか」で判別しているので、 こんな感じで更新されるようになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">".box"</span>).prop(<span class="hljs-string">"update-background"</span>, <span class="hljs-literal">true</span>);
</code></span></pre>


<p>なお、属性の値は「変更」される必要はなく、値を設定するだけで発火しますので、trueを渡し続けても大丈夫です。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>belatedPNG は、本来出来ない事を出来るようにしてしまう魔法のようなスクリプトですが、 魔法には動く為の仕組みがあり、動かす為のルールもあります。 正しい用法を守って、計画的に利用していきたいですね。</p>



<p>テーマの都合上あまり良くない点ばかり書き連ねる事になってしまいましたが、 個人的に似たライブラリを再発明してみようとした事があり、その面倒さに閉口した記憶があります。 完成に到るまで本家ならびにjQueryプラグインを書き上げてくれた方にこの場をかりてお礼を申し上げます。</p>



<p>いつの日か、ライブラリの命名通り、透過PNGの対応自体が「時代遅れ」になる事を待ち望んで。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>雑記: PNGと透過とレガシーブラウザ &#8211; 2013年秋</title>
		<link>https://blog.mach3.jp/2013/09/30/alpha-png-and-legacy-browsers.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 30 Sep 2013 01:45:11 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[belatedPNG]]></category>
		<category><![CDATA[DD_belatedPNG]]></category>
		<category><![CDATA[InternetExplorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3256</guid>

					<description><![CDATA[最近になってIE6のサポートは減ってきましたが、IE8の息もまた長そうですね。 透過PNGについては以前も記事をしたためた事がありますが、 当時からまた事情も変わってきてると思いますので、ここに昨今の対応に関する雑記など [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近になってIE6のサポートは減ってきましたが、IE8の息もまた長そうですね。 透過PNGについては以前も記事をしたためた事がありますが、 当時からまた事情も変わってきてると思いますので、ここに昨今の対応に関する雑記などを記しておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-M_u13yQ_nV0/UkhVMLhz3MI/AAAAAAAACNA/BGLeski5_rI/s400/20130930-0.png" alt="雑記: PNGと透過とレガシーブラウザ - 2013年秋"/></figure>



<p></p>



<span id="more-3256"></span>



<dl>
<dt>前提</dt>
<dd>ここで言う「belatedPNG」は<a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/">本家</a>ではなく、<br />
本家をフォークしている「<a href="https://github.com/wakuworks/jquery.belatedPNG/">jquery-belatedpng.js</a>」を指しています</dd>
</dl>



<h2 class="wp-block-heading">「おおきくくずれなければいい」IE6対応</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>「<em>IE6ではおおきくくずれなければいい</em>」</p>
</blockquote>



<p>最近よく聞くようになってきたフレーズですが、つまり「完全にあわせなくてもいいけど一応見えるようにしてね」という事で、 見た目をある程度損なっても許容されるわけです。（と好意的に解釈しましょう。）</p>



<p>ところで、今IE6を使うような人達は、おそらく諸事情があって「致し方なく」使っていて、 きっとそういった方々はWebページで多少の劣化が見られても「致し方なく」思うのではないでしょうか。</p>



<p>そんな前提の元、レガシー環境への対応としては欠かせない透過PNGの話を少々。</p>



<h2 class="wp-block-heading">IE6対応に8bit PNGを採用する</h2>



<p>IE6での透過PNG対応には、<em>8bit PNG</em>という強い味方がいます。 多少見た目を損なってしまうものの、きちんと透過出来るようになります。 実際にどのように見た目が変わるかというと…</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-zvyqwxigXy8/UkhVLw63tlI/AAAAAAAACNA/0lBuy0bNI78/s500/20130930-1-1.png" alt="モダンブラウザ"/></figure>



<p></p>



<p>上が普通のブラウザで表示した8bitの透過PNGです。 わかりやすく背景にタイル状の画像を敷いています。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-lExGnwt59Gc/UkhVLxPm61I/AAAAAAAACNA/TgH7dhKW7j0/s500/20130930-1-2.png" alt="IE6"/></figure>



<p></p>



<p>上が同じ画像をIE6で表示させたものです。 半透過の部分を完全に透過させて表示してしまう為、薄く敷いたドロップシャドウが消えたり、 エッジがギザギザになったりしています。細めの文字などで使用するのは結構厳しそうですが、 画像を選べばきちんと内容は伝わりそうです。</p>



<h2 class="wp-block-heading">8bit PNG制作に便利なpngquant</h2>



<h3 class="wp-block-heading">pngquant — lossy PNG compressor</h3>



<ul class="wp-block-list">
<li><a href="http://pngquant.org/">pngquant — lossy PNG compressor</a></li>
</ul>



<p>pngquantはコマンドラインでPNGを8bitに変換し、最適化する為のツールです。 IE6対策としても有用ですが、PNGを省サイズ化する上でも非常に便利なアプリケーションです。 GUIツールも配布されているので、「黒い画面」が苦手な方は試してみても良いかもしれません。</p>



<p>GUIツールでは、最近は <a href="http://pngmini.com">ImageAlpha</a> がよく知られているようです。 最適化時にpngquant以外のツールも選択できる優れ物です。</p>



<h3 class="wp-block-heading">コマンドラインで pngquant を使ってみる</h3>



<p>ここではコマンドラインでの使い方に軽く触れましょう。</p>


<pre class="wp-block-code"><span><code class="hljs">$ pngquant img/foo.png --iebug
</code></span></pre>


<p>上の処理は、最適化された <em>&#8220;img/foo-ie-fs8.png&#8221;</em> という画像を新たに出力します。 <em>&#8220;&#8211;iebug&#8221;</em> というオプションは、PNGの「ほとんど非透過」の部分を非透過にするので、エッジの劣化を少し抑える事が出来そうです。</p>



<p>接尾辞を付けずに同名で上書きを行いたい場合は、<em>&#8220;&#8211;ext&#8221;</em> オプションと <em>&#8220;&#8211;force&#8221;</em> オプションを使います。 大事な事なのでもう一度いいます。同名ファイルとして上書きします。用法を守って正しくお使いください。</p>


<pre class="wp-block-code"><span><code class="hljs">$ pngquant img/foo.png --iebug --ext .png --force
</code></span></pre>


<p>&#8220;img/&#8221; ディレクトリ内のpng画像をすべて処理したい場合は、ワイルドカードや find コマンドを併用したりします。</p>



<pre class="wp-block-preformatted">$ # img内のPNG画像を全て処理
$ pngquant img/*.png --iebug --ext .png --force
$ # img内のサブディレクトリも再帰的に全て処理
$ find img/ -name "*.png" | xargs pngquant --iebug --ext .png --force
</pre>



<p>GUIではなくCLIを推したのは、クロスプラットフォームである点と、 みんなだいすきな Grunt と連携が取りやすいからです。</p>



<h3 class="wp-block-heading">フィルタを通した8bit PNG</h3>



<p>ちなみに、IE6で8bit PNGをAlphaImageLoaderを通して表示させても見た目は変わりませんが、 VMLのフィルタを通して表示させるとモダンブラウザと同様に綺麗に表示されます。 ある箇所だけ綺麗に見せたかったりする場合は部分的にbelatedPNG等を使用しても良いかもしれません。</p>



<h2 class="wp-block-heading">opacityを変更した際の黒フチの問題</h2>



<p>IE7-8で起こるこの現象については<a href="/2011/02/png-and-opacity-on-explorer.html">以前にも触れましたが</a>、 結局のところAlphaImageLoaderやVMLに頼らざるを得ません。 両者にはそれぞれ特徴があるので、状況によって上手く使い分けましょう。</p>



<p>特に、肝となる透明度の調整で、二者はまったく違う挙動をするので注意が必要です。</p>



<h3 class="wp-block-heading">AlphaImageLoaderへの透明度設定は親要素で</h3>



<p>AlphaImageLoaderをあてた要素に直接 opacity を設定しても動きはするのですが、 ズームを変更すると表示に不具合が生じます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-zPK5PX3LJAs/UkhVMnxcwiI/AAAAAAAACNA/Fxj-EfOV_7Q/s500/20130930-1-3.png" alt="ズームによるAlphaImageLoaderの不具合"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">.demo {
    ...
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
        sizingMethod=scale, src=<span class="hljs-string">'sample.png'</span>) alpha(opacity=<span class="hljs-number">50</span>);
    background-color: transparent;
}
</code></span></pre>


<p>上のようなスタイルをあててIE8以下でブラウザのズームを弄ると再現できると思います。 条件は恐らくこんな感じでしょうか。</p>



<ul class="wp-block-list">
<li>AlphaImageLoaderとalphaのフィルターを同じ要素にかけている</li>



<li>その要素のbackground-colorが指定されていないか、transparentだ</li>



<li>ブラウザのズームが100%ではない</li>
</ul>



<p>ズームをいじった状態でフェードイン・アウトなどをかけるとやられてしまいますので、 透明度を弄る場合は親要素に対して行った方が良いでしょう。</p>



<h3 class="wp-block-heading">belatedPNG（VML）への透明度設定はその要素で</h3>



<p>AlphaImageLoaderと違って、どうやらVMLは親要素の透明度を継承しないため、 fixPng() をあてた要素そのものに透明度を設定してあげなければいけません。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"holder"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"foo.png"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">""</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
$(<span class="hljs-string">".holder img"</span>).fixPNG();

$(<span class="hljs-string">".holder"</span>).css(<span class="hljs-string">"opacity"</span>, <span class="hljs-number">0.5</span>); <span class="hljs-comment">// 画像の透明度は反映されない</span>
$(<span class="hljs-string">".holder img"</span>).css(<span class="hljs-string">"opacity"</span>, <span class="hljs-number">0.5</span>); <span class="hljs-comment">// 反映される</span>
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>ブロックまるごとフェードインなどしたい場合は一工夫必要ですね。 楽に一工夫する方法は、<a href="/2013/09/happy-life-with-belatedpng.html">また別のお話</a>。</p>



<h2 class="wp-block-heading">一旦まとめ</h2>



<p>belatedPNGについてもう少し掘り下げる予定でしたが、 長くなりましたのでエントリーを分けることに致しました。</p>



<p>つづきはこちらで。 » <a href="/2013/09/happy-life-with-belatedpng.html">belatedPNGと幸せにくらす為の小さなコツと小技</a></p>



<h2 class="wp-block-heading">追記</h2>



<dl>
<dt>2013/09/30 22:57</dt>
<dd>「-ms-filterの指定は不要では」と助言を頂いたので、該当箇所を削除しています。<br />
cf) <a href="http://sayurin.blogspot.jp/2012/12/ms-filter.html">佐祐理ブログ: -ms-filterは無意味</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
