次のコードは、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();
});