在CSS3之前,我们不能指定背景图像的显示大小,一般是按图像的原始尺寸显示。在CSS3中,通过 background-size属性,可以设置背景图像的显示尺寸。

background-size属性的值可以是预定义关键字 cover | contain,也可以是使用长度值、百分比或 auto 定义背景图像的尺寸,长度和百分比不允许负值。

使用预定义值时,cover 表示背景图像完全覆盖容器的背景区域,如果图像过大或过小,则会将背景图像等比缩放到完全覆盖容器,背景图像有可能超出容器;contain 表示背景图像始终只填充容器的背景区域,如果图像过大或过小,也会对背景图像等比缩放。但是,当宽度与容器的宽度相等,或高度与容器的高度相等时,则停止缩放。所以,停止放大后,某个方向可能没有完全覆盖,则会显示背景颜色。

使用长度、百分比或 auto 定义尺寸时,需要提供两个参数。如果提供两个,第一个为背景图像的宽度,第二个为背景图像的高度;如果只提供一个,该值为背景图像的宽度,第 2 个值默认为 auto,即高度为 auto,背景图像按提供的宽度等比缩放。

这里对每个取值定义了一个类,然后分别应用到一个容器,来看看 background-size属性在不同取值下的表现。代码如下:

 
  1. div {
  2. width: 180px;
  3. height: 120px;
  4. border: 10px dashed #888;
  5. background-repeat: no-repeat;
  6. background-image: url(img/bg.gif);
  7. }
  8. .cover {
  9. background-size: cover;
  10. }
  11. .contain {
  12. background-size: contain;
  13. }
  14. .size {
  15. background-size: 50% 50%;
  16. }
 
  1. <div class="cover"></div>
  2. <div class="contain"></div>
  3. <div class="size"></div>

上述代码的运行结果如图 4‑33 所示:

background-size属性效果图4-33 background-size属性效果

从上图可以看出,属性取值 cover 时,背景图像要进行等比放大,以填满整个容器,为了适应容器的宽度,高度已经溢出到了边框的下面;取值 contain 时,背景图像进行等比放大,宽度到达容器的高度后,图像不再进行放大,故容器宽度有空白;使用尺寸时,图像为原始尺寸的 50%。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐