CSSのみのソリューションを使用することは絶対にお勧めしません。アップロードされた写真に任意の解像度がある場合、クライアント側のソリューションでさえありません。php スクリプトを使用して、アップロードされた画像のサイズ変更されたバージョンを保存し、それらをクライアントに提供したいと考えています。ブロックの背景画像として css を使用するか (クロス ブラウザーではありません)、img タグとして js を使用してサイズを変更します。
CSS:
.myselector{
background-size: cover;
}
または js (jquery):
$(function(){
var containers = $('.myselector'), w = $(window);
function onResize(){
//resize code
containers.each(function(){
var $this = $(this),
w = $this.width(),
h = $this.height(),
ratio = w/h,
$img = $('img',$this); // assuming there is only one img in each container
$img.css({'width':'auto','height':'auto'});
var iw = $img.width(), ih = $img.height(), iratio = iw/ih;
if(iratio>ratio){
$img.css({
height:'100%',
width:'auto',
marginLeft: (w-iw*(h/ih))/2
});
}
else{
$img.css({
width:'100%',
height:'auto',,
marginTop: (h-ih*(w/iw))/2
});
}
});
}
w.bind('resize',onResize);
//resize on each image load event
$('img',containers).bind('load',onResize);
onResize();
});
ここに実用的なフィドルがあります:http://jsfiddle.net/kHxd2/2/
画像のオンロード リスナーは、キャッシュされた画像が IE でレンダリングされるときに反応するように微調整する必要がある場合があります: http://css-tricks.com/snippets/jquery/fixing-load-in-ie-for-cached-images/
また、まれな非 js ブラウザの CSS ルールを設定することもできます... (.myselector img{width:100%;})
編集:コンテナCSS:
.myselector{
width: 100%;
max-width: 900px;
height: 200px;
margin: auto; /* centering */
overflow: hidden;
}
更新されたフィドルを参照してください: http://jsfiddle.net/kHxd2/3/
最善の解決策は、イメージ コンテナーをメイン ラッパー div に埋め込み、上記の CSS ルールをその大きなコンテナーに適用することです。
サーバー側のサイズ変更を処理するための便利なコードを次に示します: http://www.9lessons.info/2009/03/upload-and-resize-image-with-php.html