Sử dụng CSS để đặt cả chiều rộng và chiều cao của hình ảnh thành 100% và hình ảnh sẽ tự động được kéo dài để lấp đầy div chứa, mà không cần jquery.
Ngoài ra, bạn sẽ không cần phải căn giữa hình ảnh vì nó đã được kéo dài để lấp đầy div (được căn giữa với số không lề).
HTML:
<div id="containingDiv">
<img src="">
</div>
CSS:
#containingDiv{
width: 200px;
height: 100px;
}
#containingDiv img{
width: 100%;
height: 100%;
}
Bằng cách đó, nếu người dùng của bạn Javascript bị vô hiệu, hình ảnh sẽ vẫn được kéo dài để lấp đầy div toàn bộ chiều rộng/chiều cao.
HOẶC
Cách JQuery (SHRINK/căng khít tới - BAO GỒM khoảng trắng):
$('img.shelf-img').each(function(i, item) {
var img_height = $(item).height();
var div_height = $(item).parent().height();
if(img_height<div_height){
//IMAGE IS SHORTER THAN CONTAINER HEIGHT - CENTER IT VERTICALLY
var newMargin = (div_height-img_height)/2+'px';
$(item).css({'margin-top': newMargin });
}else if(img_height>div_height){
//IMAGE IS GREATER THAN CONTAINER HEIGHT - REDUCE HEIGHT TO CONTAINER MAX - SET WIDTH TO AUTO
$(item).css({'width': 'auto', 'height': '100%'});
//CENTER IT HORIZONTALLY
var img_width = $(item).width();
var div_width = $(item).parent().width();
var newMargin = (div_width-img_width)/2+'px';
$(item).css({'margin-left': newMargin});
}
});
Cách JQuery - CROP để phù hợp (NO khoảng trắng):
$('img.shelf-img').each(function(i, item) {
var img_height = $(item).height();
var div_height = $(item).parent().height();
if(img_height<div_height){
//INCREASE HEIGHT OF IMAGE TO MATCH CONTAINER
$(item).css({'width': 'auto', 'height': div_height });
//GET THE NEW WIDTH AFTER RESIZE
var img_width = $(item).width();
//GET THE PARENT WIDTH
var div_width = $(item).parent().width();
//GET THE NEW HORIZONTAL MARGIN
var newMargin = (div_width-img_width)/2+'px';
//SET THE NEW HORIZONTAL MARGIN (EXCESS IMAGE WIDTH IS CROPPED)
$(item).css({'margin-left': newMargin });
}else{
//CENTER IT VERTICALLY (EXCESS IMAGE HEIGHT IS CROPPED)
var newMargin = (div_height-img_height)/2+'px';
$(item).css({'margin-top': newMargin});
}
});
Bạn đã thử 'img.shelf-img {width: 100%; chiều cao: 100%; } '? – Joe
Bạn đã thử thuộc tính CSS 'background-size: cover;'? – Alvaro
bạn có một số logic liên kết hình ảnh với div? –