打印

[讨论] [原创]淘宝栅栏布局模块化命名浅析

来源:Jeffpan的博客    原文地址:http://www.thefast.cn/?p=350

      来公司的时间不算很长,最近公司现有的蜕变网将要进行一次大的改版,作为公司的前端开发人员自然要在行动前做出些准备,于是先是为网站做了栅格化设计,总宽950的24栏栅格。OK,废话不多说,下面赶紧开始。

  看之前建议先看一下我收藏的一篇 《栅格化研究总结前析》http://www.thefast.cn/?p=307 里面对A a i 950 24 做了一定的解释可能 字母 a 的大小写有些出入


先来看下淘宝网的一处3栏布局:



这里是对应的代码:



我们可以看到 class=”grid-c3-s5e7″ 这个命名似乎有些特别,
再看看其包含的class=”col-main” 和 class=”col-sub” 以及 class=”col-extra skin-orange”

再多一些样本代码:
复制内容到剪贴板
代码:
.grid-c, .grid-c2-s4, .grid-c2-s4f, .grid-c2, .grid-c2f, .grid-c2-s6, .grid-c2-s6f, .grid-c2-s7, .grid-c2-s7f, .grid-c2-s8, .grid-c2-s8f, .grid-c2-s9, .grid-c2-s9f, .grid-c2-s10, .grid-c2-s10f, .grid-c2-s11, .grid-c2-s11f, .grid-c2-s12, .grid-c2-s12f, .grid-c3, .grid-c3f, .grid-c3e, .grid-c3d, .grid-c3c, .grid-c3b, .grid-c3-s5e7, .grid-c3-s5e7f, .grid-c3-s5e7e, .grid-c3-s5e7d, .grid-c3-s5e7c, .grid-c3-s5e7b, .grid-c3-s9e6, .grid-c3-s9e6f, .grid-c3-s9e6e, .grid-c3-s9e6d, .grid-c3-s9e6c, .grid-c3-s9e6b, .grid-c3-s8e8, .main-wrap, .col-sub, .col-extra {
}
我们选择其中一个来仔细看下可以尝试着作出这样的解释:



上图中 s5e7 里的 57 代表的是在 24栏 中所占的栏数。

如下这样更方便我们进行模块化操作:
复制内容到剪贴板
代码:
.grid-c3 {}
.grid-c3-s5e7 {}
.grid-c3-s5e7 col-main {}
.grid-c3-s5e7 col-sub {}
.grid-c3-s5e7 col-extra {}
.grid-c2 {}
.grid-c2-s7f {}
.grid-c2-s7f col-main {}
.grid-c2-s7f col-sub {}
稍微注意下你会发现 上例中我只提到了 s, e 的解释,并没有对 f, b, d 做出解释,因为我觉得原理我们已经掌握,f b d 只是淘宝因内容区域不同而采取的命名方法(应该可以这样理解)。原本 -s5e7 , -s7f , -s5e7d , -s5e7b , -s9e6c 之类的就不能解释 DIV+CSS命名规则有利于SEO

只是为了让我们更方便的使用,我这个人喜欢简洁些的风格,因此在这里我对它进行了升级。

下面看下整合出属于自己的栅栏布局命名,我将用在公司蜕变网的新版上,来看下我的命名方法:

i=10px  代表的是间距  



(三栏页面栅格布局-例:部分列表页) Grid-c3-c6e5
复制内容到剪贴板
代码:
class=”grid-c3-w13c6e5″ 完整版
class=”grid-c3-c6e5″ 简洁版
注意这里的数字和上图中的数字进行对比,你会发现我省掉了w13即最宽的那一栏main(通常最宽的为main),
我将c 和 e这样除了main之外的窄栏通常固定宽度, main的宽度则为width:100%; 具体实现如下:
假设最外层的div 为 <div class=”content”>
.content {
position:relative;
width:总宽减窄栏的宽度;
padding-left&right:窄栏的宽度;
}
窄栏浮动,main 绝对定位
.main {
position:absolute;
top:xx;
left&right:窄栏的宽度;
}
先作下简单的说明,这里与淘宝网命名不同的是我没有采取 s(sub)和 e (extra) 这样的习惯,
而是用到了 w(west), c(center), e(east)
—-我将网页上的方位分为上北下南左西右东不使用 l (left) 等上下左右表示是因为在如宋体等字体下 left 里的 l 与数字1 很容易造成混乱。

下面是一系列方位栅栏模块化命名例如:



(两栏页面栅格布局-例:首页) Grid-c2-e5



(三栏页面栅格布局-例:个人空间管理页) Grid-c3-w5e6

      以上命名都是由class=”grid-c3-w5c13e6″ 这类的完整版去掉main栏目(即最宽的一栏)
简化到class=”grid-c3-w5e6″ 这类简洁版(很快可以猜出-w5e6所对应的宽栏位c13,即左边占24-5-6=13a的main),
不想用上面的方法为main定width:100%;

那我们可以这样:
复制内容到剪贴板
代码:
.rid-c3-c6e5 .main{ width:13a;}
.grid-c3-c6e5 .sidebar { width:5a;}
.grid-c3-c6e5 .service { width:6a;}
.grid-c3-c6e5的名字看起来蛮长的,考虑过去掉.grid-c3-c6e5中的 grid 这个单词,但似乎不太方便阅读,况且后面会出现 .mode-a , .mode-b 之类的模块命名,统一下会更好;
这里的命名习惯建议使用的表意命名《超越CSS》有提到过。

      可以看到简洁版的只有3个字母出现 w (west), c (center), e (east)
不用记太多的字母含义,grid-c3-c6e5这样的命名方法让我们更好的对栅格化布局进行操作。

没怎么在蓝色发过,图片大小不会控制 -_-!

这里对原版做了删减,更多详细请点击下面的链接


出处:Jeffpan的博客
转载请附本链接:http://www.thefast.cn/?p=350

补充:
很高兴 淘宝ued 成员来说明原委(之前我还真没看过类似的文章)
我用w(west) c (center) e(east) 来命名是没有追根究底的精神去 探查 除了s(sub) e(extra) 之外的 c f b d 这些字母的含义。
同时我也觉得 像 -s5e7 这样的后缀原本对seo等不能很好的解释,况且还有很多s e c f b d 这类的字母就算已对我解释一遍,我觉得给出一个像 .grid-c3-s5e7d,.grid-c3-s9e6f,.grid-c3-s9e6e 这样的 className 也得像刚学五笔背字根一样去想其含义。
个人还是觉得用 左中右(即东、中、西) 方位定位更好记,两栏就是 东和西 w(west) 和 e(east);
同理3栏就是 东边 、中间 、西边 即 w(west)、c(center)、e(east) 每栏所占的 a 用数字表示
例如 Grid-c3-w5c13e6 就是 3栏布局它的含义解释如下:
左栏 west=5a-i=5*40-10=190px;
中间 center=13a-i=13*40-10=510px;  (13a最大自然是 col-main)
右栏 east=6a-i=6*40-10=230px;
左中右3项加一起24栏,因此我们去掉一栏也能知道栏目的宽度。
从上面的图例中可以看出,这类的class命名不管是两栏还是三栏我都会去掉最宽的那一栏。
因此 Grid-c3-w5c13e6 可以简写为 Grid-c3-w5e6 (c=24-5-6=13)
希望淘宝UED 能给出另一些字母的解释,觉得此类方法蛮值得学习的。扩充 lifesinger:http://lifesinger.org/blog/?p=659

再次补充:
光顾着解释命名了,再来回顾下这段代码的结构:



你会发现”宝儿们”把 col-main 放到了 col-sub 和 col-extra 上面,这么做很直白为了SEO优化,将最重要的内容优先展示在搜索引擎面前。
他的实现方法我想大家应该比我清楚。
关于 grid-c3-s5e7 子级的命名我想大家不必一味参照淘宝的做法,我想每个人都有自己对web的理解和看法。
比如:我可能会选择

网易主页的命名 左边 productMain 中间 midContent 右侧 rightContent

腾讯主页的命名 左侧 resArea 中间 proArea 右侧 adArea

甚至是 左侧 leftsidebar 中间 main 右侧 rightsidebar

说到命名之前我在给图片命名时,发现有些以字母AD开头的图片名称,在遨游浏览器下是不能显示的,估计是当成广告给屏蔽掉了。
以上内容仅供参考讨论,愿我们在web的发展历程上越走越远。(母亲节快到了,不能只关注web哦~)

[ 本帖最后由 impan 于 2009-5-8 14:48 编辑 ]
本帖最近评分记录
  • greengnn 威望 +3 谢谢分享 2009-5-7 14:31
UECSS.COM
不错的东西,大项目,专业团队,就要这么做,蜕变网还招人不.
蜕变网目前网站方面不招人了,这位仁兄是想要跳槽?!
UECSS.COM
这个东西要从分离谈起,结构和表现分离。导致大部分的岗位是设计和前端分离。分离之后设计师是上线,前端是下线,下线必须要还原上线的设计稿效果变成网页。
第二个就是效率,为了提升开发效率,其中就包括了减少重复劳动,提高复用性。其中栅格化就是和设计师探讨之后,前端限制设计的一种模式,布局固定,内容快随意发挥,就出现了:
.rid-c3-c6e5 .main{ width:13a;}
.grid-c3-c6e5 .sidebar { width:5a;}
.grid-c3-c6e5 .service { width:6a;}

栅格命名+语义命名的情况

第三个就是劣势:
前端开发大部分任务是开发,也就是将产品的概念转化为实体运行的工作,而非产品概念的设想,如果过于限制概念的产生无非是限制产品的创新,而商业模式和价值往往取决于概念的创新的,限制概念的恶果很严重。我不赞同这类开发方式。

最后,产品永远是从小到大,从核心需求满足到边缘需求满足,代码的升级不仅仅是一个个新代码的产生,而是一个个功能模块的添加,按照功能模块来设计样式,遵循了产品的成长规律,也更便于研发线理解产品,增加产品的认知,而不仅仅是代码代码。
blog Web标准化交流会 WEB标准群:23783439

TOP

现在台州做一个项目,根本不是一个专业团队,没有规划没有创新,想进好的团队工作学习.另外我觉得我对类似交友类平台有自己的一些见解.

TOP

回复 5# qmwnegbb 的帖子

你可以考虑去杭州进阿里的ued团队!!

TOP

水平太低怕人家不收哈,而且没有学历,只是很早出来工作到现在有一定基础而已.

TOP

回复 4# greengnn 的帖子

回 4楼 “限制概念的恶果很严重...”
   我在这里并没有限制对其进行限制,我想淘宝制作团队也没有此类想法,此种命名方法前提是建立在栅格化设计的基础上,方便模块开发,方便我们对其进行操作。
   如果你还是觉得不妥那么对栅格化设计进行辩论才是更能体现你的想法。
   我在这里仅举了我们网站新版将要实现的 24栏栅格的例子。
在以前我也是不考虑这些,设计那边出什么图,我尽量切好即可,但现在看来这样的网站项目不会长久存活,起码是多变的,动不动就有新方案、新想法,使用一段时间后会发现不之处很难对其扩展。
   发生在设计和前端之间的文章很多,在这里我不多少了。
  
   附上 KHOI VINH,DASIGNER 的话, 取自《超越css》
        在某种层面上,每位设计师总是考虑世界的次序,这也是我们所有的人为了生存实践这种技能的深层原因。在设计中表达秩序,没有比网格更好的工具了。

                                                                   ----KHOI VINH,DASIGNER
                                                             www.subtraction.com
也许多年后看到这些会很好笑,但至少目前一些知名大站多少都采取了规范设计
UECSS.COM

TOP

回复 7# qmwnegbb 的帖子

我也是 学历不高 英语不好 挣扎中~
UECSS.COM

TOP

回复 8# impan [楼主] 的帖子

至于设计上的事情,我就无话可说了,因为毕竟是门外人,不懂,只能站在前端的角度上分析一下了。
栅格的基础是设计师的风格和意见,设计师认同,那就无话可说了。从中发掘规律。
blog Web标准化交流会 WEB标准群:23783439

TOP

回复 10# greengnn 的帖子

额  那时因为目前前端还没能很好的被重视起来
国内一些大公司前端的生活就很好
比如腾讯VIP.QQ.COM 考虑到两年后
UECSS.COM

TOP

其实我觉得这些都应该是策划的工作,现在的策划工作太别扭了,画线稿,出文档,就没他什么事了.

后台不懂,但我觉得至少在前台文件夹结构,文件命名,以及小的类、ID、图片命名制定规范,后期预留,比如图片如果要用CSS Sprites,那么区分开系统图标和页面用图(这点连QQ都没做好,只是一味的做到一张图片上)。

TOP

回复 12# qmwnegbb 的帖子

小心策划的来把你带走  

区分开系统图标和页面用图 大多是为了减少页面cssimage请求数做到一张图上的 一般性的网站系统图标很少,改版或换主题时,系统图标不管是否相同都换掉了,没引起大家的注意

我也没怎么区分 -_-! 学习了
UECSS.COM

TOP

对于CSS Sprites我觉得我还是满有研究的。以前觉得用background直接在窗口上设置背景不太好控制,而且容易出问题,我就自己做了一张1*1大小的全透明GIF图,然后所有的图标和部分页面图片甚至资料图片,都定义这个透明GIF的background来做,这样做的优点就是防偷,便于控制,出错较少,当然对于直接从缓存中拿东西的流氓,就没办法了。

TOP

虽然有所限制,但在团队配合中,不失为一个可取的办法。谢谢楼主的分享~

TOP

额 我想问个比较弱的问题 蓝色里发表的文章 图片大小怎么设置
UECSS.COM

TOP

第一个黄色的图
  绿色部分是 950PX
  下面黄色部分是 510+230+190=930px;
  图二
  下面黄色部分是 750+190=940px;
不知道 i 是代表什么,为什么黄色部分与绿色部分不一样宽?
读进化论,我相信达尔文。

TOP

回复 17# 124492237 的帖子

建议你先看一下收藏的一篇 栅格化研究总结前析 http://www.thefast.cn/?p=307 里面对A a i 950 24 做了一定的解释

可能 字母 a 的大小写有些出入
UECSS.COM

TOP

不知道栅格化跟黄金分割有啥区别!

TOP

引用:
原帖由 qmwnegbb 于 2009-5-7 16:35 发表
对于CSS Sprites我觉得我还是满有研究的。以前觉得用background直接在窗口上设置背景不太好控制,而且容易出问题,我就自己做了一张1*1大小的全透明GIF图,然后所有的图标和部分页面图片甚至资料图片,都定义这个透明 ...
比较好奇.能详细说下吗?
佛说这个世界有五浊,其中一个见浊,人的见解很多,好、坏、对、错。又多又复杂!
如此,观点与观点互相碰撞,引起争论,平常人的争论会演变出口角、打架。领导阶级就会发动战争!每个人的起心动念都会影响世界!

TOP

回复 19# sjq617 的帖子

黄金比例  有个固定的概念 ~1.62  关于黄金比例百科解释  http://baike.baidu.com/view/45073.htm

栅格化根据实际情况要灵活许多
UECSS.COM

TOP

关于命名的问题,觉得规范和标准其实还是为了自己方便,也是对自己的一种提高,而且如果团队配合也利于整合。
真正一个网站,如果是改版,很少会在原来的样式上改,基本都是重写(其中一个因素是写上版页面的人现在估计已经不在了),改比重写更麻烦。

[ 本帖最后由 hzhjun 于 2009-5-7 17:46 编辑 ]

TOP

回复 22# hzhjun 的帖子

额 这更需要一套命名规范来执行 (以前的公司没有这个还是个门户大站,维护起来蛮累的)
UECSS.COM

TOP

引用:
原帖由 4321285 于 2009-5-7 17:26 发表

比较好奇.能详细说下吗?
就是创建一张全透明的GIF图,gif虽然不支持斗透明,但是支持全透明哦。
然后通过给图片设置所需要的width+height以及各类属性后,background-position一下,就解决问题了。这样易于控制,也易于维护。

TOP

看到这篇解析文章有点意外,有点欣喜
大部分解释是对的

c3 - column 3  表示三栏布局
s5 - col-sub 的宽度为 5 * 40 - 10 = 190px
e7 - col-extra 的宽度为 7 * 40 - 10 = 270px
剩下的 col-main 的宽度,自然就是 950 - (5+7)*40 = 470px

因此 .grid-c3-s5e7 代表的是 190px : 470px : 270px 的三栏布局

对于三栏来说,三栏的位置可以互换,共有:3 * 2 * 1 = 6 种组合,这些组合方式,表示为:
.grid-c3-s5e7f
.grid-c3-s5e7e
.grid-c3-s5e7d
.grid-c3-s5e7c
.grid-c3-s5e7b

可以参考:http://lifesinger.org/lab/2008/grids_test3.html

其中 190px : 470px : 270px 是最常用的布局,因此用默认的 .grid-c3-s5e7 表示
.grid-c3-s5e7f 则表示 270px : 470px : 190px , f 隐含了左右栏互换的意思

采用col-main, col-sub, col-extra, 原因之一是从语义考虑,书写html代码时,将最重要的内容放在col-main中,次重要的放在col-sub, 更次的放在col-extra, 结构始终是固定的,所有布局,html代码都是:
复制内容到剪贴板
代码:
<div class="grid-c3-sNeMx">
    <div class="col-main"></div>
    <div class="col-sub"></div>
    <div class="col-extra"></div>
</div>
写好内容后,只要调整 sNeMx 就可以将内容排列至任何一种组合。这样,对SEO也更有益,因为重要的内容始终在前面,html和布局排列是解耦的。

我觉得楼主采用 west, center, east 是不大好的,因为 west 的内容有可能出现在三栏中的任何一栏,并非总是west方位


更详细的讨论请阅读:双飞翼布局 http://lifesinger.org/blog/?p=659  欢迎交流!

[ 本帖最后由 lifesinger 于 2009-5-7 21:03 编辑 ]
岁月如歌

TOP

引用:
原帖由 4321285 于 2009-5-7 17:26 发表
比较好奇.能详细说下吗?
我这里有篇文章,有兴趣可以看看《Yahoo与Gmail的CSS Sprites对比》http://ytzong.blogspot.com/2009/03/yahoogmailcss-sprites.html

TOP

栅格化开发模式是否限制设计也得具体问题分析去

Taobao团队一般开发的都是电子商务类网站,追求页面中各个版块精致、理性的布局,因此使用栅格模式,对设计师和前端开发工程师都有好处.

而Tc团队所开发的大都是感性与理性兼并的网站(个人颇为喜欢Tc设计师的作品),如Tc的游戏网站,页面重构工程师去跟设计师说让他设计时要遵循栅格模式,估计设计师心理肯定会有点小小不爽(这个效果该用多尺寸来表现就得用,为什么要拘泥于你的栅格)。这样就出现了greengnn提到的“限制设计”.

[ 本帖最后由 GeminiKanon 于 2009-5-7 23:01 编辑 ]

TOP

回复 25# lifesinger 的帖子

汗一下,原来是 淘宝ued 成员来说明原委了。。(之前我还真没看过类似的文章)
我用w(west) c (center) e(east) 来命名是没有追根究底的精神去 探查 除了s(sub) e(extra) 之外的 c f b d 这些字母的含义。
同时我也觉得 像 -s5e7 这样的后缀原本对seo等不能很好的解释,况且还有很多s e c f b d 这类的字母就算已对我解释一遍,我觉得给出一个像 .grid-c3-s5e7d,.grid-c3-s9e6f,.grid-c3-s9e6e 这样的 className 也得像刚学五笔背字根一样去想其含义。
个人还是觉得用 左中右(即东、中、西) 方位定位更好记,两栏就是 东和西 w(west) 和 e(east);
同理3栏就是 东边 、中间 、西边 即 w(west)、c(center)、e(east) 每栏所占的 a 用数字表示
例如 Grid-c3-w5c13e6 就是 3栏布局它的含义解释如下:
左栏 west=5a-i=5*40-10=190px;
中间 center=13a-i=13*40-10=510px;  (13a最大自然是 col-main)
右栏 east=6a-i=6*40-10=230px;
左中右3项加一起24栏,因此我们去掉一栏也能知道栏目的宽度。
从上面的图例中可以看出,这类的class命名不管是两栏还是三栏我都会去掉最宽的那一栏。
因此 Grid-c3-w5c13e6 可以简写为 Grid-c3-w5e6 (c=24-5-6=13)
---------------------------------------------------------------已作为补充添加到文章末尾-------------------------------------

[ 本帖最后由 impan 于 2009-5-7 23:44 编辑 ]
UECSS.COM

TOP

还 是搞不懂
界面设计 网站建设

TOP

回复 29# illin 的帖子

不应该的栅格化设计明白了  应该很好理解
UECSS.COM

TOP