将多个图片整合到一张图片中再用CSS_进行网页背景定位

时间:2022-12-25 19:55:14
 众所周知,减少网站加载时间的最有效的方式之一就是减少网站的HTTP请求数。实现这一目标的一个有效的方法就是通过CSS Sprites——将多个图片整合到一个图片中,然后再用CSS来定位。

CSS Sprites 的目的就是通过整合图片,减少对服务器的请求数量,从而加快页面加载速度。

将多个图片整合到一张图片中再用CSS_进行网页背景定位

实现方法:

首先将小图片整合到一张大的图片上,为了简单化,可以把多图放在同一列上,这样就可以把x轴定义为0。

然后根据具体图标在大图上的位置,给背景定位。background-position:-8px -95px;

例子:

我们使用上图中的auther.gif作为背景时,如果代码如下:

<div class="max">最大化</div>

这两个class都使用同一个图片:

.max {

width:16px;

height:16px;

background-image:url(/images/css-sprites.gif);

background-repeat: no-repeat; //我们并不想让它平铺

text-indent:-999em; //隐藏文本的一种方法

}

效果都只能得到上图中的tag_icon.gif中的图为背景,根本无法得到我们需要的背景。因为我们还没有指定background-position,默认为 0 0,可以看下上图,刚好是tag_icon.gif图。好了,我们要找到代表auther.gif的图在大图中的位置找出来。经过测量,按钮位于Y轴的350px处,按钮位于x轴50px处。想一想我们如何才能让它们能够显示出来呢?明显得到代码如下:

.max {

background-position: 50 -350px;

}

耶,我们成功了:

(注意:为了举例的方便,本例子直接在HTML内置样式,切勿在实践中的非特殊情况使用这种方式)。

优点

我们从前面了解到,CSS Sprites为什么突然跑火,跟能够提升网站性能有关。显而易见,这是它的巨大优点之一。普通制作方式下的大量图片,现在合并成一个图片,大大减少了HTTP的连接数。HTTP连接数对网站的加载性能有重要影响。

缺点

至于可维护性,这是一般双刃剑。可能有人喜欢,有人不喜欢,因为每次的图片改动都得往这个图片删除或添加内容,显得稍微繁琐。而且算图片的位置(尤其是这种上千px的图)也是一件颇为不爽的事情。当然,在性能的口号下,这些都是可以克服的。

由于图片的位置需要固定为某个绝对数值,这就失去了诸如center之类的灵活性。

前面我们也提到了,必须限制盒子的大小才能使用CSS Sprites,否则可能会出现出现干扰图片的情况。这就是说,在一些需要非单向的平铺背景和需要网页缩放的情况下,CSS Sprites并不合适。YUI的解决方式是,加大图片之间的距离,这样可以保持有限度的缩放。

总结

性能压倒一切。CSS Sprites是值得推广的一种技术。尤其适宜用于FIR,比如固定大小的icon替换。为保持兼容性,图片中的各个部分保持一定的距离是一种不错的做法。