webrebuild.org第四届年会——金秋四城联动

邀您参加“裸奔”

在你对CSS华丽的效果着迷时,别忘了在华丽外表下面,最原始的文字。

邀您参与每年4月9号的“CSS裸奔节”,详情请登陆webrebuild.org

[更新]样式命名规则

Ghost 发表于 [2009-07-29 15:00]

相信大家对样式命名都多少感到困难,特别是想起一个有意义的名,更难。回顾了一下之前写的《 样式命名规则 》(不知道大家使用后有什么感想)结合这段时间使用上发现的一些问题,重新整理了样式的命名规则,希望能更实用些。

要避免当状态改变时名称失去意义,最常见的就是用于布局的类名,如“left”、“right”,当左边栏不再是左边栏的时候,“left”这个名就没有实际意义了(可以看下《 CSS代码命名惯例语义化的方法 》中的“CSS类命名的语义化VS结构化方式”部分)。这与我们所推荐的“命名要有意义”就相违背了,使用序号就更加有问题了。好像没错,不过有好长一段时间都有个问题让我很烦恼,如果一个页面中同个模块出现一次以上,而且细节还不一样,那后面出现的名称应该叫什么呢?难道“one”、“two”就不是序号?其实我们要避免遇到的情况就是当状态(表现)改变时,对应定义的类名不会失去意义。

所谓的状态(表现)改变,有几种情况:

  1. HTML不变,样式定义改变。如果命名使用了表示某一状态的名称,如“red“、“font14“等,必定会引起定义与命名不符的情况,对后继的影响会造成比较大的影响。
  2. 样式定义不变,HTML改变。HTML改变意味着类名可更换,也就是如果类名使用了表示某一状态的名称,反而更有利于修改。
  3. 样式定义与HTML都改变。只需要考虑不要出现第一种情况的结果就可以了。

而实际情况并不是单纯的某一种情况,更多的时候是混杂着出现的。有点远了,回主题。

规则

[ 模块前缀 ] _ 类型 _ ( 作用 | 状态 ) n _ [ 位置 n ]

图例说明:

  • ( 必选 ):必需存在。
  • [ 可选 ]:可根据需要选择。
  • |:多选一。
  • n:可有多个。

名词说明:

模块前缀
模块定义时使用的前缀。
类型
定义类的内容类型。如输入框、文本、段落等等。
作用
定义类的作用,用于对类型的补充。
状态
定义类的状态,用于对类型的补充。
位置
定义类所使用的位置,如首页、导航等等,不排除使用左、右这样的词,但应尽量避免。

  • 每项都可有自己的一个缩写表,同一名称的缩写尽量统一。
  • 所选用的单词应选择不过于具体表示某一状态(如颜色、大小等)的单词,以避免当状态改变时名称失去意义。
  • 由不以数字开头的小写字母(a-z)、数字(0-9)组成。
  • 确保类(.class)的重用性与对象(#id)的唯一性,id避免使用保留字。

例:

模块前缀:

  • 弹出 pop
  • 公共 global,gb
  • 标题 title,tit
  • 提示 hint
  • 菜单 menu
  • 信息 info
  • 预览 pvw
  • Tips tips
  • 导航 nav

类型:

  • 按钮 bt
  • 文本 tx
  • 段落 p
  • 图标 icon
  • input input
  • 颜色 color,c
  • 背景 bg
  • 边框 bor

作用:

  • 设置 set
  • 添加 add
  • 删除 del
  • 操作 op
  • 密码 pw
  • 导入 inc

状态:

  • 成功 suc
  • 失败 lost
  • 透明 tran

位置:

  • 公共 gb
  • 边框 bor
  • 段落 p
  • 弹出 pop
  • 标题 title,tit
  • 菜单 menu
  • 内容 cont
  • 导航 nav
中文解释 命名 中文解释 命名
文本输入框 .input_tx 段落文本颜色 .c_tx_p
密码输入框 .input_pw 相册弹出的设置层 .pop_set_photo
登录密码输入框 .input_pw_login 日志设置成功提示 .hint_suc_blogset
文本颜色 .c_tx 公共提示 .hint_gb

问几个简单的问题,可以帮助我们完成命名:

  1. “什么类型的定义?”——是个输入框,input。
  2. “类型补充说明”——如果一个词说明不清楚,那么补充说明类型,文本输入框,input_tx。
  3. “在哪使用?”——定义要使用的位置在哪?首页的搜索文本输入框,input_search_index。

可能无法覆盖到所有的情况,但相信能解决70%~80%的命名问题。如果结合“模块化”相关的方法去定义,其实所需要定义的名称并不需要很多。如:“hint_tx”表示提示模块的文字定义,“hit_tx_hint”表示提示里文字强调的定义,至于是改变颜色还是加粗,这个就看不同提示模块的需要了。

文章地址:http://www.cssforest.org/blog/index.php?id=143

[更新]样式命名规则》采用的授权是创作共用的 “署名-非商业性使用-相同方式共享 3.0 通用许可”.

文章被分类到:CSS


评论也精彩

  1. unicac 在 367 日 之前 说:

    好文,转走了!

  2. aluan 在 367 日 之前 说:

    又来晚一步,学习了,呵呵!

  3. 5ivedance 在 367 日 之前 说:

    有段时间一直用“驼峰”,英文全名的组合- !,好处是在双击就能全选到,写代码方便,-

  4. aaa 在 366 日 之前 说:

    说句实话,你的命名规则太不怎么样了。用下划线链接在css规范中真的很少有用的,看看国外的大型框架,连接符都是中划线,很有道理的,这个避免和脚本中的下划线变量冲突,让人一目了然知道是css的

  5. 流水涵清 在 366 日 之前 说:

    很不错

  6. Magic 在 366 日 之前 说:

    这样搞的像天书一样培训成本不会太高?

  7. simlewebs 在 366 日 之前 说:

    像这类以属性来定义,最终的结果是造成要修改某个地方的样式的时候还是需要改动TPL,所以并没有做到结构与样式分离。
    其实就是和html加上style的方式还是一样,只不过把style换成了class。
    当然对于大型模块化的项目,这样做会是一个最优化高效的方式了

  8. 嗰個人 在 366 日 之前 说:

      有些過於簡了,像bt ,覺得是btn會好一點。又像 公共(gb),不知會否看成是容量那個GB,但可能以為是背景(bg),因為這個用得比較廣泛,只要看到 b g 或 b g 兩字母組合的話,很多時候會先入為主,可能就會聯想到是背景了。

      不過說到用中劃綫或是下劃,還是下劃好吧,雙撃可以選中整個名字。方便 呵呵。

  9. 嗰個人 在 366 日 之前 说:

    “只要看到 b g 或 b g 兩字母組合的話,..”

    疑似打錯… b g 或 g b 兩個字母組合…

  10. 布里斯班 在 366 日 之前 说:

    额。。。
    以前都是随便乱命名的。。

  11. bigCat 在 365 日 之前 说:

    标题 tit 这个单词太邪恶了

  12. 阿肆 在 362 日 之前 说:

    其实命名规则大体上来说还是语义和复用方面的要求,这东西实际来说还是习惯和团队风格比较重要。如果你喜欢一种风格,而同队都是用的另外一种风格,线上也是另外一种,加入另外一个团队可能又是再另外一种风格。只要不是太不科学,可以权衡一下哪种迁移成本比较大。
    当然,如果是全新开始的一个项目,一开始就定下一个规则对以后是很大好处的,规则一旦定下,再去修改成本是很大的。

  13. 阿肆 在 362 日 之前 说:

    个人觉得使用中划线比较方便,下划线还得同时按两个键,极度影响效率
    @嗰個人 中划线也可以双击选中啊,我使用的Editplus

  14. pengkai 在 326 日 之前 说:

    中划线比较好,因为我用DW
    按钮 btn_xx.gif
    文本 input_txt

  15. pzling 在 276 日 之前 说:

    支持7楼的观点.
    我也用下划线,不过更喜欢中划线…可是在VS里,双击中划线不能全选,哎..

  16. FA小虎 在 25 日 之前 说:

    一般我是id用下划线,class用“-”

欢迎发表评论
  1. 请不要发表跟文章无关的评论,内容或站点如指向非个人博客地址的以发广告对待!
  2. 为抵制垃圾评论,留言需要先预览再点击提交。
  3. 评论支持textile语法,查看 textile帮助
  4. 还可以使用QQWeb输入法