元の回答:
CSS3 を選択する準備ができている場合は、css3 の translate プロパティを使用できます。大きいものに基づいてサイズを変更します。高さがコンテナーよりも大きく、幅がコンテナーよりも小さい場合、幅は 100% に引き伸ばされ、高さは両側からトリミングされます。幅が広い場合も同様です。
あなたの必要性、HTML:
<div class="img-wrap">
<img src="http://lorempixel.com/300/160/nature/" />
</div>
<div class="img-wrap">
<img src="http://lorempixel.com/300/200/nature/" />
</div>
<div class="img-wrap">
<img src="http://lorempixel.com/200/300/nature/" />
</div>
そしてCSS:
.img-wrap {
width: 200px;
height: 150px;
position: relative;
display: inline-block;
overflow: hidden;
margin: 0;
}
div > img {
display: block;
position: absolute;
top: 50%;
left: 50%;
min-height: 100%;
min-width: 100%;
transform: translate(-50%, -50%);
}
出来上がり!作業: http://jsfiddle.net/shekhardesigner/aYrhG/
説明
DIV はそのrelative
位置に設定されます。これは、すべての子要素が、この DIV の開始位置から開始座標 (原点) を取得することを意味します。
画像は BLOCK 要素として設定されます。min-width/height
どちらも 100% に設定すると、そのサイズに関係なく、親の 100% の最小値になるように画像のサイズを変更することを意味します。min
が鍵です。最小の高さで、画像の高さが親の高さを超えていても問題ありません。min-width を探し、最小の高さを親の 100% に設定しようとします。どちらも逆になります。これにより、div の周りにギャップがなくなりますが、画像は常に少し大きくなり、overflow:hidden;
image
これで、 と で位置absolute
が決まりました。原点がDIVから取得されていることを確認して、画像を上と左から50%プッシュすることを意味します。左/上の単位は、親から測定されます。left:50%
top:50%
魔法の瞬間:
transform: translate(-50%, -50%);
現在、translate
CSS3transform
プロパティのこの関数は、問題の要素を移動/再配置します。このプロパティは適用された要素を処理するため、値 (x, y) OR (-50%, -50%) は、画像サイズの 50% だけ左に負の画像を移動し、画像サイズの 50% だけ負の上に移動することを意味します.
例えば。画像サイズが200px×150pxの場合、transform:translate(-50%, -50%)
換算(-100px、-75px)で計算されます。%単位は、さまざまなサイズの画像がある場合に役立ちます。
これは、画像の重心と親 DIV を見つけて一致させるためのトリッキーな方法です。
説明が長くなりすぎてすみません!
詳細を読むためのリソース: