CSS Sprites技术不新鲜,早在2005年 CSS Zengarden 的园主 Dave Shea 就在 ALA 发表对该技术的 详细阐述 。原先只在CSS玩家之间作为一种制作方法流传,后来出来个 14 Rules for Faster-Loading Web Sites , 技术人员之间竞相传阅,其中第一条规则Make Fewer HTTP Requests就提到CSS Sprites。于是这个小妖精就火了起来,甚至出现了在线生成工具,势不可挡也。近来国内很多blog都提到CSS Sprites,最著名的例子莫过于 http://www.google.co.kr/  下方的那几个动画。最新发布的YUI中,也是使用到CSS Sprites,几乎都有的CSS装饰图都被一个 40×2000的图 包办。社交大站Facebook最近也使用了一个 22×1150的图片 承担了所有icon.一时间,CSS Sprites无处不在。

原理

我们知道,自CSS革命以降,HTML倾向于语义化,在一般情况下不再在标记里写装饰性的内容而是把呈现的任务交给了CSS。GUI是缤纷多彩的,少不了各种漂亮的图来装点。新时代的生产方式是,在HTML布满各种各样的钩子(hook),然后交由CSS来处理。在需要用到图片的时候,现阶段是通过CSS属性background-image组合background-repeat, background-position等来实现(题外话:为何我提现阶段,因为未来浏览器若支持content则又新增另外的实现方法)。我们的主角是,你一定猜到了,就是background-position。通过调整background-position的数值,背景图片就能以不同的面貌出现在你眼前。其实图片整体面貌没有变,由于图片位置的改变,你看到只该看到的而已。就好比手表上的日期,你今天看到是21,明天看到是22,是因为它的position往上跳了一格。所以你也大概了解到,CSS Sprites一般只能使用到固定大小的盒子(box)里,这样才能够遮挡住不应该看到的部分。

我们使用YUI的sprite.png举个例子,假如我们有这么一段代码,max代表最大化,min代表最小化,我们需要给它们配上相应的漂亮图片(这样我们的网站才能够吸引人,才可以卖钱,才可以到佛罗里达晒太阳:D):

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

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

.min, max {
  width:16px;
  height:16px;
  background-image:url(http://developer.yahoo.com/yui/build/assets/skins/sam/sprite.png);
  background-repeat: no-repeat; //我们并不想让它平铺
  text-indent:-999em; //隐藏文本的一种方法
}

效果如下:

最大化
最小化

最大化最小化
我们看到一团灰,没错,因为我们还没有指定background-position,默认为 0 0,可以看下 sprite.png , 处于这个位置正是灰块。好了,我们要找到代表最大化的加号和代表最小化的减号的位置找出来。经过测量,最大化按钮位于Y轴的350px处,最小化按钮位于Y轴400px处。想一想我们如何才能让它们能够显示出来呢,明显,要向上提升sprite.png,得到代码如下:

.max {
  background-position: 0 -350px;
}
.min {
  background-position: 0 -400px;
}

耶,我们成功了:

最大化
最小化

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

优点

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

缺点

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

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

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

总结

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

推荐阅读

  • CSS Sprites: Image Slicing’s Kiss of Death
  • 14 Rules for Faster-Loading Web Sites
  • High Performance Web Sites

本文链接:http://www.blueidea.com/tech/web/2007/4967.asp 

转载于:https://www.cnblogs.com/beijia/archive/2011/08/01/sprites.html

CSS Sprites (转)相关推荐

  1. css 在线生成器,CSS Sprites在线生成器

    一款优秀的主题,不仅仅需要美观的设计,还需要最大的各项优化,最大可能地优化主题中用到的图片,也就变得十分重要,使用CSS Sprites技术是比较常见的手段,很多优秀的主题都很注重这一点.跟版模板网在 ...

  2. css中图片整合的使用,CSS Sprites:图片整合技术详细案例

    CSS Sprites 的目的就是通过整合图片,减少对服务器的请求数量,从而加快页面加载速度.介绍了CSS Sprites技术的实现方法,优点和缺点.最后通过实例CSS Sprites技术制作导航栏演 ...

  3. CSS sprites

    CSS Sprites 1.简介 CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许将一个页面涉及到的所有零星图片都包含到一张大图中, 利用CSS的"back ...

  4. CSS Sprites (CSS精灵)

    CSS Sprites原理CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的"background-image","backgroun ...

  5. CSS Sprites图片拼合生成器实现思路

    在对WEB前端做性能优化时,为了有效减少http请求数,通常会把Web用到的图片合并成一张大图,采用CSS的background-position 属性,控制页面的图片显示. 问题是,目前虽然有这么一 ...

  6. CSS Sprites图片合并

    CSS Sprites的目的就是通过整合图片,减少对服务器的请求数量,从而加快页面加载速度. 实现方法: 首先将小图片整合到一张大的图片上 然后根据具体图标在大图上的位置,给背景定位. .icons{ ...

  7. 使用CSS sprites减少HTTP请求

    sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉很简单的东西,作用却很大 神马是CSS 小妖精 CSS sprites是指把网页中很多小图片(很多 ...

  8. 每日一个css效果之css sprites

    为什么要是用css sprites CSS Sprites are the preferred method for reducing the number of image requests. Co ...

  9. html css精灵,谈谈CSS Sprites(css精灵)

    CSS Sprites在国内很多人叫css精灵,其实这个技术不新鲜,这个技术老到什么程度呢,我不敢确定,但是我看到最早的关于CSS Sprites是在Dave Shea的<CSS Sprites ...

最新文章

  1. Go 知识点(10) — 子协程能否使用主协程变量
  2. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流
  3. 蚂蚁森林合种计划(2020.10.31,7天有效,每周更新)
  4. 利用ISA Server 2006服务器阵列构建高性能、高可靠的企业防火墙
  5. docker远程访问TLS证书认证shell
  6. 在Windows Server 2008上创建 简单卷
  7. c++ pat 乙级 ---1004 成绩排名
  8. html5列表菜单特效,HTML5 SVG汉堡包菜单按钮分段动画特效
  9. UE4 多线程使用tip
  10. Windows进程系列(2) -- Svchost进程
  11. mysql游标遍历中sql语句出现异常_MySQL中的异常处理,游标
  12. python scrapy框架基如何实现多线程_Python实现在线程里运行scrapy的方法
  13. 搭建自己的博客(二十七):增加登录注册以及个人资料按钮
  14. Model-Based RL前沿追踪——以无法为有法,以无形为有形
  15. 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建
  16. 为什么要进行特征归一化/标准化?
  17. 关于返回二维数组排序后序号数组的问题求解
  18. 计算机硬件课题,计算机硬件技术基础免试课题.pptx
  19. mysql 5.6 修改默认字符集_mysql5.6修改默认字符集
  20. Ajax+PHP快速上手及简单应用

热门文章

  1. linux中wget命令
  2. EMC CLARiiON 的 Alignment offset
  3. msyql 字段说明
  4. Javascript Java C++系列
  5. L2.五.input语句
  6. 搭建本地YUM源服务器
  7. 创建 OVS vlan101 并部署 instance - 每天5分钟玩转 OpenStack(139)
  8. 《JavaScript 闯关记》之函数
  9. 分享一个自己用的Objective-C的Http接连类
  10. 独白:我为什么要从BTC转向支持BCH?