说到这里我们再对“_”的语义进行一番探讨。Oxford Dictionary对underscore的定义是underline,在单词下面画条线表示强调,这个其实也是<u>标签的来历。从wikipedia上可以看到underscore符号最先用于打字机中,用来给某个单词划线。第二种用法是,当需要打空格,而不能使用空格的时候,会使用underscore来代替。例如URL、filename、编程语言中的变量、表单填写项绘制等等。从这一点来看,className中的“_”可以给一个“空格”的语义。只是className中真正的空格符,作为class属性和CSS选择器时是两种完全不同的用法。
为了避免“-”运算符的问题,开发者通常使用“_”来作为filename中的分隔符,以方便模块文件能进行正常的import、include操作。这大概是为何大多数URL仍然使用“_”分隔居多的原因。然而,为了遵守英语通用语义规则,为了提升只懂英文不懂编程的普通人的理解体验,Google制定了前文所提到的“推荐使用连字符”的SEO建议,MAC OSX操作系统推荐使用空格和连字符进行文件命名,Linux系统以及大多数编程语言的命名都提供了通过引号的方式规避文件名中“-”的冲突问题。而“_”分隔符就像“该字段不能为空”的错误提示一样充满着程序员的语言习惯。
回到主题,在CSS的className中到底应该使用“-”还是“_”?虽然说“-”更符合语义,看起来代码更美观,但“_”也有它存在的合理性─开发者的习惯延续,以及双击全选的特性。就像stackoverflow上这个问题的最佳答案所说的那样:
I think its just personal preference.
而改变一个习惯通常不是一件容易的事情,对自己来说是如此,更别提改变他人。出于我前面所提到的那个坑(通常在JS的命名约定中,你可以使用 _kaiye 来声明这是一个私有变量,但如果你在CSS中沿用这种命名习惯使用 _kaiye 来作为className将会导致这段声明在IE6中无效。)以及语义化的原因,在IE6还未消亡的现在,我无法说服自己使用“_”来作分隔符,甚至我觉得,不仅仅是className,CSS、JS、图片、HTML的filename都应该使用“-”作为分隔符,因为这些资源均是普通用户看得到的URL。
那么你的习惯呢?如果把自己当作一名前端开发新人,你又会如何选择呢?
——————–20110613 update:———————-
今天下午借W3C来公司交流的机会,私底下偷偷问Michael Smith,“Hyphen or underscore, which one do you prefer? ”,他的回答是“Neither, I like camelcase.”同时,从ytzong那里得知在CSS-tricks上这个问题讨论得也很happy,并且有了一个可供参考的投票结果。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx