转载css的background-position

这是一个有趣的话题

其实我并不确切的平时大家是怎么去应用或者玩转一个属性,一个值。我能肯定的是这些东西都有不少的可玩性。

我今天要聊的 background-position 应该已经被大家玩得色彩斑斓了。尤其是 CSS Sprites流行的这些年,background-position 基本上是被应用最多的属性之一。

重拾旧趣

我们知道 background-position 是用来指定背景图像的偏移值的,能让一张图从特定的位置开始展现。而 CSS Sprites 就是通过将多个小图拼接成一张大图,然后利用 background-position 来指定需要显示的区域,以此达到合并HTTP请求的预期。

一个足够简单的应用

为了回顾 background-position 的应用,接下来我将会用一个最简单的例子来代入,这里有一张由2个 300*100px 垂直拼接而成的图片作为背景图,如 图0

图0:简单的文字图片

我现在需要 图0 在2个并排的div中分别显示不同的部分:

HTML:

12
<div class="part1"><!-- 显示图0上半部分 --></div><div class="part2"><!-- 显示图0下半部分 --></div>

于是我写了段简单的CSS,如下:

CSS:

1234567891011
div {    width: 300px;    height: 100px;    background: gray url(../test.png) no-repeat;}.part1 {    background-position: 0 0;}.part2 {    background-position: 0 -100px;}

很显然我可以得到预期,效果如 图1

图1:简单的CSS Sprites应用

这就是最典型的 CSS Sprites 使用场景。当然,你可以在线查看这个例子 Demo1 最简单的 background-position 应用

默认值

由于 background-position 的默认值是 0% 0%,那么上述的CSS代码其实可以优化成:

123
.part2 {    background-position: 0 -100px;}

因为 .part1 指定的值是 0 0,和默认值相同,所以可以省略。你会发现,对一个属性了解得更多,就更能帮助你写出简洁的代码。

百分比

我并不能确定大家是否使用过 background-position 的百分比,这里就权当大家对此并不甚了解。

试着使用百分比去实现上个例子

我相信肯定有童鞋会这样写:

1234
.part2 {    /* background-position: 0 -100px; */    background-position: 0 -50%;}

按照一般的思维,上述两行代码应该是等价的,不是么?在开篇的时候我们就说了背景图 图0 的高度是 200px,那么 -50% 正好是 -100px

不用着急,我们会用实际的例子来验证这个结果,来看 Demo2 检验 background-position 的百分比值

图2:参照尺寸验证

结果让人有点忧伤,这和我们的设想有点出入,这是为什么呢?

追本溯源

我们都知道一个百分比值,必然会需要有一个参照尺寸。举个例子来讲,假设我定义一个元素的宽度是 50%,那么这个元素的具体宽度就是:包含块宽度 * 50%

所以,如果你需要使用百分比作为 background-position 的值,必须清楚它的参照尺寸是什么。

w3c 是这样描述 background-position 比分比值的:

原文:refer to size of background positioning area minus size of background image.

翻译:参照指定背景区域的尺寸减去背景图片的尺寸

这是什么意思呢?白话一点说:background-position 的百分比值参照的是设置背景的区域减去背景图的尺寸。

再出发

按照这个思路,我们将:

123
.part2 {    background-position: 0 -50%;}

换算一下将会得到:

123
.part2 {    background-position: 0 50px;}

换算过程为:(设置背景的区域高度 - 背景图的高度) * -50%,即:(100 - 200) * -50% = 50px

这就解释了 Demo2 为什么会得到 图2 的效果。但这显然并不是我们想要的,我们预期的效果是图1

根据上述的公式,我们可以逆推预期效果的百分比值是多少:

1
-100 / (100 - 200) = 100%

所以如果你要使用百分比,那么定义应该是这样的:

123
.part2 {    background-position: 0 100%;}

其结果如 Demo3 正确使用 background-position 百分比

这会终于得到我们的预期效果了,请看 图3

图3:百分比的正确预期效果

了解了百分比的这个特性后,会帮助我们大大简化某些定义,比如我在 Yo 里面对 yo-score 的处理,非常巧妙,有兴趣的童鞋可以自己研究一下,这里不细讲。

另外:需要注意的是百分比值会受 background-size 影响,因为 background-size 可以改变背景图像的大小。

多值

在 CSS3 中,对 background-position 属性进行了扩展,允许接受3到4个参数,用于指定背景图的起始方向和具体位置。

原文:If three or four values are given, then each <percentage> or <length> represents an offset and must be preceded by a keyword, which specifies from which edge the offset is given.

翻译:如果指定了三个或四个值,那么每个 <percentage> 或 <length> 之前必须有一个关键字,用于指定该方向的偏移量。

当指定3到4个参数时,不接受 center 关键字作为偏移量作为边界,只能使用 top, right, bottom, left 这4个关键字。

多值的意义

在此前,我们使用 background-position 只能让背景图从 top, right, bottom, left, center 这5个边界开始显示,但无法指定任意一个边界的偏移量。

举个例子:我想让一个背景图从右下角偏移 20px

你会发现如果没有多值扩展,你很难轻易做到这件事,除非你能确定容器的宽高永远都是显式定义好的,就算如此,其灵活性也一文不值。

多值的应用

如果利用多值特性,这将变得非常轻松,我们仍使用 图0 作为背景图,来做一个演示。

123456
.demo {    width: 400px;    height: 400px;    background: url(../test.png) no-repeat;    background-position: right -300px bottom 20px;}

这会终于得到我们的预期效果了,请看 图4

图4:背景图多值应用

效果可以查看 Demo4 background-position 边界偏移。实际上,有了多值之后,我们可以让背景图在任意方位上偏移,你可能会发现,这甚至可以让你的结构写得更简单,嵌套变浅。

时间: 2024-10-27 11:44:29

转载css的background-position的相关文章

对CSS中的Position、Float属性的一些深入探讨

非常好的一篇文章,特此转载出来,文章转自:http://www.cnblogs.com/coffeedeveloper/p/3145790.html 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个CSS属性,对于这两个属性的使用上面可能大多数人存在一些模糊与不清晰的地方.本文主要对这两个属性使用上的一个介绍以及两个属性交叉使用上的一些探讨. 本文主要探讨点: Position.Float属性的基本使用方法 Position.Float属性对元素所造成的影响 Posi

CSS学习------CSS定位(position)与浮动(float)

position属性:用来对元素进行定位 定位的意义: 定位允许你定义元素框相对于其正常位置应该出现的位置. 相对于父元素. 相对于另一个元素. 相对于浏览器窗口本身的位置. 定位分为:绝对定位和相对定位. 相对定位: 如果对一个元素进行相对定位,它将出现在它所在的位置上.然后,可以通过设置垂直或水平位置,让这个元素"相对于"它的起点进行移动. 在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间.因此,移动元素会导致它覆盖其它框. 示例: <html>   <

CSS 定位之position

在前端网页布局中,在同一平面上布局,我们大都采用float属性来定位网页元素的位置.但是涉及到弹出层.浮层.页面广告插件等等,都需要CSS中的position属性来定位了,对于初学者来说经常分不清楚是应该用position属性的absolute值.relative值.fixed值等等,下面我们就position属性基本的这三个值的用法做一些简单的介绍,希望对初学者有些帮助. 1.position的absolute(绝对定位) 在这里position的absolute绝对定位我们分两类来讲: A:

CSS中的Position属性和Float属性

Css中的position很重要,常用有以下几个值:static,relative,absolute,fixed.Inherit. Static:静态定位.如果你没有设置position属性,那么缺省就是static.top.left.right.bottom等 属性,在static的情况下是无效的,要使用这些属性,必须把position设置为其他三个值之一. Relative:相对定位.元素将按照静态定位时的位置进行调整,在静态定位中分配给元素的空间仍会分 配给他,他两边的元素不会向它靠近来填

css中background背景属性概

css中background背景属性概 background:url(背景图片路径)  no-repeat;/*不重复默认在左上方*/ background:url(背景图片路径)  no-repeat center;/*不重复背景图片中间显示*/ background:url(背景图片路径)  no-repeat bottom center;/*不重复背景图片底部中间显示*/ background:url(背景图片路径)  no-repeat right top;/*不重复背景图片右上方显示*

css基础-Background&amp;Text

css基础-Background&Text     以下笔记为复习css的一些基础,每一节我都做了一个简单的总结事例,以便参考: 1 /*CSS 属性定义背影效果: 2 3 background-color 定义了元素的背景颜色. 4 background-image 定义了元素的背景图像. 5 background-repeat 定义是否重复 6 background-attachment 背景图像是否固定或者随着页面的其余部分滚动 7 background-position 改变图像在背景中

css中background背景属性概述

background:url(背景图片路径) no-repeat;/*不重复默认在左上方*/ background:url(背景图片路径) no-repeat center;/*不重复背景图片中间显示*/ background:url(背景图片路径) no-repeat bottom center;/*不重复背景图片底部中间显示*/ background:url(背景图片路径) no-repeat right top;/*不重复背景图片右上方显示*/ background:url(背景图片路径)

CSS背景background、background-position使用详解

背景(background)是css中一个重要的的部分,也是需要知道的css的基础知识之一.这篇文章将会涉及css背景(background)的基本用法,包括诸如 background-attachment 等的属性,也会介绍一些有关背景(background)的常用技巧,以及 css3 中的 背景(background)(包含4个新的背景(background)属性). css2 中的背景(background) 概述 CSS2 中有5个主要的背景(background)属性,它们是: * p

CSS 背景background实例

css背景background用于设置html标签元素的背景颜色.背景图片已经其他背景属性.本文章向码农介绍CSS 背景background使用方法和基本的使用实例.需要的码农可以参考一下. 一.Css background背景语法 CSS背景基础知识 CSS 背景这里指通过CSS对对象设置背景属性,如通过CSS设置背景各种样式. 背景语法: background: background-color || background-image || background-repeat || back

CSS的background简写方式

参考资料 作者:RunningCoderLee 链接:https://www.jianshu.com/p/fa07c2606380 來源:简书 其他资料 CSS3参考手册 https://www.css88.com/book/css/properties/background/background.htm 在CSS2.1里,background属性的简写方式包含五种属性值,从CSS3开始,又增加了3个新的属性值,加起来一共8个. CSS2.1 background-color 使用的背景颜色.