使用CSS在背景图片上设置尺寸?


Answers:


621

CSS2

如果需要放大图像,则必须在图像编辑器中编辑图像本身。

如果使用img标签,则可以更改大小,但是如果您需要将图像作为其他内容的背景,那将无法达到预期的效果(并且它不会像您想要的那样重复出现)...

CSS3 释放力量

在CSS3中使用可以做到这一点background-size

所有现代的浏览器都支持此功能,因此除非您需要支持旧的浏览器,否则这是这样做的方法。
支持的浏览器:
Mozilla Firefox 4.0+(Gecko 2.0 +),Microsoft Internet Explorer 9.0 +,Opera 10.0 +,Safari 4.1+(webkit 532)和Chrome 3.0+。

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

特别是,我喜欢covercontain赋予我们前所未有的控制权的价值。

回合

您还可以background-size: round结合使用具有重复含义的含义:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

这将调整图像宽度,使其适合背景定位区域中的所有次数。


附加说明
如果所需大小是静态像素大小,则可以通过物理方式调整实际图像的大小。这既可以提高调整大小的质量(假设您的图像软件比浏览器做得更好),又可以在原始图像大于要显示的图像时节省带宽。


7
请注意,还有iPad和iPhone以及可能会出现的其他高分辨率设备上的视网膜显示器的问题。这意味着值得使用CSS调整较大图像的大小,并使用多个CSS文件和其他技巧来提供特定图像。不错的介绍这里:webmonkey.com/2012/03/…–
Leo

目前,这是最糟糕的解决方案,因为并非每个电子商务商店都将按照建议调整图像大小。在2009年,它很可能已接近最佳选择,现在仅使用如下所示的size属性。
ShaunOReilly 2012年

332

只有CSS 3支持该功能,

background-size: 200px 50px;

但是我会编辑图像本身,以便用户需要减少加载,并且它看起来比没有抗锯齿功能的缩小图像更好。


32
不幸的是,人们仍然使用ie8
Dean_Wilson

16
糟糕的浏览器让Microsoft感到羞耻
Mahmoodvcs

2013年年底,仍需要添加background: url('resized_image.png')\9;IE lt 9
skobaljic

即使在2017年,这也是必经之路!
Francisco Ochoa'7

我也是2017年来的,这就是我们的工作方式。
Ska

23

如果您的用户仅使用Opera 9.5 +,Safari 3 +,Internet Explorer 9+和Firefox 3.6+,那么答案是肯定的。否则,不会。

背景大小的属性是CSS 3的一部分,但它不会工作在大多数浏览器。

为了您的目的,请放大实际图像。


1
背景大小:100%;背景位置:中心;-这在XP Home的虚拟机上运行的IE6中有效。
InnateDev 2011年

7
IE 6,7,8并不是“大多数浏览器”。
Mahmoodvcs 2012年

1
即使在2013年-尽管“ IE6,7,8并不是'大多数浏览器'”的评论在IE6方面可能部分正确。不幸的是,IE7和IE8仍占有相当大的市场份额。我发现最好的方法是结合使用Javascript和modernizr(或其他标记“ OLDIE”的方式)。
AndrewPK

19

不可能的。背景将始终尽可能大,但是您可以使用来阻止背景重复background-repeat

background-repeat: no-repeat;

其次,背景不会进入框的空白区域,因此,如果只想让背景位于框的实际内容上,则可以使用空白而不是填充。

第三,您可以控制背景图像的起始位置。默认情况下,它是盒子的左上角,但是您可以使用来控制它background-position,如下所示:

background-position: center top;

也许

background-position: 20px -14px;

负定位在CSS精灵中经常使用。


不,它不像我那么大。大小总是一样的,但我需要做大一些。
约翰,

好吧,那是不可能的。在将来的CSS版本中,可能会有这样做的选择,但这还有很长的路要走。
mikl

这个答案是错误的。CSS3具有IE9 +支持的background-size属性。
Downpour046'4

3
看一下时间戳记。在2009年,背景大小在WebKit眼中只是一闪而过。如果愿意,可以随时对其进行更新,但是已经有很多其他答案描述背景尺寸。
mikl 2014年

12

如果您不害怕更深入一点,那就不太难了:)

有一个被遗忘的论点:

background-size: contain;

这不会像拉伸background-image那样伸展您的身体cover。它将一直延伸到较长的一侧达到外部容器的宽度或高度,从而保留图像。

编辑:还有-webkit-background-size-moz-background-size

在IE9 +,Firefox 4 +,Opera,Chrome和Safari 5+中支持background-size属性。

-资料来源:W3学校


3

background-size:200px 50px将其更改为100%100%,它将根据诸如ul li或div之类的内容标签的需要进行缩放...尝试过


3

为了支持@tetra给出的答案,我想指出的是,如果图像是SVG,则无需调整实际图像的大小。

由于SVG文件只是XML,因此您可以指定要在XML中显示的大小。

但是,如果您在不同的地方使用相同的SVG图像,并且需要将其设置为不同的大小,则使用background-size将非常有帮助。SVG文件本质上比光栅图像要小,并且使用CSS快速调整大小可能会很有帮助,而不会引起我所意识到的任何性能成本,当然也不会造成质量损失。

这是一个简单的示例:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(注意:这对我来说适用于OS X 10.7,Firefox 8,Safari 5.1和Chrome 16.0.912.63)


3

您完全可以使用CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

这会将背景图像的大小调整为body元素宽度的100%,然后随着body元素的大小调整为较小的分辨率,相应地重新调整背景的大小。

这是示例:http : //www.sccc.premiumdw.com/examples/resize-background-images-with-css/


2

只需要嵌套的div就可以跨浏览器兼容

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   

2

您可以使用两个<div>元素:

  • 一个是容器(它是您最初希望背景图像出现的容器)。

  • 第二个包含在其中。您可以将其大小设置为背景图像的大小(或希望显示的大小)。

然后将包含的div设置为position absolute。这样,它不会干扰包含div中项目的正常流动。

它使您可以有效使用精灵图像。


1

您无法使用当前版本的CSS(2.1)设置背景图片的大小。

您只能设置:positionfiximage-urlrepeat-mode,和color


1
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;

1

你写

background: url('bg.gif') top repeat-y;    
background-size: 490px;

但您只会看到背景,具体取决于容器的大小。

如果您有一个空容器,带有背景url和背景大小,那么您将看不到bg.gif。

如果将纸匣的尺寸设置为

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

结合您上面编写的代码,您将能够看到bg.gif文件。


0

background-size 可以在Chrome 4.1中使用,但到目前为止我无法在Firefox 3.6中使用。


0

我使用背景图像作为按钮,但是即使我设置了宽度和高度,它也只能显示与文本相同大小的图像。相反,我用&nbsp;字符(不间断空格)填充文本。基本上,我会根据需要添加所有内容,直到出现所有按钮背景。所以我可能会有这样的代码:

在样式表中:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

在HTML文档中:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->

2
另一种方法是将链接的大小设置为背景图像的大小。在样式表中(在上例中的#v2menu-home下),使用display:block并在那里设置高度和宽度。确实有效。则无需使用不间断的空格字符。
马丁·汤普森

0

例如:
背景图片将始终适合容器大小(宽度100%和高度100px)。
跨浏览器CSS:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}


0

这可以在CSS3中使用background-size进行

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}

0

如果要background-size在同一background属性中设置,可以使用use:

background:url(my-bg.png) no-repeat top center / 50px 50px;

我无法测试,但是可能。
拉塔塔塔塔

我以为iPad无法识别速记背景@ orlando-leite
DGRFDSGN
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.