次のコードは、ChromeまたはIEで正しく表示されます(画像の幅は200ピクセルです)。FirefoxとOperaでは、max-widthスタイルは完全に無視されます。なぜこれが発生し、適切な回避策がありますか?また、ほとんどの標準に準拠しているのはどちらの方法ですか?
ノート
この特定の状況で考えられる回避策の1つは、に設定max-widthすること200pxです。ただし、これはかなり不自然な例です。可変幅コンテナの戦略を探しています。
<!doctype html>
<html>
<head>
<style>
div { display: table-cell; padding: 15px; width: 200px; }
div img { max-width: 100%; }
</style>
</head>
<body>
<div>
<img src="http://farm4.static.flickr.com/3352/4644534211_b9c887b979.jpg" />
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec facilisis
ante, facilisis posuere ligula feugiat ut. Fusce hendrerit vehicula congue.
at ligula dolor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
leo metus, aliquam eget convallis eget, molestie at massa.
</p>
</div>
</body>
</html>
[アップデート]
以下のmVChrで述べられているように、 w3.org仕様には、要素max-widthには適用されないと記載されています。inlineを使用してみましdiv img { max-width: 100%; display: block; }たが、問題が修正されていないようです。
[アップデート]
私はまだこの問題の解決策を持っていません。ただし、問題を解決するために次のjavascriptハックを使用しています。基本的に、上記の状況を再現し、ブラウザがmax-width内でサポートしているかどうかを確認しますdisplay: table-cell。(データURIを使用すると、余分なhttpリクエストを防ぐことができます。以下は3x3 bmpです。)
jQuery( function ( $ ) {
var img = $( "<img style='max-width:100%' src='" +
"data:image/bmp;base64,Qk1KAAAAAAAAAD4AAAAoAAAAAwAAA" +
"AMAAAABAAEAAAAAAAwAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP//" +
"/wAAAAAAwAAAAKAAAAA%3D" +
"'>" )
.appendTo(
$( "<div style='display:table-cell;width:1px;'></div>" )
.appendTo( "body" )
);
$.support.tableCellMaxWidth = img.width() == 1;
img.parent().remove();
});