2012-08-08 24 views
7

は、次のコードを検討:応答画像(最大幅)

HTML:

<div> 
    <img src="http://placehold.it/600x150" /> 
</div> 

CSS:

div { max-width: 200px } 
img { max-width: 100% }​ 

そのネイティブサイズに関係なく、イメージは決して200ピクセルより大きくなりません。ここまでは順調ですね。ここで

はフィドルです:親要素がある場合は、しかし、 http://jsfiddle.net/PeAAb/


そのdisplayセットtableへ:

div { max-width: 200px; display: table } 

画像は魔法のようにtableを拡大し、そのネイティブ幅に拡張。ここで

はフィドルです:http://jsfiddle.net/PeAAb/1/


同じことが、実際のテーブルで発生します:http://jsfiddle.net/PeAAb/2/


質問:はこの予想される動作ですか?もしそうなら、この問題を回避するために何ができるでしょうか?

max-widthの代わりに親のwidth(パーセンテージベースの幅さえも)を設定すると、イメージが正しくボックスに収められますが、解決策ではありません。親が流動的であることが必要です(私はthe sidebar HTML appear after the main content in the source, but with the sidebar being fixed widthを持つことができるように、これをサイトの主要な構造に使用しています)。

また、setting table-layout to fixedno effectと思われます。

+0

私はSharePoint 2010で反応するものを作成しようとしています。これは、物事の周りにネストされたテーブルをラップするという厄介な習慣を持っています。あなたがこれまでの解決策を知っているなら(IE8まで)、私はそれについて知りたいです。 IE8/9の@ pKsのソリューション(display:block;)はここでは失敗します:( –

答えて

7

ここでの問題は、表(または表のように動作するdiv)がブロック要素ではなく、max-widthがブロック要素にのみ適用されるという点です。私の唯一の提案は、display:blockを使ってdiv内のtable要素をラップすることです。セット。 http://jsfiddle.net/PeAAb/4/

+0

あなたの*正しい*回答をありがとうございますが、私の場合、これは私を助けません。[私のデモ](http:// jsfiddle.net/659JN/)それはWebkitでは正しく動作しますが、それ以外はどこにもありません。それの中に別の要素をラップすることは助けにはならない(http://jsfiddle.net/6BWCw/)。 –

+0

私はこの回答を控えめに受け入れています。しかし、それは問題を解決しません。 –

+0

ジョセフ、受け入れてくれてありがとう。私はあなたの問題を解決したいと思っています。私は通常、「できない」という回答を掲示するのは好きではありませんが、私自身の経験と組み合わせたいくつかの研究の後では、あなたの問題の良い解決策です。実際には、これはかなり私を困惑させました。私はこれ以上解決できる人から聞いてくれることを楽しみにしています。 –

-1

私はこれはかなり遅れている知っているが、非常にシンプルかつ超簡単であることが判明した答えは、テーブルレイアウトが見つかりました:固定

は、ここであなたが興味を持っている場合にはフィドルです。

はこちらをご覧ください:http://blog.room34.com/archives/5042

とにかく、これは私があったように、この難問に答えをお探しの方のためです。

+0

私は簡単に説明するか、言い換えれば、特にOPが彼のために働いていなかったので、 'table-layout:fixed 'が答えである理由を記事で言います。 – Dan

+0

これは、指定された幅でのみ動作します。問題は、 'max-width'セットでこれを達成する方法でした。親は流体幅でなければならない。 –