次のコードは、ChromeまたはIE(画像の幅は200px)です。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();
});
w3.org仕様 は、max-widthがインライン要素に適用されないため、ブラウザー間で一貫性のない動作が発生することを示しています。意図した結果はわかりませんが、div img { display:block }
その後、img
およびp
タグを標準のインラインではなくフロートに揃えます。
必要なことは、display: table-cell
andを持つ別のdiv内にラッパーdiv(display: table
を持つdiv)を配置することですtable-layout: fixed
。これにより、FirefoxとOperaはmax-width
ルールを尊重します。
jsFiddleのこの例 を参照してください。
幅の設定:100%で問題は解決しますが、別の問題が発生します。 In WordPress幅を設定したくない:100%の画像。画像が300pxの幅で中サイズの場合、どうすればいいですか?中サイズで幅を50%に設定しますが、画像が小さい場合はどうなりますか?それは拡大されますWebkitブラウザーでは、width:auto; max-width:100%;しかしFirefox以降、Opera and IEそれを無視...それは大きな問題です。
width: 100%
の代わりにmax-width: 100%
を使用して動作させました。
これは非常に紛らわしいトピックになりました...
Max-widthは、テーブルセル要素でもインライン要素でも機能しません。ディスプレイがブロックするように設定されている場合、画像に対して機能しますが、100%とは何ですか?テーブルレイアウトでは、セルのコンテンツが列幅を押して、可能な限りすべてのコンテンツを収容します。したがって、テーブルセル内のmax-width:100%は、ほとんどの場合、コンテンツの自然な幅になります。
そのため、画像のmax-widthプロパティをピクセル単位で設定すると機能します。
<style>
div { display: table-cell; padding: 15px; width: 200px; }
div img { max-width: 200px; display:block;}
</style>
table-layout: fixed
は、画像が表の最初の行にない場合、最初の行のコンテンツが列の幅を決定するため、Alexが提案するように機能する場合があります。
特定のケースについて、オンラインで偶然見つけた別の回避策があります:display: table;
+ display: table-cell;
レスポンシブサイトの2つ(またはそれ以上)の列レイアウトを模倣するには、代わりにこれを試してください。たとえば、サイドバーに350pxの幅を、サイトのメインコンテンツ部分にwidth: calc(100% - 360px);
のような幅を与えます。それは私のためのトリックをしました、そして、ボーナスは固定幅のサイドバーが必要だったことです。私はそれがemでもうまくいくと思います。
もちろん、これはjsに依存しますが、最近では問題ありません。