我绝对不建议使用纯 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 中呈现时,图像的 onload 监听器可能需要 tweeking 做出反应: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