将背景图片拉伸,而不是平铺,注意平铺效果我们可以使用css的background-repeat来实行背景图片的平铺效果,本文讨论的是背景图片的拉伸效果。这种效果在一些前卫的页面设计中已经广泛应用,尤其在一些独立页面,像登录页面使用拉伸的背景图片效果比较常见。
目前有两种解决方案可以实现背景图片拉伸效果,一种是css,我们可以使用background-size:cover实现图片的拉伸效果,但是ie8及以下版本不支持background-size,于是我们尝试使用微软的滤镜效果,但是ie6不支持,毕竟还有一些后进生在使用ie6。另一种解决方案是使用jquery,完全解决浏览器的兼容性问题,还是jquery威武。
css解决方案
我们准备一张背景图片,任意尺寸的,假设我们要做一个登录页面,页面中使用拉升的背景图。我们只需要在body中加入以下代码:
...登录表单
然后css这样写:
body{background:url(bg.jpg) center center;background-size:cover;height:900px;width:100%; filter:progid:dximagetransform.microsoft.alphaimageloader(src='bg.jpg', sizingmethod='scale');} #main{position:absolute; top:50%; left:50%; width:420px; height:250px; margin:-125px 0 0 -210px; background:#ffc}
我们使用background-size实现了背景图片的拉伸效果,但是要兼容ie7,ie8就需要使用滤镜filter来实现,注意该方案中,必须指定容器的高度,本例中指定了height:900px。
css方案有一定的局限性,必须指定容器高度,ie6不兼容,那么比较完美的解决方案就是使用jquery了。
jquery解决方案
我们使用jquery先向body中动态插入一个div,并且该div中包含一张图片,也就是我们要求拉伸效果的背景图片。然后使用jquery获取浏览器窗口的大小,根据浏览器窗口大小,动态设置背景图片的尺寸(宽和高)。
$(function(){ $(body).append(); $(#main_bg).append(); cover(); $(window).resize(function(){ //浏览器窗口变化 cover(); }); }); function cover(){ var win_width = $(window).width(); var win_height = $(window).height(); $(#bigpic).attr({width:win_width,height:win_height}); }
上述代码中,cover()函数就是动态的设置了背景图片的尺寸,通过jquery的append方法动态加入背景图片,当页面加载完成时已经浏览器窗口变化时都能实现背景图片的拉伸效果,也就是页面ready和resize都调用了cover()函数。
以上两种解决方案,是否都很满意?我比较喜欢jquery解决方案,总之希望能帮到大家更好地掌握jquery和css使背景图片拉伸的技巧。
