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

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

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

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

.image2 {
background-image: url(some.png);
background-repeat: no-repeat;
background-position: -24px 0px;
}
.image3 {
background-image: url(some.png);
background-repeat: no-repeat;
background-position: -48px 0px;
}

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

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

.image2 {
background-image: url(some.png);
background-repeat: no-repeat;
background-position: 25% 0%;
}
.image3 {
background-image: url(some.png);
background-repeat: no-repeat;
background-position: 50% 0%;
}

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

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

.image2 {
width: 24px; height: 24px;
background-image: url(some.svg);
background-repeat: no-repeat;
background-size: 120px 72px;
background-position: -24px 0px;
}
.image3 {
width: 24px; height: 24px;
background-image: url(some.svg);
background-repeat: no-repeat;
background-size: 500% 300%;
background-position: -48px 0px;
}

其中,我们先用 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. springMVC传对象参数、返回JSON格式数据

    假如请求路径:http://localhost/test/test.do?user.id=1 后台接收参数的方法如下: @RequestMapping("/test") publi ...

  2. return File

    public ActionResult DownloadMessage() { string strExportData = "无数据!"; byte[] data = Syste ...

  3. ASP.NET中POST提交数据并跳转页面

    需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection ...

  4. Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义

    转:http://blog.chinaunix.net/uid-26896647-id-3433968.html 问题描述:如果在一个表中的一个字段上存在'&',  '_',  '%'这样的特 ...

  5. oracle 11g rac 无法自动启动

    如果以上的操作依然不能使数据库资源自动启动,那么参考下面这篇文章修改资源AUTO_START属性. 查看资源状态: crsctl status resource 资源       -p     crs ...

  6. 组以逗号分隔的子串及跨平update join

    下列语句可以对组以逗号分隔的子串 set @device_cd_array += ', ' set @device_cd_array += @nodeid ,, '') update时要join表要先 ...

  7. [转] arcgis Engine创建shp图层

    小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog ...

  8. Android 获取本机WIFI及3G网络IP

    获取本机WIFIprivate String getLocalIpAddress() { WifiManager wifiManager = (WifiManager) getSystemServic ...

  9. Microsoft-pubs(图书馆管理系统)-数据库设计

    ylbtech-DatabaseDesgin:微软提供-pubs(图书馆管理系统)-数据库设计   1.A,数据库关系图 1.B,数据库设计脚本 -- ======================== ...

  10. ASP.NET常用技巧方法代码断

    1. 打开新的窗口并传送参数:传送参数:response.write("<script>window.open('*.aspx?id="+this.DropDownLi ...