导航

毅博客

分享本身就是件快乐的事,我因别人得到帮助而感到幸福

« 自制组件是标准开发效率提高的必然之路为什么Marquee是不符合WEB标准的 »

结构中id与class的使用原则与技巧

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
请大家帮忙:行文措辞难免有错,请大家在阅读时发现错误通过评论方式告诉我。谢谢大家

在前几日的文章中我提到过XHTML的重要性,在那篇文章中我讲了为什么说XHTML结构重要,重视XHTML结构的好处。但是那篇文章从开发的效率入手,并没有深入细节,而今天的这篇文章是讲XHTML中的细节部分的,可以说是上一篇的续述。这篇续述的主题就是ID与CLASS怎么用,在标题中有提及使用原则与技巧,这里的使用原则与技巧是我的经验总结,并非摘自哪本典籍,所以并不是什么权威论述,请各位网友在看到这篇文章时需要有主见的阅读,不要被我的妖言所迷惑。

ID与CLASS的使用原则
据说W3C对于ID与CLASS的设定是ID具有唯一性,CLASS具有普遍性。所以我们这里的使用原则也是依据这一特性建立的。ID是不能重复的,所以在XHTML的结构中,大结构一定是用ID。比如标志、导航、主体内容、版权。这些呢接我自己制定的规范命名为#logo , #nav , #content , #copyright 这些是雷打不动的命名。有人说布局排版用ID,配色背景用CLASS,其实这是不正确的,ID与布局排版没有直接关系,CLASS与配色也下是对等的。有人呢为了麻烦全都用ID或是全都用CLASS,全都用CLASS呢还有可理解,全都用ID就不正常了,这有悖ID唯一性。如果每个ID都不一样,那非累死不可。我通过实践总结的使用原则是:ID需要具有唯一性,并且尽量在外围使用。而CLASS具有可重复性,并且尽量在结构内部使用。这样做的好处是有利于网站代码的后期维护与修改,这样的做法就会让所有的CLASS都成为ID的子级或是孙级。你可以有两个儿子但你能有两个爸爸吗,就是这个道理。在我们写CSS的时候可以写成这样 #father .child  {…} 尽量不要让Class包含ID,.father #child  {…}如果写成这样显得有点可笑 。当然这也不是铁定的,特殊情况需要特殊对待嘛。但是通常情况下这种形式的必要性不大。

以上就是ID与CLASS使用原则,归总起来一句话:ID是唯一的并是父级的,CLASS是可以重复的并是子级的。

ID与CLASS的使用技巧

  1. 子级的命名的包含父命名中的部分为开头。这样方便在编写CSS时明确层次关系。
  2. CLASS中的子级最好不用ID。当然特殊情况特殊对待。
  3. CLASS的命名最好命名用大小写合用。例 .newMovie 这样的写法与第一条结合起来使用明确关系最合适。要需要注意的是IE以外的浏览器对于大小写是很敏感的。还有就是一定要以字母开头。

其实上面讲的都是一些大家都明白的内容,只是我捡了个漏先写下来算是一个总结。希望大家对于ID与CLASS的使用提出自己的新观点新思路。一起总结出最适合也最有效率的规范来。

作者 / 振之
网站 / 毅博客 http://andy.andymao.com/
电话 / (86)025 5890 9295
  • quote 1.小黑裙
  • 你好,看了你写的经验我觉得收益良多。但是可能是因为我的水平有限。很多地方读得非常吃力。是否可以在写经验的同时附带上一些例子呢?
  • 2006-10-9 17:16:39 回复该留言
  • quote 6.keel
  • 有很多人把CSS的名字独立起来看,其实这些名字也是程序员造出来的,它有它的理由,我觉得也可以从程式的角度来理解。

    ID,从它的名字可知,是对一个标签的身份标识,主要用来查找,比如我们要找某个对象,它叫copyRight,那么浏览器里的CSS选择器会通过ID名来找到id="copyRight"的对象,这也是为什么ID不能有重复的原因,在现实生活中,也不可能存在两个具有同样身份证号码的人。Haha

    CLASS,从它可名字可知,这是一个“类”,具体来讲,可以称之为一个CSS类,或者叫样式类。跟所有编程语言一样,它具备类的一些基本特征。比如:继承,一个CLASS可以继承自一个作为父类的CLASS,自动具备父CLASS的所有特性(Class A extends B的CSS写法是.classA .classB{...}),同时也可以加入自已的新特性(.classB{...}里面可以定义A中没有的新样式),甚至可以对特性进行“重载”(.classB{...}里面可以对A中已有的样式进行重定义)。这样也可以解释很多“奇怪”的现象,比如为什么后面定义的样式会“覆盖”前面定义的样式,为什么CLASS前面要有个点而HTML标签不需要(就像类的声明需要有Class 关键字一样,"."也是类名的关键字)。同时,这也解释了“在我们写CSS的时候可以写成这样 #father .child {…} 尽量不要让Class包含ID,.father #child {…}如果写成这样显得有点可笑”可笑的原因,当一个对象不属于类的时候,里面不会存在对此对象的定义。

    因此,从此角度看,原先设计CLASS和ID是两种绝然不同的定义,而不是父级与子级的关系。当然在具体的页面布局时,定义大区块的ID样式是很科学的方法,这有点像父级的味道,定义CLASS作为灵活的可随意附加的小样式也很有效,这也有点像子级的味道。
  • 2006-11-13 9:39:42 回复该留言
  • quote 7.振之
  • http://www.jonmax.com
  • :)KEEL兄的说法是正确的,ID与CLASS之前没有什么从属关系,只是在应用的时候倾向这种从属关系不太容易出错罢了!
  • 2006-11-13 10:50:13 回复该留言
  • quote 8.keel
  • 更正:自动具备父CLASS的所有特性是通过标签的继承关系来体现的,
    Class A extends B的CSS写法是.classA .classB{...}
    这句话错误,这是相当于定义classA的内部类classB.
  • 2006-11-13 10:50:44 回复该留言
  • quote 9.ant
  • “你可以有两个儿子但你能有两个爸爸吗,就是这个道理,”呵呵,这个就是个很实在的例子,把id与class的特性说明白了。
  • 2007-5-25 16:12:21 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2007 Jonmax.com. All Rights Reserved.

Search

最新评论及回复

最近发表

资助者链接

  • 欢迎资助毅博客
    请直接发邮件给我,不要加我QQ
    maozhenzhi@gmail.com
    maozhenzhi@163.com