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のバグ修正について」で