css sprites之img sprites
May 5th
最先听到img sprites这个词汇是在D2上,口碑网的工程师提出这样一个理论:
在浏览器渲染的过程中,img是顺序加载的,而background是最后加载的,所以会导致背景载入延迟,给用户的体验不好。
于是他想了个办法,把logo加入css sprites的图片,然后用img来引用它,用position的方法来定位。从而让这张图片事先加载,解决背景载入延迟问题。
事实上我在以前就看到过这样的案例,google地图的tips就是用这个方法。
不过现在口碑网并不使用这个方法,口碑的logo也换成了独立的了,据说在圈子里说这个方法鸡肋。
我认为可能性大概有如下几点:
1.图片预加载,不过图片巨大,会影响整个网页的加载进度。
2.当用户用右键另存为的方法存取口碑的logo时,存下来的却是整张背景。
另外在ico css sprites中有种方法是:
使用透明的img来当做容器,使用css sprites来定位图案,生成一个img的ico,这样的好处是减少了http请求,而img在布局中非常容易控制。
大家知道,ico可能会存在任何地方,比如一个高30px的title,比如一个高20的list,甚至可以存在于一段文字当中,如此多变的情况,也只有给图案一个独立容器来的保险。
css sprites之布局排法
May 5th
在使用css sprites技术的时候,图案的排法是根据设计稿来设定的。
设计搞意味着你的图案如何留出所需的空隙。
如图,我们还是用网易的图片

大家可能看出了,网易这里图标之间的空隙并不是没有道理的,因为设计稿中设定了这么大的间隙。
另外,如果这里你给图标一个额外的容器来陈放,那么你也可以使用紧凑型来布局,当然这样做并不语义,而且增加了标签。
从淘宝、网易的图片可以看出,一般列表符号都放在最右侧,例如网易的新闻列表连接。
事实上一张css sprites制作的图片,四个边都是很重要的位置,特别是左右两侧,例如图案在图片的右侧,那么你的容器可以把图案放在容器左侧,右侧则可以无限延伸,反之亦然,当然这里背景是不能循环的,否则在图片左侧的图案会跑到容器上去。
这就是为什么前面看到qzone的ico图片是竖排的,因为ico右侧往往会跟上文字,这样右侧可以无限延伸的优势就可以体现出来了。
css sprites基础指南(二)
May 5th
在网页中,背景循环可分为四类:
1.横向循环
2.纵向循环
3.横纵向循环
4.不循环
一般在css sprites中,横纵向循环的背景是不存在的,更多的是使用不循环或者单向循环。
另外,在一张css sprites的拼合图片中,一般只能存在横向循环或者只能存在纵向循环,也就是说,纵向循环和横向循环在css sprites中是不能在一起出现的。
css sprites的思想很简单:
利用background获取容器背景,并在指定容器中显示,利用background-position来指定背景上的图案。
原理如图:

图片出自网易
继续阅读 »
css sprites基础指南(一)
May 4th
关于css sprites大家并不陌生,把多张小图拼凑到一张大图里,从而减少页面的http请求数,提高网站性能的一门技术。
以前有同学说,css sprites是鸡肋,因为图片是拥有缓存的,所以对性能并不会产生多大影响。
我认为当服务器是通过cdn来连接的话,那么的网页每个http请求都将通过cdn服务器来转发,这样将会增加cdn服务器的负担,相对的判断一个图片版本是否和缓存文件版本统一也是要通过cdn服务器的,当然这只是很小的一部分好处,减少HTTP请求是最直接的提高网站性能的方法之一了。
css sprites的功能显而易见,不过它的维护难度让许多同学望而生畏,当然这也是仁者见仁智者见智,不予深论。
css sprites的图片我姑且就分为三类。
一、背景型
这类图片里面大多都是背景,常常出现在页首,页尾的统一样式中,在三种类型中也最为广泛,排法也五花八门。

图片出自淘宝
继续阅读 »
一些新手常犯的CSS误区
Feb 3rd
1.居中写入text-algin:center;然后在内部容器再设置text-algin:left;
这个方法我在禅意花园中见过,作者明确了这个方法是作为解决IE5.5的居中问题而存在的,但现在IE5.5的占有率几乎没有,更何况你能确保你的网站在IE5.5下能正常浏览么?如果你是保守的,那加上吧,不过你必须测试IE5.5,否则会有种画蛇添足的感觉。
2.body中写入width:xxxpx; margin:0 auto;居中。
这样写,可能是为了减少嵌套,写在BODY中让页面居中,但弊端仍旧很大,有些情况下,需求会在页面上端或者下端加入通栏的工具栏(例如Qzone),如果在body中设定了宽度,那么在IE6中通栏的width:100%会只有你设置的宽度那么宽。
3.在css reset的body,input,ul,等标签集中写入字体
在这里写入字体大小,那么它将全局定义这些标签,也就是说,当你想定义一个title中的文字大小,那么你必须顾及到title h3{} title span{}等,必须写全,而写在title中的继承权限是没有reset中定义标签权限高的。
4.在css reset的body,input,ul,等标签集中写入border:0
虽然在img中使用了border:0可以使它在连接中没有边框,而在input中设置了border:0,那么,默认button会从一个按钮变成一个平板,text会没有border ,这些重设都是弊大于利的。
google使用的png-8 alpha透明
Jan 4th
今天是牛顿的诞辰,google特意做了个苹果掉下来的动画。
这个苹果是透明的,而且带有alpha透明,不过在IE6下带有毛边,显然是使用了FW的png-8 alpha透明导出模式。
就此保存下来,的确有些地方可以无视IE6的这么点毛边了。

查看demo:http://blog.dmtuan.com/demo/google_png8/Google.htm
D2前端技术论坛纪实
Dec 21st
2009年12月19日,这天真够冷的,所以来到阿里巴巴很鸡东,让我印象最深的是那停车场,一个卡车头在外面悬挂着,建筑都是很具有艺术感的设计。
“会场不能开空调”,这句话如同天雷般打到了来自深圳、广东等南方城市的同学身上,鲲哥甚至是抖着讲完的。
伴随着《The Wrong Hole》神曲,D2论坛开始。
具体内容还是等视频吧,总的来说感觉都把前端提升了一个层次,特别是百度的金大为,甚至把模板也带入到了前端的范畴里了,这种匪夷所思的思想虽然可以更好的融合项目,但是再这样下去是不是会表现为所有工作都在前端解决呢?金大为说:只要是肉眼无法分辨的性能问题,都可以无视的,不知道他跟讲述性能的鄢学鵾会不会吵起来。
个人感觉克军的PPT是第二漂亮的,第一的当然是腾讯的,我怀疑他们特地请了个UI来制作那套PPT。YUI3的在YUI2上的确是一个重大的突破,以前YUI2时代会引用一大堆js文件,而现在只需要use某个模块即可异步加载,至于性能方面我认为像yahoo这样的大牛应该会不断的测试和优化,我觉得YUI3还是不错的,毕竟base就26K。
在鲲哥口中的说法,研发SilverlightQQ的时候,使用Silverlight来开发QQ并不是他所期望的,大多是上层的决定,尽管他的导师是开发Silverlight的大牛,他也还是在SilverlightQQ中用了一些flash技术,可见Silverlight目前为止并未多少成熟。
明城这次丢脸丢大了,带着apple上去演讲,结果在演讲中穿帮了,他并不会缩放屏幕,在人间网一些人说他土鳖,其实明城的安全技术还是很强的,呵呵。
鄢学鵾(这个名字好难写啊),他提出了一套口碑自己新颖的开发流程,把以前许多繁杂的压缩、合并、上传、版本注释等工序都用一行命令来解决,果然是马总的下属,真正的学会了偷懒。
最后的分享中一个(名字忘记了)介绍了他开发的antku.com快速开发平台,不过我认为这东西虽然能减少开发人员的工作,但在后期维护性欠佳,最终代码出现了很多不知所云的垃圾代码,还出现了table的布局格式,貌似实用性不佳。
阿里日本站的阿花让我们见识了阿里如何蹂躏自己的员工并派遣去蹂躏日本员工的惨剧,群众纷纷表示坚决不去阿里日本站。
最后终于见到了hax大牛,就是炮轰js征途的那位传说中的人物,有幸能一睹容颜,虽然有人提出想他PK,但是他的风度还是没有失去。
这次运气比较好,能被抽到赠书,但杯具的是当我上去的时候就剩3本书和一些T恤了,前面好书都被挖走,无奈只能随选了本最厚的Dojo权威指南,以前还是玩过这套JS框架的,我是不常看书的,不过看到中间有句话:Dojo不仅是一个JavaScript工具箱,而且是一个真正的JavaScript工具箱。我彻底内牛满面,看来我的确不适合读书,谁帮忙解释下这句话啥意思。


