CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言,不高于200KB的单张图片的所需载入时间基本是差不多的,所以无需 顾忌这个问题。
加速的关键,不是降低重量,而是减少个数。传统切图讲究精细,图片规格越小越好,重量越小越好,其实规格大小无所谓,计算机统一都按byte计算。客户端每显示一张图片都会向服务器发送请求,所以,图片越多请求次数越多,造成延迟的可能性也就越大。
CSS Sprites原理
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。
CSS Sprites优点
利用CSS Sprites能很好地减少了网页的http请求,从而大大的提高了页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因;
CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。
CSS Sprites缺点
诚然CSS Sprites是如此的强大,但是也存在一些不可忽视的缺点
在图片合并的时候,你要把多张图片有序的合理的合并成一张图片,还要留好足够的空间,防止板块内不会出现不必要的背景;这些还好,最痛苦的是在宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂;
CSS Sprites在开发的时候比较麻烦,你要通过photoshop或其他工具测量计算每一个背景单元的精确位置,这是针线活,没什么难度,但是很繁琐;幸好腾讯的鬼哥用RIA开发了一个CSS Sprites 样式生成工具,虽然还有一些使用上的不灵活,但是已经比photoshop测量来的方便多了,而且样式直接生成,复制,拷贝就OK!
CSS Sprites在维护的时候比较麻烦,如果页面背景有少许改动,一般就要改这张合并的图片,无需改的地方最好不要动,这样避免改动更多的css,如果在原来的地方放不下,又只能(最好)往下加图片,这样图片的字节就增加了,还要改动css。
CSS Sprites非常值得学习和应用,特别是页面有一堆ico(图标)。总之很多时候大家要权衡一下利弊,再决定是不是应用CSS Sprites。
CSS Sprite的使用
有几篇关于CSS Sprites的文章,基本上把其原理和机制说明得很清楚。
What Are CSS Sprites?
How to create CSS sprites
Creating Rollover Effects with CSS Sprites
Building a Dynamic Banner with CSS Sprites
High Performance Web Sites中关于CSS Sprites的内容3.2. CSS Sprites
CSS Sprite的例子
1. 图片限制(Image Slicing)[1]
典型如文本编辑器,小图标特别多,打开时一张张跑出来,给用户的感觉很不好。如果能用一张图解决,则不会有这个问题,比如百度空间、163博客、Gmail都是这么做的。
Image Slicing’s Kiss of Death
http://www.alistapart.com/articles/sprites
2. 单图转滚(Single-image Rollovers)[1]
触发切换图片的需求,传统方案得重新请求新图片,因为网络问题经常造成停留或等待。如果能把多种状态合并成一张图,就能完美解决,然后再使用背景图技术模拟动态效果。
ColorScheme Ratings
http://demo.rexsong.com/200608/colorscheme_ratings/
3. 延长背景(Extend Background Image)[1]
如果图片的某边可以背景平铺无限延长,则不需要每个角、每条边单独搞出来,图片能少一个就少一个。其实,这个理论还可以扩展到四角容器里,好处是能大大简化HTML Structure。
Extend Background Image
http://demo.rexsong.com/200705/extend_background_image/
综合案例
Google Korea(1和2技巧)
http://demo.rexsong.com/200705/google_korea/
CSS Menus(2和3技巧)
http://demo.rexsong.com/200705/css_background_menus/
CSS Sprites的问题
由于IE6存在的background的flicker问题IE6/Win, background image on , cache=‘check every visit’: flicker!,有人针对此问题提出了解决方案Fast Rollovers Without Preload
关于IE6的flicker问题,fivesevensix.com上有一篇很不错的研究文章Minimize Flickering CSS Background Images in IE6
另外:brunildo.org的CSS tests and experiments是关于css各种功能不错的参考手册和测试工具。
图片优化
1. 对于非动画的GIF更建议使用PNG8因为它同样能做到一样的效果,而且能为你节省10%-30%的文件体积。
2. Photoshop相比起Fireworks,导出同等质量的PNG图片,体积会稍大。而Fireworks虽然做了相应压缩优化,但没有达到最优秀的压缩。
3. 我所知的设计软件,对于PNG图片的处理都没做到最优秀的压缩,图片体积还有一定的压缩空间。可以尝试使用下面介绍的”图像优化工具” 做无失真的压缩优化。
4. 图片体积及尺寸方面,建议体积保持在100K以内(较为符合国情最佳请求SIZE),size为800px(最佳尺寸)。(从某权威人事中得知,具体无从考证)
CSS Sprites图片切割术
1. CSS Sprites图片顺序合图片由上至下、左至右添加。而background-position一般采用数字组合形式定位,这样能减少维护带来的不必要麻烦。
2. 不建议CSS Sprites图片中保持一定的间距,因为文件size增大而增加文件体积。
3. CSS Sprites图片中把颜色较近或相同的组合在一起可以降低颜色数,因为少色数的图片文件体积会相对的小。
4. size相同的CSS Sprites图片中留有较大空隙,某程度上多数情况会增大了体积,所以CSS Sprites的图片不要有空隙。
5. 在size相同的CSS Sprites图片中,垂直排列的图片会比水平排列的文件体积要大。
6. 在CSS Sprites图片中,水平排列的图片会比垂直排列的文件体积要大。
7. 图片对等合并:应用CSS Sprites图片时,适当地把对等相同的图像合并,以节省空间及减少体积。
8. 区分开不需要合并的图像:如当前用户确定只显示一种状态或一个级别时,不必要把其他的级别或状态的图片合并。
9. 黄金切割位:在CSS Sprites图片的最右或左边为最灵活动位置最适宜摆放文本前的icon,因此不会受到其它CSS Sprites图片干预,也不需要预留一定的行宽。
补两条
10. 有的说定位时避免使用bottom或right等,当使用CSS sprite的时候,只用background-position: bottom -300px或background-position: right -200px;非常容易。这刚开始的时候是可行的,但是问题是,当你在宽度上或高度上扩展相关sprite图片的时候,原先设置的位置可能是错的,因为那个图片已经不再Sprite图片的底部或右部了。使用确切的位置来避免这个问题。
其实我感觉一般情况宽度图不片不会改应变,用RIGHT和 LEFT还是挺方便的,但从整体考虑,升级了。改版的。图片宽度还是有可能会改变的。必竟开始时做太宽也没什么好处,还是浪费很多空间。就是多费点时间去对坐标,最好还是不用RIGHT 和 LEIFT的了。
12 有的说竟给每个图片足够的空间
就像你在本文顶部的实例图片看到的那样,那些小图片都被预留了足够的空间。为什么不把他们塞到一块来让sprite图片更小呢? 因为使用这些图片的元素通常都会有大量的内容而且可能会需要扩展的间距,以至于其它图片不会意外出现。
这个我支持,必竟多空点,也占不不了多大空间,如何要追求完美,那就慢慢调吧。费了劲了。在加上浏览器兼容问题,最好还大多空间。小误差也忽略了。
相关推荐
**CSS Sprite原理** CSS Sprite的核心在于合并图片资源,将原本分散的图片整合到一张大图中。然后通过设置CSS的`background-image`属性引用这个大图,并利用`background-position`来定位图片在大图中的确切位置。...
其中,一种常见的优化策略就是使用CssSprite技术,也就是我们常说的“雪碧图”。雪碧图是一种将多个小图标合并到一张大图中,然后通过CSS定位来显示需要的图标的方法。这样做的好处是可以减少HTTP请求的数量,从而...
2. **不适合动态内容**:对于需要动态改变的图像(如用户头像、加载状态等),使用CSS Sprite并不合适,因为它们无法通过CSS定位来动态切换。 3. **不适合高分辨率屏幕**:在高分辨率或Retina屏幕下,如果未提供高清...
CSS Sprites是一种优化网页加载速度的技术,通过合并多个小图像到一张大...随着技术的发展,例如CSS Grid和Flexbox等布局技术,以及对CSS变量的支持,CSS Sprites的使用变得更加灵活,同时也降低了管理和维护的复杂性。
在页面布局方面,作者探讨了固定宽度布局和变宽度布局的优缺点及实现方法,使读者能够适应不同屏幕尺寸的网页设计需求。同时,圆角设计、使用Sprite技术制作高级网页组件等技巧也得到详细介绍,这些都是提升网页视觉...
**四、CSS Sprites的优缺点** 优点: 1. **减少HTTP请求**:通过合并多个图像到一个文件,可以显著减少页面加载时间,提高页面性能。 2. **节省带宽**:尽管合并后的文件可能更大,但由于减少了HTTP请求,总体上...
现代Web开发中,还出现了其他替代方案,如CSS Sprites的SVG符号(SVG Sprites)和图标字体(Icon Fonts),它们也有各自的优缺点。 总的来说,CSS精灵图压缩工具是Web开发者优化网站性能的利器之一,虽然随着技术的...
以上是针对前端开发面试题集锦中的关键点进行的详细解答,涵盖了HTML语义化、DOCTYPE声明的作用、SEO策略、CSS引入方法以及CSS Sprite技术的优缺点。掌握这些知识点对于前端开发者来说至关重要,不仅可以提升面试...
同时,需要总结这两种技术的优缺点,如滑动门易于实现动态效果,但可能导致代码复杂;CSS精灵提高了加载速度,但制作过程可能较为繁琐。 总的来说,滑动门和CSS精灵是前端开发中必不可少的技能,理解它们的工作原理...
为克服这些挑战,可以使用自动化工具如SpriteSheet Generator或Image Sprites等,它们可以帮助自动生成CSS Sprites和对应的CSS代码,减轻手动操作的负担。 总的来说,CSS Sprites是前端开发中一种有效的图片优化...
精灵图的使用主要基于以下原理:在HTML中,我们通常通过CSS的`background-image`、`background-repeat`和`background-position`属性来设置背景图片。在CSS Sprites中,我们将多个图标或装饰性图像合并到一张大图中,...
Sprite图的使用原理是利用CSS的`background-image`、`background-repeat`和`background-position`属性。将需要的图标或装饰性图像整合到一张大图上,然后通过调整`background-position`的值来显示特定部分的图像。...
5. **其他解决方案**:除了Base64编码,还可以使用CSS Sprite、CDN(内容分发网络)或者使用现代的HTML5 `blob`和`URL.createObjectURL()` API来处理图像资源,但这些可能不适用于IE7及以下版本。 压缩包内的...
【新闻图片轮回显示】是一种常见的网页设计技巧,用于在网页上展示一组图片并自动进行循环播放,常用于新闻网站、产品...而对于资深开发者,了解不同技术的优缺点和演进历程,有助于做出更加适应时代需求的开发决策。
- **考量**: 不同数据格式有各自的优缺点。 - **推荐**: 对于大量数据传输,优先考虑JSON而非XML。 - **优化**: 适当使用二进制格式(如protobuf)进一步压缩数据。 #### 17. 合适地设置背景图像 (Set Background ...
6. 图像压缩算法:如JPEG、PNG的压缩原理和优缺点。 【压缩包子文件的文件名称列表】"images-main" 表明这可能是一个主图像文件夹,包含所有主要的或核心的图像资源。这可能是一个软件项目的核心部分,或者是网站...
再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7...