CSS属性之background-position的用法
2015-06-05 17:45
791 查看
作为CSS中使用图片时会用到的属性,background-position的使用频率是很高的,它的作用就是设定某元素背景图像的初始位置。并且它有三种设定参数的方式,虽然这三种方式可以混合使用,不过我一般针对不同场景使用对应的参数设定方式。虽然官方文档上叙述了这三种方式,可是依然有些地方让我费解,特别是百分比的设定,经过实践,发现一个公式来计算需要设定的百分值,我会在后面详细阐述。
关于background-position的工作原理,我的理解是将图片上需要显示出来的区域相对于元素的左上角,也就是坐标点(0,0)进行水平和垂直方向偏移。
总的来说,background-position的参数设定方式是从简单到复杂,让我从简单的开始介绍:
使用语义明确的单词
水平方向:左(left),中(center),右(right)
垂直方向:上(top),中(center),下(bottom)
很明显,这种方式言简意赅,使用简洁而语义明确。
background-position: top center; // 从图片顶部开始,居中显示
background-position: top left; // 从图片顶部,靠左开始显示(左上角)
background-position: top right; // 从图片顶部,靠右开始显示(右上角)
background-position: bottom left; // 从图片底部,靠左开始显示(左下角)
background-position: bottom right; // 从图片底部,靠右开始显示(右下角)
更多例子
采用这种方式来显示图片,一般情况是为了显示整个图片文件上的内容,比如页面的背景图,换句话说,图片文件上就只有一个图像需要显示,然后使用这种方式来进行大概的定位操作,比如需要居中的将背景图片显示出来。
数值用法
这是一种对图片上需要显示的区域进行精确定位方法,用来实现CSS Sprites。
CSS Sprites就是将需要显示的多个图像排列到一个图片文件上,这样做的好处是可以减少图片数量,也就减少了HTTP请求次数,从而优化了网站的性能。一般来说,网站常用的图像资源,比如button,logo,icon都可以放到一张图片上。
举个例子,我们现在有一张图包含了很多icon,现在想要显示红色P那个icon,如图已经测量出红色P距离上边界和左边界的距离。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/3063694455d59362591f5550008e4c50.png)
使用如下的设定,
就可以显示出红色P了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/69b88fba2dd5b1d754a2b818cdd3379c.png)
很神奇吧,我们可以这样理解,刚创建的容器元素是一个从这张图片(0,0)坐标开始的一个相框,这个相框的大小是固定的125px,所以如果不设置background-position,也就是不设置任何偏移,看到的就是左上角那个icon。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/9905aaeb864adcaa8d74e391ff54f7ff.png)
所以图片需要向上384px,向左128px才能移动到红色P的位置。
[b]可是为什么设的是负值呢?
[/b]这是因为HTML里的X轴向右是正值,Y轴向下是正值!
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/4e5303759b9b9c513a5ba9df30476f60.jpg)
而刚才我们的图片需要向左向上移动,正好在两个维度都需要反向移动,所以为负值。
这个方式是不是很有用?通过设置偏移数值就能找到图片上需要显示的区域。
注意,这个方式存在一个问题,因为设定的偏移值都是固定的,导致没法做到图像自适应。我们在实现实现响应式设计时,图片的大小会根据浏览器视口的大小进行缩放调整,而图片的大小改变之后,偏移位置就需要改变,换句话说,图片大小一调整,我们想要显示的图像的位置在数值上也会改变。为解决这个问题,我们得用百分比的方式。
百分比用法
之所以百分比能解决上面的问题,因为它是一种表示相对偏移的方式,只要图片等比缩放,图像的相对位置是不变的。
其实百分比用法和数值用法很类似,都需要先测量想要显示的那块图像距离上边界和左边界的距离,另外还要测量整张图片的高和宽。
还是以上面的图片为例,它的宽(X轴)是381px,高(Y轴)是509px,红色P的X轴偏移值是128px,Y轴偏移值是384px,红色P是长度为125px的正方形。
看到这里心想X轴的百分比偏移量就是 128px/381px ≈ 33.5958%,Y轴 384px/509px ≈ 75.442%,然后设置background-position: 33.5958% 75.442%;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/5d1887ecf47f6810f9a9bb22dcbb930d.png)
可是看到的结果却是这样的,真是坑爹啊。
实际上,经过实践发现,它用的另一个公式来计算
X轴百分比:X轴偏移值 / (图片宽度 - 要显示图像的宽度) * 100
Y轴百分比:Y轴偏移值 / (图片高度 - 要显示图像的高度) * 100
应用到例子:X轴为128px / (381px - 125px) = 0.5,Y轴384px / (509px - 125px) = 1,因此结果就是50%和100%。
以上就是background-position的基本用法。
参考文档:
W3School CSS background-position 属性
CSS: Using Percentages in Background-Image
关于background-position的工作原理,我的理解是将图片上需要显示出来的区域相对于元素的左上角,也就是坐标点(0,0)进行水平和垂直方向偏移。
总的来说,background-position的参数设定方式是从简单到复杂,让我从简单的开始介绍:
使用语义明确的单词
水平方向:左(left),中(center),右(right)
垂直方向:上(top),中(center),下(bottom)
很明显,这种方式言简意赅,使用简洁而语义明确。
background-position: top center; // 从图片顶部开始,居中显示
background-position: top left; // 从图片顶部,靠左开始显示(左上角)
background-position: top right; // 从图片顶部,靠右开始显示(右上角)
background-position: bottom left; // 从图片底部,靠左开始显示(左下角)
background-position: bottom right; // 从图片底部,靠右开始显示(右下角)
更多例子
采用这种方式来显示图片,一般情况是为了显示整个图片文件上的内容,比如页面的背景图,换句话说,图片文件上就只有一个图像需要显示,然后使用这种方式来进行大概的定位操作,比如需要居中的将背景图片显示出来。
数值用法
这是一种对图片上需要显示的区域进行精确定位方法,用来实现CSS Sprites。
CSS Sprites就是将需要显示的多个图像排列到一个图片文件上,这样做的好处是可以减少图片数量,也就减少了HTTP请求次数,从而优化了网站的性能。一般来说,网站常用的图像资源,比如button,logo,icon都可以放到一张图片上。
举个例子,我们现在有一张图包含了很多icon,现在想要显示红色P那个icon,如图已经测量出红色P距离上边界和左边界的距离。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/3063694455d59362591f5550008e4c50.png)
使用如下的设定,
.icon { width: 125px; // 首先创建一个长宽为125px的容器元素 height: 125px; background-image: url('../assets/images/icon_sprites.png'); // 设置这个元素的背景图片 background-position: -128px -384px; // 设置偏移量 }
就可以显示出红色P了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/69b88fba2dd5b1d754a2b818cdd3379c.png)
很神奇吧,我们可以这样理解,刚创建的容器元素是一个从这张图片(0,0)坐标开始的一个相框,这个相框的大小是固定的125px,所以如果不设置background-position,也就是不设置任何偏移,看到的就是左上角那个icon。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/9905aaeb864adcaa8d74e391ff54f7ff.png)
所以图片需要向上384px,向左128px才能移动到红色P的位置。
[b]可是为什么设的是负值呢?
[/b]这是因为HTML里的X轴向右是正值,Y轴向下是正值!
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/4e5303759b9b9c513a5ba9df30476f60.jpg)
而刚才我们的图片需要向左向上移动,正好在两个维度都需要反向移动,所以为负值。
这个方式是不是很有用?通过设置偏移数值就能找到图片上需要显示的区域。
注意,这个方式存在一个问题,因为设定的偏移值都是固定的,导致没法做到图像自适应。我们在实现实现响应式设计时,图片的大小会根据浏览器视口的大小进行缩放调整,而图片的大小改变之后,偏移位置就需要改变,换句话说,图片大小一调整,我们想要显示的图像的位置在数值上也会改变。为解决这个问题,我们得用百分比的方式。
百分比用法
之所以百分比能解决上面的问题,因为它是一种表示相对偏移的方式,只要图片等比缩放,图像的相对位置是不变的。
其实百分比用法和数值用法很类似,都需要先测量想要显示的那块图像距离上边界和左边界的距离,另外还要测量整张图片的高和宽。
还是以上面的图片为例,它的宽(X轴)是381px,高(Y轴)是509px,红色P的X轴偏移值是128px,Y轴偏移值是384px,红色P是长度为125px的正方形。
看到这里心想X轴的百分比偏移量就是 128px/381px ≈ 33.5958%,Y轴 384px/509px ≈ 75.442%,然后设置background-position: 33.5958% 75.442%;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/13/5d1887ecf47f6810f9a9bb22dcbb930d.png)
可是看到的结果却是这样的,真是坑爹啊。
实际上,经过实践发现,它用的另一个公式来计算
X轴百分比:X轴偏移值 / (图片宽度 - 要显示图像的宽度) * 100
Y轴百分比:Y轴偏移值 / (图片高度 - 要显示图像的高度) * 100
应用到例子:X轴为128px / (381px - 125px) = 0.5,Y轴384px / (509px - 125px) = 1,因此结果就是50%和100%。
.icon { width: 125px; // 根据需要等比设定元素大小即可实现自适应 height: 125px; background-image: url('../assets/images/icon_sprites.png'); background-position: 50% 100%; // 偏移量设置为百分比 background-size: 381px 509px; // 根据需要等比设定图片大小即可实现自适应 }
以上就是background-position的基本用法。
参考文档:
W3School CSS background-position 属性
CSS: Using Percentages in Background-Image
相关文章推荐
- CSS系列:CSS3新增选择器
- 强烈推荐一款CSS导航菜单
- CSS3 @font-face
- CSS3实现3D效果的弹出框
- css3写等腰三角形
- CSS 框模型
- CSS 表格
- Silverlight学习笔记(1)——样式的运用
- CSS 列表
- 深入了解 CSS3 新特性
- css ie7中overflow:hidden失效问题及解决方法
- LESS CSS 框架简介
- CSS-正方体
- 四个漂亮的CSS样式表
- CSS 链接
- 一个还不错的gridview 样式【Z】
- 超链接标签简单的几个样式属性
- 编写html和css可以直接查看的网址
- 修改TabControl的样式(SilverLight)
- 【css】ie6 和 ie7 下 position 与 overflow 的问题