用CSS Sprites让网站再加速
我对于blog的速度有着变态的需求. 网站速度与HTML请求数目有很直接的关系,所以我一直没有在网页上放过多的背景图片——注意这里有个网页加速的小技巧,对于网页上固定位置的图片,应该尽量使用CSS背景图片,而不要用img标签嵌入。
为减少页面上的背景图片数量,嵌入式图片是一个好主意,data: URL scheme可以让你把图片信息直接嵌入在CSS语句中,理论上而言这是最好的解决方案。可惜目前IE不支持!又是万恶的IE。下面是效果图(Firefox有效):
另外一个就是CSS Sprites了,很久以前就见到过,不过操作比较复杂,所以一直没有用。今天,看到一个更详细的介绍,而且Yahoo和Facebook都在用这种方式,见这里和这里。我也决定紧跟一下潮流。
CSS Sprites就是将网页上所有的背景图片都放在一张大图片上,更详细的介绍
在需要用到图片的时候,现阶段是通过CSS属性
background-image组合background-repeat,background-position等来实现......我们的主角是,你一定猜到了,就是background-position。通过调整background-position的数值,背景图片就能以不同的面貌出现在你眼前。其实图片整体面貌没有变,由于图片位置的改变,你看到只该看到的而已。就好比手表上的日期,你今天看到是21,明天看到是22,是因为它的position往上跳了一格。所以你也大概了解到,CSS Sprites一般只能使用到固定大小的盒子(box)里,这样才能够遮挡住不应该看到的部分。
比如本站的所有背景图片已经整合成单独一张,然后通过CSS定义背景:
.bloglines, .zhuaxia, .google, { background-image: url(images/b.gif); } .bloglines { background-position: 0 -216px; } .zhuaxia { background-position: 0 -332px; } .google { background-position: 0 -448px; }
上面这一段代码用同一张背景图片生成了Google,Zhuaxia,Bloglines的订阅图片。效果可见右侧栏的订阅区,与各自指定图片背景效果完全一样。
上面最麻烦的一个地方在于如何生成大图片,利用PhotoShop的Merge功能可以把图片整合在一起,但每个小图片在大图片的位置参数需要一个一个去弄,比较麻烦,但是比较自由。利用CSS Sprites Generator,一切都自动搞定。这个网站支持上传图片的ZIP压缩包,然后生成一张大图片,已经以图片文件名为类名的CSS语句,自动给出每个图片对应的位置。另外还可以设置各个小图片之间的间隔,以适应内容的适度拉伸。
btw,提一下一个APACHE的mod_expires模块,这个模块可以要求服务器缓存制定类型的文件。比如下面的语句(写入.htaccess文件)要求缓存图片, css, js等一个月:
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 ExpiresByType application/x-shockwave-flash A2592000 ExpiresByType text/css A2592000 ExpiresByType application/x-javascript A2592000 ExpiresByType text/html A600 </IfModule>
不过似乎deamhost和bluehost都没有这个模块,但阅微堂所在的CPH服务器是有的...
速度的确很快哦!~ 不知道您的模板是否可以分享
阅微堂的模板发布过,见这里
不过那个模板发布的时候比较急,而且比较忙,一直也没怎么更新,最好看着点用...
嘿嘿,看来偶还是比较先进的,能尽量一张图片我都用一张图片,然后通过调整位置来实现
你这里的大图片我也收下了,嘿嘿
我去你那里看了一下,没有用到这个技术呀。
现阶段技术上的一个缺点是大图片的合成还是不太方便。那个大图片生成网站生成的图片上小图片之间的间隔都是固定的,导致图片特别长,有2000多px。如果有东西可以手动调整各小图片之间的位置就好了。
我blog上没有用,其他地方用的,之前也是看到别的网站这样用才想到这样的好处的,缺点也是明显的,就是设计的时候,position难以计算
貌似也不是新技术了,只不过好像才刚火起来。用了这个方法你这里的图标可以放多些了,呵呵。
PS:你的图标间隔搞太大了,紧凑些体积会更小,不至于大到 8K
间隔太小不好设置位置,反正有得必有失
您好,这篇文章已经收录在站客网,地址:http://www.zhankr.com/SrcShow.asp?Src_ID=37
继续努力,谢谢!
谢谢分享
非常有用的信息哇
[...] CSS Sprites,那么一定要好好这篇文章),紧接着 Zhang-Zi [...]
虽然明白原理,但是还是不太好操作..原因是我根本不懂代码!
[...] 参考:阅微堂 [...]