锁定老帖子 主题:CSS雕虫小技:八卦五行布图法介绍
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-01
最后修改:2009-03-20
先申明一下,这里不是在谈玄论道,说八卦五行,我只是利用了一下这几个数字传统的知名度,以及阴阳说中问题归纳和状态演化的技法。 这里所说的布图,就是一种将诺干背景小图片合并在一起(传说中的CSS滑动门技术);这里说的布图说的就是如何组织这些零散的小图片。 口诛笔伐:糟糕的绝对位置布图法: 常见的办法是把一堆相关的图片通过绝对位置放在一个文件中,比如【0,0】放置一个编辑按钮,【0,40】放置一个删除按钮【0,60】放置一个保存按钮。等等。 如此最大的问题是:无关的图片被杂乱无章的堆砌在一起。后期的维护将越来越繁琐。最后将是一场噩梦。 那么,我们如何更好的布图呢? 首先,让我们抛弃我们使用绝对位置的习惯,理由是: 1.绝对位置不便记忆: 绝对位置都是一些数字标示,非常难记,相对位置是个有限集合,绝对位置有无限的状态。 2.绝对位置不便适应需求的变更: 比如我们一个小图片,最初是 18*18,于是,我们布图的时候,间隔为20. 但是后来开发了一套大图标皮肤,小图标的大小变成21*21,溢出了。。。,改吧,慢慢改吧,我们有的是时间。。。 3.绝对位置在编辑的时候也比较麻烦: 而相对位置,你可能只要打开你的布局管理器,轻轻点击几下对齐图标。 如果有一些小调整,绝对位置布局的时候,我们要小心的计算出新的布局位置,更新文档,更新相关代码,通知相关工程师。。。。 4.增加沟通成本: 因为绝对位置的无穷性,我们无法给数值表示的相对位置赋予通用的适合的语意,无穷的状态我们需要依赖无穷的文档。 (我们估计没有这种文档,一旦需要调整,打电话问吧,希望你能找对人。。。)。 而相对位置,只有有限的状态,我们可以清晰的给出位置的约定语意。文档的最高境界也就是不需要文档。 5.糟糕的自适应性: 这点不必解释,绝对布图法根本就不具备这一特征。 太极生两仪,两仪生四相,四相生八卦。 最朴素的图标只有一个状态,这很简单,我们制作一张很朴素的图片即可。 然后我们想加上一个鼠标放上去的激活效果。于是我们有了两种状态。这时候,我们可以采用左右两端布图。 之后呢,鼠标按下去是不是也要有一个新的状态?哦,还差点忘了,更重要的,功能禁用了我们也需要一个状态。至此四大天王到齐了,各自找个角落呆着吧。 我们常见的也就是这四种状态: 1.正常: 2.鼠标放上 3.鼠标点击 4.禁用 如果我把这四种状态自左上起,顺时针排列,我们还可以达到一个惊人的自适应性。 当我们只准备了一个图标的时候,吧他做成整幅度的图片,那么四种状态都显示为正常的图标。 需要增加状态2的时候,只需要扩展右段新图片。同样,一切正常(disablle状态不被支持,显示为正常状态,按下和鼠标移上效果一致也是一个理想的巧合)。 当需要鼠标按下的时候,扩展下方图标。同样,一切正常。 这四种状态的组合,我称之为斜四相。对应样式单为 ".quad-x-" 但是,我们的八卦可是有八个方位的,不要轻易浪费了,怎么办呢? 老子说了:"万物负阴而抱阳,冲气以为和"。 这是我们客观世界普遍纯在的规律。 比如,我们有一个展开的图标,那么我们极有可能需要一个关闭的图标。我们有一个保存按钮,那么,我们极有可能也需要一个打开的功能。 这两类事物相互对立的东西必然有紧密关联,完全应该安排在一起。 于是,我们吧原来的布局位置,顺时针旋转45度,一个正四相产生了。对应样式为:“.quad-y-” 待续。。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-02
继续 最后别忘了Demo
|
|
返回顶楼 | |
发表时间:2009-02-02
最近也在学习css ,期待后续的文章,很有创新。
|
|
返回顶楼 | |
发表时间:2009-02-02
来先给个样例图片看看吧,哈哈~光看描述有点晕眩~
|
|
返回顶楼 | |
发表时间:2009-02-02
最后修改:2009-02-02
要说例子:
这里这个spinner的上下翻滚的按钮算是一个(制作图片的时候偷懒,鼠标放上去的时候,并没有做任何修改)。 http://www.xidea.org/project/jsiside/decorator/spinner.html 其实我要说的事情很简单。就是如何去组织你的小图片,找到这些小图片的关系,能后按照灵活统一的方式去处理。 |
|
返回顶楼 | |
发表时间:2009-02-02
之前我看到过有网站提供CSS Sprite生成器的服务:http://spritegen.website-performance.org/,JavaEye的会员也有发布过一个客户端软件:http://yukaizhao.iteye.com/blog/293757,但是这2个工具还是需要将生成的结果用手工在CSS文件中去修改,有没有工具可以帮助人来自动化处理呢?或许可以通过制定一些规则来实现?一些想法:
1. 在开发模式下,还是采用单个的小图片,用CSS直接指定单独的背景图片: .sprite-foo { background-image: url(/images/foo.png) } .sprite-bar { background-image: url(/images/bar.png) } 2. 在发布的时候,通过一个脚本,自动将符合规则的图片进行合并,然后更新position,CSS自动化变成了: #container li { background: url(merged.png) no-repeat top left; } .sprite-foo { background-position: 0 -30px; } .sprite-bar { background-position: 0 -80px; } 这样好处是,在开发的时候,写CSS的人和做图片的人都不用关心图片合并问题,发布又完全是自动化的。 |
|
返回顶楼 | |
发表时间:2009-02-02
最后修改:2009-02-02
恩,我这里就是在推荐一种CSS背景图片合并的规范。
希望能减少ui和csser们的沟通成本。 Quake Wang提到的这个想法看上去很强悍,不过感觉也是很危险的事情,至少我是想不出可靠的办法:( |
|
返回顶楼 | |
发表时间:2009-02-03
google了一下,发现有人和我有类似的想法,并且已经做好了一个工具出来:
http://smartsprites.osinski.name/ 他是通过CSS注释来指定规则,有java和php 2个版本提供,很棒! |
|
返回顶楼 | |
发表时间:2009-02-03
^_^,牛人年年有,今年特别牛哦,去拜读一下,^_^
|
|
返回顶楼 | |
发表时间:2009-03-18
CSS背景图合并工具,你可能感兴趣
http://yukaizhao.iteye.com/blog/293757 |
|
返回顶楼 | |