拉伸图像以填充div,但不会倾斜

时间:2012-06-30 01:38:20

标签: jquery css

我正在尝试将图像拉伸到div中。但是我希望它溢出,以便填满整个div。 div使用页面调整大小。我想要一个类似于jQuery bgstretcher插件(http://www.ajaxblender.com/bgstretcher-2-jquery-stretch-background-plugin-updated.html)的效果,但我不能使用该插件,因为我已经将它用于页面上的背景图像,当你尝试激活它时它似乎不起作用多个实例。

所以我要问的是某种简单的jQuery函数调整图像大小以完全填充隐藏溢出的div,这样就没有间隙,但不会使图像偏斜。

修改

http://jsfiddle.net/R7UCZ/

这就是我所追求的,但我希望图像填充整个div 而不会倾斜。如果图像有点偏离div,那很好,但是我需要用div来调整大小,div会调整页面的高度和宽度。

4 个答案:

答案 0 :(得分:9)

首先,您需要获取图像属性并查看哪个更大,高度或宽度,然后在窗口调整大小后根据div大小调整图像大小,如下所示:

  //this would load up initially, you will need this data for future processing


   div = $("div");
   imgsrc = div.find('img').attr('src');

   var img = new Image()
   img.onload = function(){
        imgw = img.width;
        imgh = img.height;

        //after its loaded and you got the size..
        //you need to call it the first time of course here and make it visible:

        resizeMyImg(imgw,imgh);
        div.find('img').show();

        //now you can use your resize function
        $(window).resize(function(){ resizeMyImg(imgw,imgh) });

        }
   img.src = imgsrc


   function resizeMyImg(w,h){     
      //the width is larger
      if (w > h) {
        //resize the image to the div
        div.find('img').width(div.innerWidth() + 'px').height('auto');
      }        
      else {
        // the height is larger or the same
        //resize the image to the div
        div.find('img').height(div.innerHeight() + 'px').width('auto');
      }

     }

您可以在这里找到完整的解决方案: http://jsfiddle.net/CDywS/1

答案 1 :(得分:6)

你根本不需要JavaScript / jQuery。只需使用contain的{​​{1}}或cover值:

  1. background-size将图像缩放到其最大宽度/高度,以便在保留纵横比的同时显示整个图像。 (没有溢出)

  2. background-size: contain将图像缩放到最大宽度,以便在保留纵横比的同时用图像填充整个div。 (如果图像不是正方形,则溢出)

  3. 因此,您只需编写此代码:

    background-size: cover

    或者:

    #myDiv {
        background-size: contain;
    }
    

    更多信息:http://css-tricks.com/perfect-full-page-background-image/

    更新Demo

答案 2 :(得分:1)

Zee Tee的答案标记为正确,它确实可以完成工作 - 但仅限于横向图像。肖像图像无法使用它,因为您可以看到在jsfiddle示例中尝试这样的图像。

但是,您可以通过为包含图像的div提供高度来使其工作。你可以给这个固定值或最小高度,也可以。

原因在于resizeMyImg函数中的行:

div.find('img').height(div.innerHeight() + 'px').width('auto');
除非div具有与之关联的高度或最小高度CSS属性,否则

div.innerHeight是未定义的。

答案 3 :(得分:0)

您可以这样做:

 <img src="your_picture.png" alt="" style="width:100%;height:100%"></img>

当你的容器div重新调整大小时,图像会伸展自己以填充整个div。

修改

如果您不希望图像倾斜:

 <img src="your_picture.png" alt="" style="width:100%"></img>

或者:

 <img src="your_picture.png" alt="" style="height:100%"></img>

取决于您不希望溢出的尺寸......