8

div 内に収まるように画像を拡大しようとしています。ただし、div全体が塗りつぶされるようにオーバーフローさせたいです。div はページに合わせてサイズ変更されます。jQuery bgstretcher プラグイン ( http://www.ajaxblender.com/bgstretcher-2-jquery-stretch-background-plugin-updated.html ) に似た効果が欲しいのですが、既に使用しているため、そのプラグインを使用できません。ページの背景画像用であり、複数のインスタンスをアクティブ化しようとすると機能しないようです。

だから私が求めているのは、画像のサイズを変更して、オーバーフローが隠されているdivを完全に埋めて、ギャップがないように、画像をゆがめないようにする、ある種の単純なjQuery関数です。

編集:

http://jsfiddle.net/R7UCZ/

それは私が求めているもののようなものですが、画像が歪むことなくdiv 全体を埋めるようにしたいと考えています。画像が div から少しはみ出しても問題ありませんが、高さと幅の両方でページのサイズを変更する div でサイズを変更する必要があります。

4

4 に答える 4

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

于 2012-06-30T02:42:05.120 に答える
6

JavaScript/jQuery はまったく必要ありません。containまたはのcover値を使用するだけですbackground-size:

  1. background-size: containアスペクト比を維持しながら画像全体が見えるように、画像を最大幅/高さにスケーリングします。(オーバーフローなし)

  2. background-size: coverアスペクト比を維持しながら div 全体が画像で満たされるように、画像を最大幅にスケーリングします。(画像が正方形でない場合はオーバーフロー)

したがって、次のコードを記述するだけです。

#myDiv {
    background-size: contain;
}

または:

#myDiv {
    background-size: cover;
}

詳細: http://css-tricks.com/perfect-full-page-background-image/

更新デモ

于 2012-06-30T02:07:34.273 に答える
1

Zee Teeの答えは正しいとマークされており、仕事をしていますが、横向きの画像のみです。jsfiddle の例でそのような画像を試してみるとわかるように、縦長の画像は機能しません。

ただし、画像を含む div に高さを与えることで、機能させることができます。これに固定値または最小高さのいずれかを指定できますが、どちらも機能します。

この理由は、resizeMyImg 関数の次の行にあります。

div.find('img').height(div.innerHeight() + 'px').width('auto');

div に高さまたは最小高さの CSS 属性が関連付けられていない限り、div.innerHeight は未定義です。

于 2013-09-02T11:41:56.423 に答える
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>

オーバーフローさせたくない次元に応じて...

于 2012-06-30T02:00:32.767 に答える