在 CSS 中,利用 background-image 属性我们可以指定元素的背景图片,例如:

  1. .example {
  2. background-image: url(image/some.png);
  3. background-repeat: repeat;
  4. }

其中,PNG 是常见的背景图片格式;较新的浏览器,比如 Chrome 8+,Firefox 4+,IE 9+,Opera 9.5+ 和 Safari 5+,也支持使用 SVG 格式的背景图片。当背景图片大小超过元素的大小时,我们可以用 background-repeat 属性指明重复覆盖的方式。

通常,一个网站中会使用许多个小图片。为减少网络请求的数目,我们经常将多个小图片拼合为一个大图片,然后用 CSS Sprite 的方法,截取其中的某个图片。假设我们将 5 个宽为 24px 的小图片,从左到右合并为一个宽为 120px 的大图片。此时,我们可以用下面的方法,分别截取出第 2 个和第 3 个小图片作为背景:

  1. .image2 {
  2. background-image: url(some.png);
  3. background-repeat: no-repeat;
  4. background-position: -24px 0px;
  5. }
  6. .image3 {
  7. background-image: url(some.png);
  8. background-repeat: no-repeat;
  9. background-position: -48px 0px;
  10. }

其中,background-position 属性指明了背景图片的左上角位置相对于元素区域的左上角的偏移值。

这个 background-position 属性也可以使用比例值,此时表示背景图片的该比例位置和元素区域的该比例位置重合。因此,取值为 0% 0% 表示背景图片的左上角和元素区域的左上角重合,而取值为 50% 50% 表示背景图片的中心和元素区域的中心重合。上面的例子也可以改为比例值如下:

  1. .image2 {
  2. background-image: url(some.png);
  3. background-repeat: no-repeat;
  4. background-position: 25% 0%;
  5. }
  6. .image3 {
  7. background-image: url(some.png);
  8. background-repeat: no-repeat;
  9. background-position: 50% 0%;
  10. }

经过简单计算可知,如果一行有 n 个等宽的图片,则截取第 k 个时要用的比例值为 (k-1)/(n-1)。不过使用比例值有时也不太可靠,例如在 Opera 12.15 中测试时发现,使用长度值时截取正常,而使用比例值时截取有些错位。

有时候,我们也会需要从大图片中先缩小到一定大小,再截取部分图片。这时候可以用 CSS3 的 background-size 属性。例如,我们用 SVG 图形作为背景图片,其中该 SVG 图形中包含 5 排 3 列共 15 个 96x96 像素的小图形,总共大小为 480x288 像素。而我们需要截取第 2 个和第 3 个并缩放到 24x24 像素大小作为背景图片。此时的 CSS 代码如下:

  1. .image2 {
  2. width: 24px; height: 24px;
  3. background-image: url(some.svg);
  4. background-repeat: no-repeat;
  5. background-size: 120px 72px;
  6. background-position: -24px 0px;
  7. }
  8. .image3 {
  9. width: 24px; height: 24px;
  10. background-image: url(some.svg);
  11. background-repeat: no-repeat;
  12. background-size: 500% 300%;
  13. background-position: -48px 0px;
  14. }

其中,我们先用 background-size 属性将 some.svg 缩小到 120x72 像素,再用 background-position 属性截取小图片。这个 background-size 属性既可以用长度值也可以用比例值,用比例值时将根据元素的大小计算背景图片的缩放大小。Chrome 3+,Firefox 4+,IE 9+,Opera 10+ 和 Safari 4.1+ 都支持这个属性。

参考资料:
[1] MDN - background-image - CSS
[2] MDN - background-repeat - CSS
[3] MDN - background-position - CSS
[4] MDN - background-size - CSS
[5] W3C - CSS2 - Colors and Backgrounds
[6] W3C - CSS Backgrounds and Borders Module Level 3
[7] CSS: Using Percentages in Background-Image - SitePoint
[8] svg-icon-loader - load SVG images from one single file
[9] SVG CSS Injection—A Different Approach Towards SVG Rendering

CSS 背景图片的定位和缩放的更多相关文章

  1. css背景图片定位练习(一)

    首先准备一张雪碧图,Like this 背景图片的定位方法有3种,比较常用的两种为 关键字:background-position: top left; (top/bottom/cennter/lef ...

  2. CSS背景图片定位

    原文:CSS背景图片定位 在网页开发中我们经常需要对图片进行分割(如下图)来使用,而不是分别提供单独的图片来调用,常见的如页面背景,按钮图标等,这样做的好处就是减少请求次数,节省时间和带宽. 对背景图 ...

  3. Bootstrap css背景图片的设置

    一. 网页中添加图片的方式有两种 一种是:通过<img>标签直接插入到html中 另一种是:通过css背景属性添加 居中方法:水平居中的text-align:center 和 margin ...

  4. css背景图片拉伸 以及100% 满屏显示

    如何用css背景图片拉伸 以及100% 满屏显示呢?这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在 ...

  5. div css背景图片不显示

    我们在写页面时,为了便于维护,css样式通常都是通过link外部导入html的,有时在css中写入背景图片时,此时背景图片的路径应该是相对css文件的.比如,此时的文件有index.html,css. ...

  6. 【IE6的疯狂之八】链接伪类(:hover)CSS背景图片有闪动BUG

    IE6下链接伪类(:hover)CSS背景图片有闪动BUG,主要原因ie会再一次请求这张图片,或者说图片没被缓存. 例如: CSS代码 a:hover{background:url(imagepath ...

  7. 【转】链接伪类(:hover)CSS背景图片有闪动BUG

    来源:http://www.css88.com/archives/744 --------------------------------------------------------------- ...

  8. 兼容各浏览器的css背景图片拉伸代码

    需要用到背景图拉伸,找到了下面这段css代码: filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='***.jpg' , s ...

  9. css背景图片拉伸

    css背景图片拉伸 background-image:url(bg.png); -moz-background-size: 100% 100%; -o-background-size: 100% 10 ...

随机推荐

  1. [反汇编练习] 160个CrackMe之010

    [反汇编练习] 160个CrackMe之010. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  2. Linux编译安装Darwin Streaming Server 6.0.3。。。

    目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的window ...

  3. CCapture directshow 视频捕获类

    // Capture.h for class CCapture #include <dshow.h> #include <qedit.h> #include <atlba ...

  4. Linux网络相关查询脚本

    1. 查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rnnetstat -n | awk '/^tcp/ {++S[$NF]} ...

  5. Android下二维码的扫描

    Android平台下 二维码的扫描一般采用: Zxing:参考地址 Zxing功能比较强大,支持条形码和二维码的扫描,用的人也比较多,但是Zxing太大,一般开发简单的app,用起来比较麻烦. 所以网 ...

  6. 【转】visual studio 2012进行C语言开发[图文]

    原文网址:http://blog.csdn.net/chengyafei0104/article/details/9826025 现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在 ...

  7. 【转】让 cocos2d-x 的 CCHttpRequest 支持https

    肖锐(Cooki)个人原创,欢迎转载,转载请注明地址,肖锐(Cooki)的技术博客 http://blog.csdn.net/xiao0026  由于游戏用到了网络头像, 今天发现换成facebook ...

  8. mac下SSH很快被断开

    解决方法: 1. 切换到root账号:sudo bash -c 'su - root' 2. 修改/etc/ssh_config文件 ServerAliveCountMax 5 ServerAlive ...

  9. 用Apache Kafka构建流数据平台的建议

    在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...

  10. HDU 4267-A Simple Problem with Integers(多个BIT)

    题意: 2种操作 1 a b k c 在区间[a,b]中的(i-a)%k==0的位置i上的数+c 2 a 查询位置a的值 输出每次查询的值 分析: 开始想到多维的线段树,但比较麻烦,看了题解才知道,用 ...