CSSだけで画像のリサイズを処理する(IE6に対応させて、しかもハイクオリティ)完全版
よくあるCSSの使い方ですが、画像をサムネイル表示するときにJSとかPHPとか書くのがウザイのでCSSでやるパターンのやつのメモです。
要は、CSSで画像のWidthとHeightを制御してやるわけですが、
今回はデカイ画像をサムネイル表示させるので、max-widthとmax-heightで制御してやります。
こんな感じ
<style type="text/css"> .image-resize { max-width: 200px; max-height: 200px; } </style> <img src="images/test-image.jpg" class="image-resize" />
これで、200pxより大きければ、200pxにしてくれる。もちろん比率はそのまま。
しかし、IE6ではmax-widthとmax-heightに対応していないので、だいぶ前に書いたエントリーの「IE6でmin-Widthやmax-heightを適応させる」を使います。
こんな感じ
<style type="text/css"> .image-resize { max-width: 200px; max-height: 200px; } * html body .image-resize { width: expression(this.width >= this.height ? "200px" : "auto"); height: expression(this.width <= this.height ? "200px" : "auto"); } </style> <img src="images/test-image.jpg" class="image-resize" />
これで、IE6でも自動縮小表示してくれる。
あとはハイクオリティ縮小ですが、
IEとかだと縮小表示させたときに、画像が汚くなることが多々あります。
それを解消するにはCSSに以下のスタイルを追加します。
img { -ms-interpolation-mode: bicubic; }
これで、CSSだけで画像のリサイズを処理する(IE6に対応させて、しかもハイクオリティ)の完成。
一応、サンプルページ。
違う話だけど、早いとこHTML5とCSS3の仕様を読みたいなぁ。英語であったっけなぁ…。
※追記:これで上手くいくと思ってたけれど、IE6で見たときに縦長画像が上手くいかないらしい。わからん…orz。
※追記2:expressionの部分はjavascriptなのでココを上手く書けばいいと思うんだけどなぁ。がっちり書いたら結局それってjavascriptじゃんってなりかねないので、いい方法を探したい。
※追記3:上手くいきました。document.body.clientWidthをthis.widthにすると上手くいきました。上のコードも変更してあります。
※追記4:「this.width > this.height this.width < this.height」←これだと縦横同じ長さの場合に両方とも「auto」になってしまうので、「this.width >= this.height this.width <= this.height」に変更しました。
※追記5:IE8で少しおかしな動作をすることが分かりました。詳しくは「CSS画像リサイズを使用する際のIE8のバグ修正について」で