是否有一种方法来获得CSS的背景拉伸或缩放以填充它的容器?
一句话:不。拉伸图像的唯一方法是使用<img>标签。你必须要有创造力。
<img>
在2008年,当答案写出来的时候,这曾经是正确的。今天,现代浏览器支持background-size,这解决了这个问题。注意,IE8不支持它。
background-size
目前还没有。它将在CSS 3中可用,但在大多数浏览器中实现它还需要一段时间。
定义“延伸和规模”…
如果你有一个位图格式,它通常不太好(从图形上讲)拉伸它和拉它。您可以使用可重复的模式来产生相同效果的错觉。例如,如果你的渐变在页面底部变浅,那么你可以使用一个与容器相同的像素宽的图形(或者最好更大一些,以考虑缩放),然后将其平铺在页面上。同样,如果渐变贯穿整个页面,它将比容器高一个像素,宽一个像素,并在整个页面重复。
通常,当容器增大或缩小时,为了给人一种它拉伸填充容器的错觉,您可以使图像比容器更大。任何重叠都不会显示在容器的边界之外。
如果你想要一个依赖于像盒子弯曲边缘的效果,那么你可以将盒子的左侧粘到容器的左侧,并有足够的重叠(在合理的范围内),无论容器有多大,它都不会超出背景,然后你将盒子右侧的图像与弯曲边缘分层,并将其定位在容器的右侧。因此,当容器缩小或增大时,曲线盒效应似乎也随之缩小或增大——事实上并非如此,但它给人一种错觉,那就是正在发生的事情。
至于真正让图像随着容器一起缩小和增大,您需要使用一些分层技巧来使图像看起来像一个背景,并使用一些javascript来调整它与容器的大小。目前没有办法用CSS做到这一点…
如果你使用矢量图形,恐怕就超出了我的专业领域。
使用CSS缩放图像是不太可能的,但是可以通过以下方式实现类似的效果。
使用下面的标记:
<div id="background"> <img src="img.jpg" class="stretch" alt="" /> </div>
使用以下CSS:
#background { width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; z-index: 0; } .stretch { width:100%; height:100%; }
你该结束了!
为了将图像缩放为“完全出血”并保持纵横比,你可以这样做:
.stretch { min-width:100%; min-height:100%; width:auto; height:auto; }
它的效果非常好!然而,如果裁剪一个维度,它将只在图像的一侧裁剪,而不是在两侧均匀裁剪(并居中)。我已经在Firefox、Webkit和internetexplorer8中测试了它。
SolidSmile作弊的另一个技巧是通过设置宽度和自动设置高度来缩放(按比例重新调整大小)。
例:
#background { width: 500px; height: auto; position: absolute; left: 0px; top: 0px; z-index: 0; }
这就是我做的。在拉伸类中,我简单地将高度更改为auto。这样,你的背景图片总是与屏幕宽度相同,高度也总是有合适的大小。
auto
#background { width: 100%; height: 100%; position: absolute; margin-left: 0px; margin-top: 0px; z-index: 0; } .stretch { width:100%; height:auto; }
添加background-attachment行:
background-attachment
#background { background-attachment:fixed; width: 100%; height: 100%; position: absolute; margin-left: 0px; margin-top: 0px; z-index: 0; } .stretch { width:100%; height:auto; }
在CSS3中使用background-size属性:
.class { background-image: url(bg.gif); background-size: 100%; }
编辑: Modernizr支持检测背景大小的支持。您可以使用编写的JavaScript解决方案来工作,无论您需要它,并在不支持时动态加载它。这将保持代码的可维护性,而无需诉诸于某些浏览器的侵入性CSS hack。
就我个人而言,我使用jQuery脚本来处理它,它是imgsizer的改编。正如我现在所做的大多数设计一样,我在设备之间使用宽度%的流体布局,其中一个循环有轻微的适应(考虑到大小并不总是100%):
for (var i = 0; i < images.length; i++) { var image = images[i], width = String(image.currentStyle.width); if (width.indexOf('%') == -1) { continue; } image.origWidth = image.offsetWidth; image.origHeight = image.offsetHeight; imgCache.push(image); c.ieAlpha(image); image.style.width = width; }
<强>编辑: 你可能也会对jQuery CSS3 Finaliz[s]e感兴趣
试试文章background-size。如果你使用以下所有选项,它可以在大多数浏览器中运行,除了Internet
.foo { background-image: url(bg-image.png); -moz-background-size: 100% 100%; -o-background-size: 100% 100%; -webkit-background-size: 100% 100%; background-size: 100% 100%; }
对于现代浏览器,你可以通过使用background-size来实现:
body { background-image: url(bg.jpg); background-size: cover; }
cover表示垂直或水平拉伸图像,这样它就不会平铺/重复。
cover
这将适用于Safari 3(或更高版本),Chrome, 歌剧 10+, Firefox 3.6+和Internet Explorer 9(或更高版本)。
为了让它在低版本的Internet Explorer中工作,尝试以下CSS:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale'); -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
我想指出,这相当于做:
html { width: 100%; height: 100%; } body { width: 100%; height: 100%; /* Add background image or gradient to stretch here. */}
使用CSS 3属性background-size:
#my_container { background-size: 100% auto; /* width and height, can be %, px or whatever. */ }
自2012年以来,这一功能可用于现代浏览器。
另一个很好的解决方案是robbin's Backstretch,它可以应用于正文或页面上的任何元素- http://srobbin.com/jquery-plugins/backstretch/
试试这个
http://jsfiddle.net/5LZ55/4/
body { background: url(http://p1.pichost.me/i/40/1639647.jpg) no-repeat fixed; background-size: cover; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; }
.style1 { background: url(images/bg.jpg) no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; }
适用于:
此外,您可以尝试使用ie解决方案
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale'); -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')"; zoom:1;
这篇文章由克里斯·科耶尔 # EYZ0 < / p >
使用border-image : yourimage属性来设置你的图像,并将其放大到屏幕或窗口的整个边界。
border-image : yourimage