Giải pháp CSS không có JS và không có hình nền:
Phương pháp 1 "lề tự động" (IE8 + - KHÔNG FF!):
div{
width:150px;
height:100px;
position:relative;
overflow:hidden;
}
div img{
position:absolute;
top:0;
bottom:0;
margin: auto;
width:100%;
}
<p>Original:</p>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
<p>Wrapped:</p>
<div>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>
http://jsfiddle.net/5xjr05dt/
Phương pháp 2 "biến đổi" (IE9 +):
div{
width:150px;
height:100px;
position:relative;
overflow:hidden;
}
div img{
position:absolute;
width:100%;
top: 50%;
-ms-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
<p>Original:</p>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
<p>Wrapped:</p>
<div>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>
http://jsfiddle.net/5xjr05dt/1/
Phương pháp 2 có thể được sử dụng để căn giữa một hình ảnh trong một thùng chứa chiều rộng / chiều cao cố định. Cả hai đều có thể tràn - và nếu hình ảnh nhỏ hơn thùng chứa thì nó vẫn sẽ được căn giữa.
http://jsfiddle.net/5xjr05dt/3/
Phương pháp 3 "trình bao bọc kép" (IE8 + - KHÔNG FF!):
.outer{
width:150px;
height:100px;
margin: 200px auto; /* just for example */
border: 1px solid red; /* just for example */
/* overflow: hidden; */ /* TURN THIS ON */
position: relative;
}
.inner {
border: 1px solid green; /* just for example */
position: absolute;
top: 0;
bottom: 0;
margin: auto;
display: table;
left: 50%;
}
.inner img {
display: block;
border: 1px solid blue; /* just for example */
position: relative;
right: 50%;
opacity: .5; /* just for example */
}
<div class="outer">
<div class="inner">
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>
</div>
http://jsfiddle.net/5xjr05dt/5/
Phương pháp 4 "trình bao bọc kép và hình ảnh kép" (IE8 +):
.outer{
width:150px;
height:100px;
margin: 200px auto; /* just for example */
border: 1px solid red; /* just for example */
/* overflow: hidden; */ /* TURN THIS ON */
position: relative;
}
.inner {
border: 1px solid green; /* just for example */
position: absolute;
top: 50%;
bottom: 0;
display: table;
left: 50%;
}
.inner .real_image {
display: block;
border: 1px solid blue; /* just for example */
position: absolute;
bottom: 50%;
right: 50%;
opacity: .5; /* just for example */
}
.inner .placeholder_image{
opacity: 0.1; /* should be 0 */
}
<div class="outer">
<div class="inner">
<img class="real_image" src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
<img class="placeholder_image" src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>
</div>
http://jsfiddle.net/5xjr05dt/26/
- Phương pháp 1 có hỗ trợ tốt hơn một chút - bạn phải đặt chiều rộng HOẶC chiều cao của hình ảnh!
- Với tiền tố phương thức 2 cũng có hỗ trợ khá (từ eg9 trở lên) - Phương thức 2 không hỗ trợ trên Opera mini!
- Phương pháp 3 sử dụng hai hàm bao - có thể tràn chiều rộng VÀ chiều cao.
- Phương pháp 4 sử dụng một hình ảnh kép (một như giữ chỗ) điều này cung cấp thêm một số chi phí băng thông, nhưng thậm chí còn hỗ trợ lai tốt hơn.
Phương pháp 1 và 3 dường như không hoạt động với Firefox
width
vàheight
nên điều chỉnh cho phù hợp