2013-01-03 13 views
60

このスレッドが見つかりました - How do you stretch an image to fill a <div> while keeping the image's aspect-ratio? - それは私が欲しいものではありません。divに比例して画像を埋め込むにはどうすればよいですか?

私はあるサイズの画像とその中の画像を持っています。私はにいつも画像が風景か肖像画であるかどうかにかかわらず画像とdivを記入したいと思う。画像がカットオフされているかどうかは関係ありません(div自体はオーバーフローが隠されています)。

画像が縦長の場合はを100%とし、height:autoを比例するようにします。画像が横長の場合は、height100%とし、width to beをautoとします。音は複雑ですよね?

<div class="container"> 
    <img src="some-image.jpg" alt="Could be portrait or landscape"/> 
</div> 

私はそれを行う方法がわからないので、私は単に私が意味するものの簡単なイメージを作成しました。私はそれを正しく記述することさえできません。

enter image description here

だから、私は私がこれを求めて最初のものではないと思いますよ。しかし、私は実際にこれに対する解決策を見つけることができませんでした。多分、これを行うための新しいCSS3の方法があります - 私はフレックスボックスを考えています。何か案が?多分私はそれが期待されるよりも簡単ですか?

+0

は、なぜあなたはまだJavaScriptで簡単にそれを行うことができたときにCSS3を使用したいのですか? – GautamJeyaraman

+0

未検査ですが、最小高さと最小幅を100%に設定できますか?それは少なくともボックスを埋めると比例でそれを保つべきである – chrisbulmer

答えて

-1

いいえ、これにはCSS3のみの解決策はありません。あなたがリンクした質問のtop answerは、しかし、二番目に優れたものです。

+1

しかし、私はどのように私が上に描いたものを正確に達成することができます。あなたが指している "トップアンサー"は、私が欲しいものではありません。もう少し正確な答えを私に与えてもらえますか? – matt

3

background-size: cover(IE9 +)をbackground-imageと組み合わせて使用​​することを検討してください。 IE8-の場合、polyfillがあります。

+0

これはbackground-urlを必要としませんか?もっと詳しく説明できますか?質問に記載されているように、これはで動作しますか? – harsimranb

+0

@harsimranbもちろん、 'background-size'は' background-image'だけでも意味があります(私はそれに応じて私の答えを更新しました)。 'IMG'要素には適用されません。 –

+0

これは最高の答えです。シンプルで、ブラウザのサポートも良好です。他のすべてのソリューションは非常に複雑で、IE(9)では動作しません。 – JoostS

73

あなたが望むものを正しく理解していれば、縦横比を維持するために画像の幅と高さの属性を残しておき、フレックスボックスを使ってセンタリングを行うことができます。

.fill { 
 
    display: flex; 
 
    justify-content: center; 
 
    align-items: center; 
 
    overflow: hidden 
 
} 
 
.fill img { 
 
    flex-shrink: 0; 
 
    min-width: 100%; 
 
    min-height: 100% 
 
}
<div class="fill"> 
 
    <img src="https://lorempizza.com/320/240" alt="" /> 
 
</div>

JSFiddle here

私はIE9、クロム31、とOpera 18で正常にこれをテストした。しかし、他のブラウザではテストされませんでした。いつものように、特定のサポート要件を考慮する必要があります。

+0

IE9では、この方法では画像が縦または横にセンタリングされず、上と左に揃えられます。 http://i59.tinypic.com/ouo77s.png –

+1

これはiPadに問題があります。Safariは画像をその高さの100%に伸ばしますが、min-widthプロパティは保持しません。 – Sean

+1

非常に簡素化されたjsfiddle:http://jsfiddle.net/Rx37G/53/ –

0

ここに私の実例があります。私は背景サイズのdivコンテナの背景として画像を設定しているトリックを使用しています:カバーと背景位置:center center

幅:100%と不透明度:0の画像を配置しました。 。子のクリックイベントを呼び出すことに特に関心があるので、私は自分のイメージしか表示していないことに注意してください。

注意してください私は完全に無関係です角度を使用しています。

<div class="foto-item" ng-style="{'background-image':'url('+foto.path+')'}"> 
    <img class="materialboxed" ng-class="foto.picid" ng-src="{{foto.path}}" style="opacity: 0;filter: alpha(opacity=0);" width="100%" onclick="$('.materialboxed')/> 
</div> 
<style> 
.foto-item { 
height: 75% !important; 
width: 100%; 
position: absolute; 
top: 0; 
left: 0; 
overflow:hidden; 
background-size: cover; 
background-position: center center; 
} 
</style> 

結果は、あなたがすべての場合に最適と定義する1つ

6

古い質問ですが、今の方法があるよう更新に値します。

正しいCSSベースの回答は、background-size: coverのように動作するobject-fit: coverを使用することです。位置指定はobject-position属性によって処理され、デフォルトではセンタリングが行われます。

IE/Edgeブラウザではサポートされていません。< 4.4.4。また、object-positionはSafari、iOS、OSXではサポートされていません。 Polyfillsは存在しますが、object-fit-imagesが最良のサポートを提供するようです。

プロパティの詳細については、CSS Tricks article on object-fitの説明とデモを参照してください。

3

これはそれを行う必要があります。

img {  
min-width: 100%; 
min-height: 100%; 
width: auto; 
height: auto; 
} 
+0

私にとってはうまく動作しますが、私はちょうどポジションを追加する必要があります:absoluteとtop:0、そしていくつかのz-インデックスも同様です。 – byroncorrales

0

はこれを試してみてください:

img { 
    position: relative; 
    left: 50%; 
    min-width: 100%; 
    min-height: 100%; 
    transform: translateX(-50%); 
} 

希望、これはそれが少し遅れだが、私はちょうど同じ問題を抱えていたし、最終的にそれを解決し

19

を支援します別のstackoverflowポスト(https://stackoverflow.com/a/29103071)の助け。

.img { 
    object-fit: cover; 
    width: 50px; 
    height: 100px; 
} 

これはまだ誰かに役立ちます。

Psが:またMAX-高最大幅最小幅分間高 CSSプロパティと連携します。 100%または100vh/100vwのような長さの単位をコンテナまたはブラウザウィンドウ全体に塗りつぶすのに便利です。

+0

はこれをクロスブラウザソリューションですか? – candlejack

+0

オブジェクトフィット:カバー;よく働く! ブラウザ情報(IEでは動作しません): https://css-tricks.com/almanac/properties/o/object-fit/ IE向けフォールバックソリューション: https://medium.com/@primozcigler/css-object-fit-for-edge-and-other-browsers-afbc53bbb2c3 MSはそれを実装するために取り組んでいます:https://developer.microsoft.com/en-us/microsoft-edge/platform/status/objectfitandobjectposition / – Kaah

2

これを実現するにはdivを使用できます。 imgタグなし:)これが役立つことを願っています。

.img{ 
 
\t width:100px; 
 
\t height:100px; 
 
\t background-image:url('http://www.mandalas.com/mandala/htdocs/images/Lrg_image_Pages/Flowers/Large_Orange_Lotus_8.jpg'); 
 
\t background-repeat:no-repeat; 
 
\t background-position:center center; 
 
\t border:1px solid red; 
 
\t background-size:cover; 
 
} 
 
.img1{ 
 
\t width:100px; 
 
\t height:100px; 
 
\t background-image:url('https://images.freeimages.com/images/large-previews/9a4/large-pumpkin-1387927.jpg'); 
 
\t background-repeat:no-repeat; 
 
\t background-position:center center; 
 
\t border:1px solid red; 
 
\t background-size:cover; 
 
}
<div class="img"> \t 
 
</div> 
 
<div class="img1"> \t 
 
</div>