发表于: 2020-03-09 23:53:45

1 1377


(1)背景介绍:


CSSSprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言,不高于200KB的单张图片的所需载入时间基本是差不多的,所以无需顾忌这个问题。。


(2)知识剖析:


CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字精确的定位出背景图片的位置。


优点


1.利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因;


2.CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。


3.解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率。


4.更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。


缺点


诚然CSS Sprites是如此的强大,但是也存在一些不可忽视的缺点,如下:


1.在图片合并的时候,你要把多张图片有序的合理的合并成一张图片,还要留好足够的空间,防止板块内出现不必要的背景;这些还好,最痛苦的是在宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂;


2.CSS Sprites在开发的时候比较麻烦,你要通过photoshop或其他工具测量计算每一个背景单元的精确位置,这是针线活,没什么难度,但是很繁琐;


3.CSS Sprites在维护的时候比较麻烦,如果页面背景有少许改动,一般就要改这张合并的图片,无需改的地方最好不要动,这样避免改动更多的css,如果在原来的地方放不下,又只能(最好)往下加图片,这样图片的字节就增加了,还要改动css。


(3)常见问题:

CSS背景图坐标定位详解,为什么会有负数?


(4)解决方案:

1、两个值前面一个是横向的定位,我们称为x轴方向定位。后面一个值是纵向的定位,我们称为y轴方向定位。如果只有一个值,那默认的就是x轴方向,这时y轴方向就默认的是上下居中对齐,也就是center。


2、坐标轴的原点就是对应容器的左顶点。


3、这个坐标的y轴箭头朝下,也就是右下方(容器内部)x y的值才都为正。


4、x y值分别表示背景图片的左顶点相对于坐标原点(也就是容器的左顶点)的值。


5、x y用百分比或者px表示的时候,其值可以为负数。我们应用坐标规则就很容易理解负数表示的意义,x为负数时候表示图片左顶点在容器左顶点的左侧,y为负数时表示图片的左顶点在容器的左定点的上方。也就是向左和向上超出容器的范围。



(5)编码实战:

.bg_sprite{background-image:url(/整图地址); background-repeat:no-repeat}


引用该类 .. 然后在元素中逐一定义背景坐标 


#ico1 {width:容器宽度;height:容器高度;background-position:X坐标 Y坐标}


#ico2 {width:容器宽度;height:容器高度;background-position:X坐标 Y坐标}


#ico3 {width:容器宽度;height:容器高度;background-position:X坐标 Y坐标}


.nav {width:容器宽度;height:容器高度;background-position:X坐标 Y坐标}



(6)拓展思考:



(7)参考文献:


1.百度百科   https://baike.baidu.com/item/css%20sprite/1139316?fr=aladdin


(8)更多讨论:


如何使用百分比来设置雪碧图的background-position?


如果定位用的是百分比话,算法比较特殊。我举个例子:


代码:


background:#FFF url(image) no-repeat fixed 50% -30%;


这个时候图片应该在容器的什么位置呢,算法公式如下:


图片左顶点距容器左顶点的坐标位置为


x:(容器的宽度-图片的宽度)x50%


y:(容器的高度-图片的高度)x(-30%)






得到的结果应用坐标法则,差值如果为负数,百分比为正那么运算结果是负值。如果差值为负数,百分比也为负数,那么运算结果就是正数。总而言之就是这里的运算符合运算法则。把运算的结果带入坐标法则就能得到图片的位置。


比如:容器是width:600px;height:600px;而图片是width:200px;height:200px;


我们用上面的样式,可以得到图片位置为:


x:(600px-200px)*50%


y:(600px-200px)*(-30%)



返回列表 返回列表
评论

    分享到