拉伸和缩放CSS背景

Law*_*Dol 643 html css

有没有办法让CSS中的背景拉伸或缩放以填充其容器?

vin*_*yll 566

使用CSS 3属性background-size:

#my_container {
    background-size: 100% auto; /* width and height, can be %, px or whatever. */
}
Run Code Online (Sandbox Code Playgroud)

自2012年起,这适用于现代浏览器.

  • 要保留图像的纵横比,您应该使用"background-size:cover;" 或"background-size:contain;".我已经构建了一个在IE8中实现这些值的polyfill:https://github.com/louisremi/background-size-polyfill (93认同)
  • 我必须设置`background-size:100%100%;`以获得我想要的效果,如果这有助于其他任何人. (32认同)
  • 我知道这已经有一年了,但我必须(笑)并同意'体面的浏览器'部分.检查所有浏览器,但我遇到的IE问题比其中任何一个都多. (6认同)
  • 这实际上不起作用.问题是**填充**容器,这意味着我们希望它伸展,所以它不会重复.另一方面,如果高度不覆盖该区域,则该答案将在高度方向上重复."拉伸填充"意味着伸展,但你必须这样,它不会重复.正确答案是从下面"掩盖".这实际上处理的情况并非如此. (2认同)

Cle*_*ent 258

对于现代浏览器,您可以使用background-size以下方法完成此操作

body {
    background-image: url(bg.jpg);
    background-size: cover;
}
Run Code Online (Sandbox Code Playgroud)

cover 表示垂直或水平拉伸图像,因此它永远不会平铺/重复.

这适用于Safari 3(或更高版本),Chrome,Opera 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')";
Run Code Online (Sandbox Code Playgroud)

  • 封面不会拉伸bg.100%100%是的. (7认同)
  • 特定于IE的过滤器不是理想的解决方案,因此可以随意使用CSS替代IE.我个人在我自己的网站上使用CSS3"封面",它在iOS设备上运行正常,只需确保定义设备宽度. (3认同)
  • 致克莱门特:您对之前IE的过滤器的建议是什么:仅部分工作.它可以缩放图片宽度,但高度缩放会因为不限制任何内容而出错.页面越高,背景图片就越高.. =(我在IE8上尝试了这个.而且,无论如何可能使用这些'封面'命令并以某种方式使其与iphone等手机兼容?我知道有视口问题但是可能有可能将视口缩放到整个屏幕,背景在这里缩放吗?感谢您的回复! (2认同)
  • 注意:从 Chromium 78.0.3904.97 开始,无法沿每个轴独立缩放 svg 图像。您可能需要将其放大并将其转换为光栅图像。 (2认同)
  • @Mike如果将`preserveAspectRatio =“none”`添加到SVG图像,它就会起作用。 (2认同)

Sol*_*ile 172

使用CSS缩放图像是不可能的,但是可以通过以下方式实现类似的效果.

使用此标记:

<div id="background">
    <img src="img.jpg" class="stretch" alt="" />
</div>
Run Code Online (Sandbox Code Playgroud)

使用以下CSS:

#background {
    width: 100%; 
    height: 100%; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
    z-index: 0;
}

.stretch {
    width:100%;
    height:100%;
}
Run Code Online (Sandbox Code Playgroud)

你应该完成!

为了将图像缩放为"全出血"并保持纵横比,您可以这样做:

.stretch { min-width:100%; min-height:100%; width:auto; height:auto; }
Run Code Online (Sandbox Code Playgroud)

它运作得很好!但是,如果裁剪了一个尺寸,它将仅在图像的一侧裁剪,而不是在两侧均匀裁剪(并居中).我在Firefox,Webkit和Internet Explorer 8中测试过它.

  • 如果其他人感兴趣,这似乎运作良好:http://www.buildinternet.com/project/supersized/ (4认同)
  • SO的一个缺陷:没有办法标记不再正确的答案,导致像@Ullas这样的人误入歧途.在所有现代浏览器中缩放背景很容易.https://developer.mozilla.org/en/CSS/background-size (3认同)
  • 这很好用......但是正在寻找一些更强大的东西(可能还有javascript),它也会根据图片是横向还是纵向进行调整.如果有人有这方面的解决方案会喜欢链接...谢谢! (2认同)

Met*_*ark 161

在CSS3中使用background-size属性:

.class {
     background-image: url(bg.gif);
     background-size: 100%;
}
Run Code Online (Sandbox Code Playgroud)

编辑: Modernizr支持检测背景大小的支持.您可以使用编写的JavaScript变通方法,但是在没有支持的情况下,您需要它并动态加载它.这样可以保持代码的可维护性,而不需要针对某些浏览器使用侵入式CSS攻击.

我个人使用脚本来处理它使用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;
}
Run Code Online (Sandbox Code Playgroud)

编辑: 您可能也对jQuery CSS3 Finaliz [s] e感兴趣.

  • 需要强调的是,Modernizr不支持在本机上不支持它的浏览器中支持背景大小.它只是一个方便的跨浏览器测试.当测试返回false时,由你来伪造它. (3认同)

ale*_*nia 34

试试文章背景大小.如果您使用以下所有内容,它将适用于除Internet Explorer之外的大多数浏览器.

.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%;
} 
Run Code Online (Sandbox Code Playgroud)

  • 如果背景图片是SVG,还需要在SVG内指定`preserveAspectRatio="none"`。有关此的更多信息 [此处](https://css-tricks.com/scale-svg/#article-header-id-4)。演示 [此处](https://codepen.io/blendamental/pen/MMWJKq)。 (4认同)

Era*_*rin 15

不是现在.它将在CSS 3中提供,但它需要一些时间才能在大多数浏览器中实现.

  • 显示日期是有原因的.它应该保留供历史参考.你是否正在浏览网站上的所有旧答案并低估它们?即使从那时起添加了更多信息,答案仍然是正确的.还要注意,这里的其他答案基本上是相同的(有些确实是不正确的 - 他们说这是不可能的).因为它有一些投票,我得到你在这一个选择的感觉. (4认同)
  • -1我不认为这个答案非常相关......并且它没有提供*any*kind的解决方案. (3认同)
  • 不,我选择了这一个,因为所有这一切都说"计算机说不",即使在2008年有这个问题有几个解决方案;-) (3认同)
  • A List Apart提供了很棒的文章:[请大家补充一下这个背景!](http://www.alistapart.com/articles/supersize-that-background-please/) (2认同)

Blo*_*sie 15

.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;
}
Run Code Online (Sandbox Code Playgroud)

适用于:

  • Safari 3+
  • Chrome无论如何+
  • IE 9+
  • Opera 10+(Opera 9.5支持背景大小但不支持关键字)
  • Firefox 3.6+(Firefox 4支持非供应商前缀版本)

此外,您可以尝试这个解决方案

    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
    -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
    zoom:1;
Run Code Online (Sandbox Code Playgroud)

感谢Chris Coyier的这篇文章 http://css-tricks.com/perfect-full-page-background-image/


Vil*_*lx- 8

总之一句:不.拉伸图像的唯一方法是使用<img>标记.你必须要有创意.

这个问题曾经写于2008年.今天,现代浏览器支持background-size解决了这个问题.请注意,IE8不支持它.

  • @Blowsie - 可爱.检查答案日期.在过去的5年中,浏览器格局发生了一些变化. (6认同)

Ben*_*ter 5

定义"伸展和缩放"......

如果你有一个位图格式,那么拉伸它并拉动它通常不是很好(从图形上讲).您可以使用可重复的模式来产生相同效果的错觉.例如,如果你的页面底部有一个较浅的渐变,那么你可以使用一个像素宽的图形和与容器相同的高度(或者最好更大以考虑缩放),然后将其平铺在页.同样,如果梯度跨越页面,它将比容器高一个像素并且比页面重复一样.

通常,当容器增长或收缩时,为了使其伸展以填充容器,您可以使图像大于容器.任何重叠都不会显示在容器的边界之外.

如果你想要一个依赖于像弯曲边缘的盒子那样的效果,那么你可以将盒子的左侧粘到容器的左侧,并且有足够的重叠(在合理范围内),无论容器有多大,它都不会用完背景,然后用弯曲的边缘对图像右侧的图像进行分层,并将其放置在容器的右侧.因此,当容器收缩或增长时,弯曲的盒子效果似乎随之缩小或增长 - 事实上并非如此,但它给人的幻觉就是正在发生的事情.

至于真正使图像缩小并随容器一起增长,你需要使用一些分层技巧使图像看起来像一个背景和一些javascript来调整容器的大小.目前还没有用CSS做到这一点的方法......

如果你正在使用矢量图形,那么你恐怕不在我的专业领域之外.


小智 5

这就是我所做的。在拉伸课上,我只是将高度更改为auto。这样,您的背景图片始终具有与屏幕宽度相同的尺寸,并且高度始终具有正确的尺寸。

#background {
    width: 100%;
    height: 100%;
    position: absolute;
    margin-left: 0px;
    margin-top: 0px;
    z-index: 0;
}

.stretch {
    width:100%;
    height:auto;
}
Run Code Online (Sandbox Code Playgroud)