こんばんは、martinです。FirefoxやWebKit系のSafari、グーグルのChromeなどは、CSS3の魅力的な機能を色々取り入れています。中でも、CSS3のtransform やドロップシャドウ系は、ブログで写真を見せる場合などに凝った演出が出来るので、仕様が正式に決まるのが待ち遠しいですね(そう言えば、ボックスのドロップシャドウ box-shadowですが、CSS3の勧告候補から消えた のかなぁ)。便利な仕様だとは思うのですが。
ちなみに、transformとは「変形」のことで、CSSのみで画像やらボックスやらを自在に回転させたり、ゆがませたりできる優れものです。で、例によってIE系はCSS3の対応は遅れています。とは言っても(これまたいつものように)transformに関しては、IEは実にIE5.5の時から似たようなものを実装していました ! なので、それらを駆使すれば、CSS3相当のtransformが実装できそうです。
transformが使えると何がうれしいって、例えば以下のようなポラロイド写真みたいなギャラリーがCSSのみで簡単に出来ます。実は下のショットはIE8でのものです。画像の回転に関して、FirefoxやWebKit系は、画像の中心を回転軸として回転させます(なので回転軸は移動しない)。これは直感的で分かりやすいです。これに対して、IEは回転軸が指定した回転角度によって刻々と移動します。なので、標準仕様に似せようと思うと、回転軸を動かさない様にするための補正計算が必要になります。この計算にちょっとてこずりましたが、何とか回転軸が動かないような補正をすることが出来ました。
で、とりあえずモノになりそうなものが出来たのでデモサイトを挙げておきます。画像へのマウスオーバーで拡大なんてのもCSSのみで出来るのですが、それもIEで動くようにしています。
→「CSS3 Transformを使ったギャラリー(IE互換) 」
FirefoxやSafariでは、完全にCSS3のみで実現していて、IEでは、IE特有のフィルター機能をJavaScirptを通して操作しています。ボックス要素のドロップシャドウについては、以前、まぁまぁ凝ったスクリプトを書きました が、新たに要素を追加しないといけないなど、あまり納得のいくものではありませんでした。今回ドロップシャドウに関しては、あまり凝ることはせずに、IEのフィルター機能を素直にそのまま使っています。progid:DXImageTransform.Microsoft.dropshadow(enable=true,OffX=3, OffY=7, Color='#11000000', Positive='true');
実は最近知ったのですが、フィルターのColorには通常のRGB形式だけでなく、透明度も指定できる#AARRGGBBの形式が使えるので、黒色の透明度を高くすればより影っぽくなります。CSS3レベルのぼやけた感じまでは出ませんが、まぁ、これで良しとしましょう。
使い方は、簡単で、形はHTCファイルですが、JavaScriptの外部ファイルとして動作するようにしてます。これは、以前のドロップシャドウのスクリプトと同じです。それをIEのみが解釈する条件コメントの中に書いています。<!--[if IE]> <script type="text/javascript" src="js/css3transform.htc"></script> <![endif]-->
これを書いておくだけで、スタイルシートに記された
-moz-transform: rotate(-2deg); -webkit-transform: rotate(-2deg); transform: rotate(-2deg);などを解釈して、IEのフィルター機能(Matrix Filter)で同等のことを表現します。デモページにあるように、IEでもCSS3のtransformはおよそ実現できるみたいです(まぁ、そもそもがIEのMatrix仕様を参考に実装したのでしょうけど)。
このスクリプトを添付しておきます。
1. BENIT — 2009/12/30@14:30:40
これを使えば、傾けた画像でも、写真の白枠内に文字を同様に傾けて入れることができるんですね。このプロパティで文字も一緒に変形出来るとは知りませんでした。考えてみれば当たり前ですけど、ちゃんと要素ごとなんですね。
ところで、現在ダウンロードファイルが調整中のようですが、1.9.0リリース間近なのでしょうか?(ロードマップにあったバージョンチェック機能の強化が非常に嬉しいです。今自分のサイトがバージョン何なのかよくわからなくなってます(笑))
私事で恐縮なのですが年末に時間が取れそうなので、もし良かったら現行最新(1.8.8?)のバージョンをアップしていただけないでしょうか。
年の瀬の折、お忙しいとは思いますがもしお時間が取れそうでしたら、ご一考いただければ幸いです。