一个简单的HTML类名命名思维

重构的时候有一种很简单的class命名思维,我们可能知道,可能不知道;但是知道后又很难应用上,是什么的思维呢?请看以下两段代码:

第一段:

<div class="a">
   <div class="b">
       <div class="c">
          ...
       </div> 
   </div>
</div>

对应的css写法:

.a{}
.a .b{}
.a .b .c{}

第二段:

<div class="a">
   <div class="a_b">
       <div class="a_b_c">
          ...
       </div> 
   </div>
</div>

对应的css写法:

.a{}
.a_b{}
.a_b_c{}

有什么区别呢?很明显第二种的HTML写法会冗余一点,但是CSS的写法就没那么复杂的选择结构了。在小型项目中,这两个基本上没什么区别的。但是在大型项目中就不一样了:

1、第一种写法适合局部排版

2、第二种写法适合全局公用模板

为什么呢?

第一种写法里面,由于名字复杂度低,很可能页面的其他位置存在与该结构内某个元素一样的命名(如该段代码有一个b类的div,整个页面却也有一个b的类名,在第二种写法里面极少可能出现这种情况)外层样式较易干扰内层样式(只要选择器复杂度一致即可干扰,如上结构外假如有一个.d,那么选择器”.d .b”会干扰”.a .b”),当然第一种写法明显HTML就没有那么臃肿了。

第二种写法里面,对于每个css选择器优先级都是最低的,但是类名却是可以保证极高程度的唯一性。

  • 好处是:公用样式高度独立,受外部样式的干扰较难;而且由于优先级低,可以灵活更改特定元素的样式而不需考虑优先级限制的问题。非常适合用作公用模板。
  • 坏处是:html会变得异常冗余,假如用于公用模板,也就是说很多地方都会用到,对于大型项目来说,公用模板增加大小的话会导致多处地方代码量变大,带宽成本变高。

那最后可以总结一点,页面编写的时候两种方法都应该用上,公用模板用第二种写法,第一种方法适用于公用性较低的地方。

以上观点由小JOE总结,不一定准确,欢迎讨论。

24 Responses to 一个简单的HTML类名命名思维 »

  1. 余果 评论 2010-08-14 14:19

    嗯,有道理

    回复

  2. 丕子 评论 2010-08-14 15:52

    面向对象 继承

    回复

  3. fatkun 评论 2010-08-14 17:16

    写成.a_b_c这样共用性会少了吧,当然要按要求选用。。

    回复

    joe 回复 八月 14th, 2010 at 18:07

    写成a_b_c的公用性应该是比较多才对的。。。因为这种写法比较独立

    回复

    kuangin 回复 八月 27th, 2010 at 11:36

    应该是共用性比较多.
    多处可以使用一个单独的class

    回复

  4. Avenir 评论 2010-08-14 21:06

    短命名和长命名,没有最好只有最合适。

    回复

    zebo 回复 八月 29th, 2010 at 22:48

    +1

    回复

  5. aunsen 评论 2010-08-15 12:57

    学习了!

    回复

  6. reizhi 评论 2010-08-15 18:42

    这个不很懂,只是支持下

    回复

  7. Yuguo Blog » 第四周流水记 Pingback 2010-08-15 22:07

    [...] 3.思考CSS命名规则。小花正好在想跟我一样的东西,所以直接给出链接。他说这是一个简单的命名思维,其实很不简单。a_b_c的方式是鬼哥主推的方式,好处是高度独立(什么?是坏处?),稳定,耦合度低模块性强。缺点是全局性差,改版什么的时候要改的东西就太多啦。a b c这样的命名方式适合组件一致的中小型网站,我喜欢这种哦。豆瓣适合后者,soso音乐适合后者,video.qq.com适合后者,music.qq.com就适合前者。不过一个站点用什么命名方法也不是单由重构就可以决定的,最好在建站初始就和设计师、交互师一起确立好站点设计规则。 [...]

  8. Sheen 评论 2010-08-16 02:31

    受益匪浅,很少从这些方面去想。
    不过,有个地方不是特别明白,想问一下子:
    1.外层样式较易干扰内层样式。(只要选择器复杂度一致即可干扰,如上结构外假如有一个.d,那么选择器”.d .b”会干扰”.a .b”)
    ——按照字面意思,与之相比,是不是第二种更加容易受外层样式干扰呢?假如不是的话,那么这一句的“较易”又是指的什么方面呢?
    2.公用样式高度独立,受外部样式的干扰较难;而且由于优先级低,可以灵活更改特定元素的样式而不需考虑优先级限制的问题。
    ——什么叫做高度独立呢?是不是指的优先级低,所以其他样式大部分最多只能进行覆盖,而不能对其实质进行更改呢?(因为优先级比较低,覆盖样式并不会对其他使用这些样式的地方产生影响?)

    回复

    joe 回复 八月 16th, 2010 at 21:26

    1.外层样式较易干扰内层样式,是第一种的表现(原因:第一种命名方式名字比较易跟外层发生耦合)。第二种由于命名复杂度高,很难会受到非目的性的样式干扰。
    2.样式高度独立,指的是你很难会无意中写出一种样式干扰它。优先级低,也就是说你要通过外部来更改它的样式的时候,你不需要特意地提升选择器的复杂度来提升优先级

    回复

  9. fx200 评论 2010-08-17 10:06

    我也想学代码,可是好难啊

    回复

  10. 棕鸟 评论 2010-08-18 11:22

    第二种好点,因为class是通用的,按第一种的写法,会有大量的重复代码,

    回复

    joe 回复 八月 24th, 2010 at 10:15

    估计是没有绝对只有相对的,两种方法我认为需要结合来用

    回复

  11. 杯具吧 评论 2010-08-19 13:31

    网站风格很有特色啊……

    回复

  12. yunhefanli 评论 2010-08-24 09:41

    专业

    回复

  13. 四川不锈钢水箱 评论 2010-08-24 15:38

    谢谢分享。期待你的更多作品!

    回复

  14. 334421 评论 2010-08-31 16:23

    代码好难啊

    回复

  15. 学夫子 评论 2010-09-08 17:14

    看来都是懂这些的,我这个代码盲就悄悄路过

    回复

  16. 风吟 评论 2010-09-08 21:56

    不明真相!我完全打酱油的!

    回复

  17. 风吟 评论 2010-09-20 22:04

    伪类。命名空间 继承

    回复

  18. Glow 评论 2010-09-21 20:27

    我就是经常用第一种。

    回复

  19. 燕姿女装 评论 2011-10-29 14:13

    还在学习css中呢~~~

    回复

Leave a Reply

Email address is not published

You should say a Chinese word to pass spam check. If you can not input Chinese, just copy 你好 and paste them into comment text box.