หมายเหตุ: แม้ว่านี่จะเป็นคำตอบที่ยอมรับ แต่คำตอบด้านล่างนี้มีความถูกต้องมากกว่าและในขณะนี้ได้รับการสนับสนุนในทุกเบราว์เซอร์หากคุณมีตัวเลือกในการใช้ภาพพื้นหลัง
ไม่ไม่มี CSS วิธีเดียวที่จะทำได้ทั้งสองทิศทาง คุณสามารถเพิ่ม
.fillwidth {
min-width: 100%;
height: auto;
}
เพื่อให้องค์ประกอบมีความกว้าง 100% เสมอและปรับขนาดความสูงเป็นอัตราส่วนภาพหรือผกผันโดยอัตโนมัติ:
.fillheight {
min-height: 100%;
width: auto;
}
เพื่อปรับขนาดเป็นความสูงสูงสุดและความกว้างสัมพัทธ์เสมอ ในการทำทั้งสองอย่างคุณจะต้องพิจารณาว่าอัตราส่วนกว้างยาวสูงหรือต่ำกว่าคอนเทนเนอร์หรือไม่และ CSS ไม่สามารถทำได้
เหตุผลก็คือ CSS ไม่ทราบว่าหน้าตาเป็นอย่างไร มันตั้งกฎไว้ล่วงหน้า แต่หลังจากนั้นองค์ประกอบจะได้รับการแสดงผลและคุณรู้ว่าคุณกำลังจัดการกับขนาดและอัตราส่วนเท่าใด วิธีเดียวที่จะตรวจจับได้ด้วย JavaScript
แม้ว่าคุณจะไม่ได้มองหาโซลูชัน JS แต่ฉันจะเพิ่มโซลูชันนี้ให้หากมีคนต้องการ วิธีที่ง่ายที่สุดในการจัดการกับ JavaScript คือการเพิ่มคลาสตามความแตกต่างของอัตราส่วน ถ้าอัตราส่วนความกว้างต่อความสูงของกล่องมากกว่ารูปภาพให้เพิ่มคลาส "fillwidth" หรือเพิ่มคลาส "fillheight"
$('div').each(function() {
var fillClass = ($(this).height() > $(this).width())
? 'fillheight'
: 'fillwidth';
$(this).find('img').addClass(fillClass);
});
.fillwidth {
width: 100%;
height: auto;
}
.fillheight {
height: 100%;
width: auto;
}
div {
border: 1px solid black;
overflow: hidden;
}
.tower {
width: 100px;
height: 200px;
}
.trailer {
width: 200px;
height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tower">
<img src="http://placekitten.com/150/150" />
</div>
<div class="trailer">
<img src="http://placekitten.com/150/150" />
</div>