Oryginalna odpowiedź:
Jeśli jesteś gotowy, aby wybrać CSS3, możesz użyć właściwości translacji css3. Zmień rozmiar na podstawie tego, co jest większe. Jeśli Twój wzrost jest większy, a szerokość mniejsza niż kontenera, szerokość zostanie rozciągnięta do 100%, a wysokość zostanie obcięta z obu stron. To samo dotyczy większej szerokości.
Twoja potrzeba, 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>
I 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%);
}
Voila! Działający: http://jsfiddle.net/shekhardesigner/aYrhG/
Wyjaśnienie
DIV jest ustawiony na relative
pozycję. Oznacza to, że wszystkie elementy podrzędne otrzymają współrzędne początkowe (początki), z którego zaczyna się ten DIV.
Obraz jest ustawiony jako element BLOK, min-width/height
oba ustawione na 100% oznaczają zmianę rozmiaru obrazu, bez względu na jego rozmiar, tak aby był minimum 100% jego elementu nadrzędnego. min
jest kluczem. Jeśli o min-height wysokość obrazka przekroczyła wysokość rodzica, nie ma problemu. Sprawdzi, czy min-width i spróbuje ustawić minimalną wysokość na 100% rodziców. Oba są odwrotnie. Zapewnia to brak luk wokół elementu div, ale obraz jest zawsze nieco większy i jest przycinany ooverflow:hidden;
Teraz image
jest to ustawione w absolute
pozycji z left:50%
i top:50%
. Oznacza przesunięcie obrazu o 50% od góry i w lewo, upewniając się, że pochodzenie pochodzi z DIV. Jednostki lewa / góra są mierzone od rodzica.
Magiczna chwila:
transform: translate(-50%, -50%);
Teraz ta translate
funkcja transform
właściwości CSS3 przenosi / repozycjonuje dany element. Ta właściwość dotyczy zastosowanego elementu, stąd wartości (x, y) LUB (-50%, -50%) oznaczają przesunięcie negatywu obrazu w lewo o 50% rozmiaru obrazu i przejście do negatywu na górę o 50% rozmiaru obrazu .
Na przykład. jeśli rozmiar obrazu wynosił 200 pikseli × 150 pikseli, transform:translate(-50%, -50%)
zostanie obliczone do przetłumaczenia (-100px, -75px). Jednostka% pomaga, gdy mamy różne rozmiary obrazu.
Jest to po prostu trudny sposób na ustalenie centroidu obrazu i nadrzędnego DIV i dopasowanie ich.
Przepraszamy za zbyt długie wyjaśnianie!
Zasoby, aby przeczytać więcej:
background-size: cover;
?