Оригінальна відповідь:
Якщо ви готові вибрати 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є ключовим. Якщо на мінімальну висоту висота зображення перевищувала батьківський, не біда. Він буде шукати, якщо мінімальна ширина, і спробувати встановити мінімальний зріст, рівний 100% батьків. І те, і інше йде навпаки. Це гарантує відсутність прогалин навколо div, але зображення завжди трохи більше і обрізаєтьсяoverflow:hidden;
Тепер imageце встановлено в absoluteположення з left:50%і top:50%. Засоби відсувають зображення на 50% зверху та ліворуч, переконуючись, що початок береться з DIV. Ліва / верхня одиниці вимірюються від батьківської.
Чарівний момент:
transform: translate(-50%, -50%);
Тепер ця translateфункція CSS3transform переміщує / змінює позицію відповідного елемента. Ця властивість стосується застосованого елемента, отже значення (x, y) АБО (-50%, -50%) означають переміщення від’ємного зображення вліво на 50% від розміру зображення та переміщення в негативний верх на 50% від розміру зображення .
Напр. якщо розмір зображення був 200px × 150px, transform:translate(-50%, -50%)обчислюється для перекладу (-100px, -75px). % одиниці допомагає, коли ми маємо різний розмір зображення.
Це лише хитрий спосіб з’ясувати центроїд зображення та батьківський DIV та зіставити їх.
Вибачення за те, що вам потрібно занадто довго пояснювати!
Ресурси для читання далі:
background-size: cover;?