css sprite技术解析

  说到css sprite技术第一次接触还是在百度站长工具中网站检测时看到到,说这个技术可以减少网站图片请求次数,当时还不是很理解,之后了解了一番,明白了其中的原理,故在此给大家分享一下。
  
 CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言,不高于200KB的单张图片的所需载入时间基本是差不多的,所以无需顾忌这个问题。  加速的关键,不是降低重量,而是减少个数。传统切图讲究精细,图片规格越小越好,重量越小越好,其实规格大小无所谓,计算机统一都按byte计算。客户端每显示一张图片都会向服务器发送请求。所以,图片越多请求次数越多,造成延迟的可能性也就越大。

 CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。
下面我就详细的讲解下他的使用技巧,包你现在不懂的童鞋会有个清楚的全新了解,虽然目前有这样的工具,但是还是要先清楚他的原理,技巧性的来做也会很快速的完成定位,下面我分享加个案例。

首先跟大家说明一点,由于需要定位的背景都是合并在一张图的,所以都是一刀切的,要么是X轴坐标一致要么是Y轴坐标一致,也就有了我下面要讲述的2种类型了。

1。横向定位坐标
横向定位坐标意思就是Y轴坐标固定,它的特点就是每个图标的高度是一致的,通过改变x坐标的位置来改变背景。只需测量每个图标的宽度就可以知道x轴的坐标了。如果你还不知道这个规律,下面我就讲解给你听吧,下面拿我做的2个案例来说事。
效果图:

实际背景图:

那么具体来讲解怎么来定位,这里是改变X坐标来定位。

由于高度都是一样所以Y轴上的坐标都是0或top
这里每个图标我是用一个span做背景的,下面具体分析下代码:
下面是Css  code:

.sharelogo{display:inline-block;*display:inline;*zoom:1;height:46px;background-image:url(../images/shareIcon.jpg);background-repeat:none;}
.facebookLogo{background-position:0 0;width:20px;}
.pinterestLogo{background-position:-20px 0;width:42px;}
.twitterLogo{background-position:-62px 0;width:30px;}/**/
.flickrLogo{background-position:-92px 0;width:130px;}
.youtubeLogo{background-position:-222px 0;width:98px}
.blogLogo{background-position:-320px 0;width:84px;}
.sl{float:left;padding-right:10px;}

他们的背景图片都是公用这一张背景:background-image:url(../images/shareIcon.jpg);
每个元素的背景都不允许重复:即:background-repeat:no-repeat;
读到这里你有发现一个规律,就是每个元素的坐标等于前面元素的坐标值加上宽度。即元素的横向坐标值公式等于。相邻元素的坐标值加上宽度。
pinterestLogo 的值等于facebookLogo的坐标值20px+facebookLogo的宽度20px ;是不是很简单啊,只要你知道元素的宽度就可以,因为横向坐标等必须要给个固定的宽度,所以这一步测量宽度不是浪费时间。希望仔细看源码中坐标值的规律。
不管是横向定位与纵向定位坐标的时候,他们的起始位置都是background-position:0  0;而横向定位的时候高度是固定的,所以每次只需改变X坐标的值就实现了。
比如facebook的logo是起始位置的图标,所以它的坐标值是0,0,就实现了它的定位。
那么pinterest的logo是它的下面一个,就是从facebook的宽度负值算起。由于facebook的宽度是21px;所以pinterest的logo坐标就是background-position:-20px 0; 下面以此类推twitterLogo 是pinterstLogo的下面一个,那么就是用pinterstLogo的坐标值加上pinterstlogo的宽度,就得到了twitterLogo的坐标位置了。就是-(20px+42px)=-62px;即twitterLogo 的坐标为.twitterLogo{background-position:-62px 0;width:30px;}读到这里你有发现一个规律,就是每个相邻元素的坐标等于前面元素的坐标值加上它前面元素的宽度。即元素的横向坐标值公司等于。相邻元素的坐标值加上它的宽度。好了下面讲第二种方案了。


实际背景图片:


ul{margin:0;padding:0;float:left;width:32px;}

ul li{float:left;list-style-type:none;width:32px;background-image:url(image/bg.jpg);background-repeat:none;margin:10px 0;}
.f{background-position:0 0;height:32px;}.p{background-position:0 -32px;height:20px}/*Y轴坐标等于起始位置的高度 即:-(0+32)*/
.fr{background-position:0 -52px;height:32px;}/*等于前面元素的Y轴坐标加上前面元素的高度,即:-(32+20) */
.h{background-position:0 -84px;height:32px;}/*等于前面元素的Y轴坐标加上前面元素的高度*即:-(52+32)*/
.t{background-position:0 -116px;height:32px;}/*等于前面元素的Y轴坐标加上前面元素的高度,即:-(84+32)*/

3.宽度和高度都相等的时候,那是最好不过了,直接做乘法,相信你的数学能力一家过了小学3年级了,Ok,还是来分享下吧。

1.宽度高度想等的情况下等位X轴坐标,这种情况通常都出现在一组按钮下,鼠标滑过和点击时候的背景改变。这种情况我也总结出来了,有公式:X轴坐标=-n(起始位置+宽度).其中n值从0开始。即所有的起始位置的坐标都是0,0开始起。下面依次类推。

比如你现在所要定位的元素是第3个,假设我们这里的图标的宽度为30px.那么他的X轴坐标就等于。x=-3*(0+30px);Y轴的坐标=-n(起始位置+高度)

比如你现在所要定位的图标为第6个位置,假设这里的高度也是32px;那么他的Y轴坐标就是Y=-6(0+32px)=-192px.  

到此,大家应该也明白CSS Sprite是一项什么技术,以及如何运用了。
最后送一点福利给大家, CSS 图片拼合生成器

CSS 图片拼合生成器(英文名为css sprite generator),是一款支持多语言的免费CSS图片拼合生成器,目前支持18种语言(包括简体中文)。该在线工具非常易用,你只需要上传你需要拼合的CSS图片压缩包,设置重复图片处理办法,调整原图大小,拼合图片输出设置参数,CSS输出选项即可生成CSS拼合图片和CSS文件。

css sprite generator是前端设计师高效率的在线工具首选。

css sprite generator官方网站:spritegen.website-performance.org

学习前端重在分享,希望大家把好的文章相互分享,共同学习,共同进步!

时间: 2024-08-07 19:05:24

css sprite技术解析的相关文章

使用 CSS sprite 的好处和坏处

原文:CSS Sprites: Useful Technique, or Potential Nuisance? 译文:CSS Sprites:鱼翅还是三鹿? 无处不在的 CSS sptites - 为数不多的几个可以直接跳过"流行"这个过程,而可以马上并且牢牢地跻身于最佳 CSS 实践之中的几个技术之一.虽然它真正流行是在 A List Apart 解释并认可这个技术之后,但是早在 2003 年 7 月份,Peter Stanicek 就已经开始谈论它了. 目前大多数的开发人员对这个

css sprite原理优缺点及使用示例介绍

CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问 该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了.对于当前网络流行的速度而言,不高于200KB的单张图片的所需载入时间基本是差不多 的,所以无需 顾忌这个问题. 利用CSS Sprites能很好地减少了网页的http请求,从而大大的提高了页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因: CSS

谈谈CSS Sprites技术及其优化

CSS Sprites 技术对于广大的前端工程师来说应该是一点也不陌生.这个被国内开发者昵称为CSS精灵 CSS雪碧的家伙到底解决了什么问题,我们又怎样合理使用这个技术呢?下面让我们详细的聊聊. 在大家还在拨号上网的"远古时期",由于网速的限制,页面开发者都喜欢把网页里面的图片字节数控制的非常小,往往在一个图片文件夹里散落着n多的小碎图.随着网络技术的发展,网速的提升,大家越来越重视页面的加载速度,页面效率问题,过去的那些小图便成为了前端开发者的眼中钉,因为每加载一张图片都会产生一次浏

CSS 继承深度解析

本文讲的是CSS 继承深度解析, 我酷爱模块化设计.长期以来我都热衷于将网站分离成组件,而不是页面,并且动态地将那些组件合并到界面上.这种做法灵活,高效并且易维护. 但是我不想我的设计看上去是由一些不相关的东西组成的.我是在创造一个界面,而不是一张超现实主义的照片. 很幸运的是,已经有一项叫做 CSS 的技术,就是特意设计用来解决这个问题的.使用 CSS,我就可以在 HTML 组件之间到处传递样式,从而以最小的代价来保证一致性的设计.这很大程度上要感谢两个 CSS 特性: 继承, 层叠 (CSS

CSS开发框架技术OOCSS编写和管理CSS的方法

文章简介:今天最流行的CSS开发框架技术当属OOCSS,尽管还有其他类似的技术存在,如BEM.这些方法试图对CSS采用面向对象的编程原则.尽管样式语言和面向对象的软件设计原则在概念之间存在一定的问题,这些微妙的东西对于一个欠缺经验的开发人员来说可能不会立即显现出来.最令人不 公认的拥有一个编写和管理CSS的方法比什么都要更好.尽管如此,一些开发人员的实践是不利于语义化质量和长期的可维护性.我们要讨论一些被提倡的"CSS框架方法"的问题和作为Web开发人员,我们如何可以更好的解决这些问题

CSS Sprites技术

核心提示:随着Web设计向着精致.巧妙的方向发展,设计师们开始考虑使用非Javascript的方 式制作鼠标滑过.悬停菜单的效果,这时CSS Sprite应运而生. CSS Sprites简介 通常被意译为"CSS图像拼合"或"CSS贴图定位".CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟,阿里巴巴各子公司的网页中到处都可发现css sprites 的影子.但CSS Sprites并不是什么金科玉律,但在很多情况下,它有着一定的优势,

CssGaga教程:AutoSprite(CSS Sprite Generator)

文章简介:CssGaga – AutoSprite(CSS Sprite Generator). 市面上有一些sprite生成器,要么是要人工调整图片位置,要么要拷贝粘贴代码,用起来总是觉得不够爽,CssGaga使用了不同的思路,希望能解放你的双手:) 使用时选中AutoSprite即可开启此功能,下面通过一个例子来说明: 比如HTML: <s class="i1"></s><s class="i2"></s><

CSS Sprites技术及图片优化

关于CSS Sprites技术的优化我们能做到多少,能减多少的请求数量.这并且不是单方面能做到的,一切取决于XHTML.CSS.CSS Sprites图片之间的配合.现时为止没有绝对优化的做法,这也是我在项目中经常衡量CSS Sprites图片与XHTML关系,如:<一张背景实现自适应九宫格>,以下总结了图片切割术与图象优化的一些方法. 图片优化 对于非动画的GIF更建议使用PNG8因为它同样能做到一样的效果,而且能为你节省10%-30%的文件体积. Photoshop相比起Fireworks

Photoshop另类的手机主题设计思路和技术解析

  这篇教程是向大家带来Photoshop另类的手机主题设计思路和技术解析,教程很不错,推荐到网管之家,喜欢的朋友来学习吧!   教程结束,以上就是Photoshop另类的手机主题设计思路和技术解析,希望对大家有所帮助! 分类: PS图片处理