121

我想为不同的 div 设置背景图片,但我的问题是:

  1. 图像的大小是固定的(60px)。
  2. 改变div的大小

如何拉伸背景图像以填充 div 的整个背景?

#div2{
  background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
  height:180px;
  width:200px;
  border: 1px solid red;
}

在此处检查代码。

4

10 回答 10

186

添加

background-size:100% 100%;

到背景图像下方的CSS。

您还可以指定确切的尺寸,即:

background-size: 30px 40px;

这里:JSFiddle

于 2012-06-27T10:00:27.450 回答
83

您可以使用:

background-size: cover;

或者只是使用一个大的背景图像:

background: url('../images/teaser.jpg') no-repeat center #eee;
于 2014-01-14T11:07:03.493 回答
50

现代 CSS3(为未来推荐,可能是最好的解决方案)

.selector{
   background-size: cover;
   /* stretches background WITHOUT deformation so it would fill the background space,
      it may crop the image if the image's dimensions are in different ratio,
      than the element dimensions. */
}

最大限度。拉伸不裁剪也不变形(可能不填充背景) background-size: contain;
强制绝对拉伸(可能导致变形,但不裁剪) background-size: 100% 100%;

“旧” CSS“始终有效”的方式

绝对定位图像作为(相对定位)父级的第一个子级并将其拉伸到父级大小。

HTML

<div class="selector">
   <img src="path.extension" alt="alt text">
   <!-- some other content -->
</div>

相当于 CSS3 background-size: cover;

要动态地实现这一点,您必须使用与包含方法替代相反的方法(见下文),如果您需要将裁剪的图像居中,您将需要一个 JavaScript 来动态地做到这一点 - 例如使用 jQuery:

$('.selector img').each(function(){ 
   $(this).css({ 
      "left": "50%", 
      "margin-left": "-"+( $(this).width()/2 )+"px", 
      "top": "50%", 
      "margin-top": "-"+( $(this).height()/2 )+"px" 
   }); 
});

实际例子:
css 裁剪样例

相当于 CSS3 background-size: contain;

这个可能有点棘手 - 会溢出父级的背景尺寸将 CSS 设置为 100%,另一个设置为自动。 实际例子: CSS拉伸背景作为图像

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: auto;
   /* -- OR -- */
   /* width: auto; 
      height: 100%; */
}

相当于 CSS3 background-size: 100% 100%;

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: 100%;
}

PS:要完全动态地以“旧”方式进行覆盖/包含等价物(因此您不必关心溢出/比率),您必须使用 javascript 为您检测比率并按照描述设置尺寸。 ..

于 2015-06-25T04:32:11.890 回答
24

为此,您可以使用 CSS3background-size属性。像这样写:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    -moz-background-size:100% 100%;
    -webkit-background-size:100% 100%;
    background-size:100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

检查这个:http: //jsfiddle.net/qdzaw/1/

于 2012-06-27T09:57:50.027 回答
21

你可以加:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    background-size: 100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

你可以在这里阅读更多关于它的信息:css3 background-size

于 2012-06-27T10:05:23.573 回答
3

通过使用属性 css:

background-size: cover;
于 2015-08-26T09:38:31.823 回答
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
于 2016-01-21T21:58:26.767 回答
2

使用:背景尺寸:100% 100%;使背景图像适合 div 大小。

于 2018-07-20T02:56:02.410 回答
0

要保持纵横比,请使用background-size: 100% auto;

div {
    background-image: url('image.jpg');
    background-size: 100% auto;
    width: 150px;
    height: 300px;
}
于 2017-10-29T19:13:04.830 回答
0

尝试这样的事情:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
于 2017-10-29T19:51:47.340 回答