买靠谱源码,找靠谱技术,就来芝麻通!
当前位置:芝麻通 > DIV+CSS教程 > CSS Sprites详解

CSS Sprites详解

CSS Sprites并没有一个确定的中文翻译,通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟。CSS Sprites并不是什么金科玉律,但在很多情况下,它有着一定的优势,最重要的是它可以减轻服务器的负载,提高网页加载速度。

什么是CSS Sprites?

“Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏、视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要 同时保持画面流畅。“Sprite”就是这样一种技术,它将许多图片组合到一个网格上,然后通过程序将每个网格的内容定位到画面上。

Sprite被定位到一副静态图片上,并且通过简单的程序或硬件即可正确定位到画面上,一幅幅图片就像是被“变”出来的,他们并没有单独占用内存,所以被取名为“Sprite精灵”。

时间进行到2000年,Web设计向着精致、巧妙的方向发展。设计师们开始考虑使用非Javascript的方 式制作鼠标滑过、悬停菜单的效果,这时CSS Sprite应运而生,它基于同上文提到的游戏Sprite同样的原理,并且使用CSS更容易控制,很快的流行开来。

2004年,Dave Shea 提出了一种使用CSS控制组合图片的方案 ,将许过小的图片组合在一起,使用css定义背景属性,来控制图片的显示位置和方式。

当页面加载时,不是加载每个但以图片,而是一次加载整个组合图片。这是一个了不起的改进,它大大减少了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所需要的时间延迟,使效果更流畅,不会停顿。

CSS Sprites 的优点:

关于这项技术,最大的好处有下面几个:

1,减少网页加载时的http请求数。这种情况貌似只适用于“初次加载”之类需要重新从服务器端获取资源的情况。但无论怎样,对于一个流量较大或者频繁被“重新加载”的网页,还是很有用的。

2,给链接做背景图时,可以防止a:hover 时再载入背景图片而导致的背景“闪烁”。个人觉得这一点在提升用户体验具有一定的意义。

3,图片易于管理。前提是拼合的图片有一定的规律。如下图,就是一张“网站全部使用的按钮背景”的图片。这样可以很直观的看到网站中所有的按钮样式。(我个人喜欢按照图片的一定“属性”来拼图片,一张图片都是icon或者都是btn背景…这样就可以顺便管理图片,且有一定规律可循的图片,比较容易排列在一起。当然,有些时候,也会选择按照“模块”来拼合一张图片,这样在模块化的结构中,就产生了一个简单的逻辑:调用一个模块,则调用上面的背景图。否则,这张图片就不被调用。可以有效的防止只用了一个小小的图标,就调用了整个大图片的问题。)

css sprites的弊端:

CSS Sprites需要精确的背景图片定位, 比较让人头疼。

相对于减少了多次HTTP请求的优点, 却增加了一次性一个大的HTTP请求的缺点。

css sprites 适用范围:

1,需要通过降低http请求数完成网页加速。

2,网页中含有大量小图标。或者,某些图标通用性很强。

3,网页中有需要预载的图片。主要是a与a:hover背景图这种关系的。如果a与a:hover的背景图分别加载,那么,就会出现用户鼠标移到某个按钮上,按钮的背景突然消失再出来,产生“闪烁”,如果按钮文字色与大背景相同或相近,就更囧了,有可能让人产生按钮“消失”了的错觉。

需要满足的条件

在网页中,通过这项技术拼合在一起的图片最好有一项规律。定宽或者定高。最好是宽高都能定下来。需要平铺的图片,显然不适合sprite。

如上图的buttons,就属于定宽定高的情况。

定宽情况下,则可平行排列若干小图片。定高,则纵向排列小图片。

若背景既不定宽,也不定高情况下强行使用css sprites技术,则容易产生“不应该出现的图片出现在页面上”的状态。若是“强行定高”,也将非常不利于日后的维护。

实现方法:

首先将小图片整合到一张大的图片上,然后根据具体图标在大图上的位置,给背景定位。

background-position:8px -95px;【分别为X轴,Y轴】 
定位从左上角开始,X轴往右为正数,Y轴往下为负数

本文属原创,转载请注明原文:https://zhimatong.com/jiaocheng/css/87.html

返回
顶部