css中id或class命名规范:css
最好不要在你的类名或者ID名中去加入颜色或者长宽的尺寸等带有属性的名字。html
先看一个例子:浏览器
.l-123f { color: red; }安全
若是你第一次看到这个类名,你能在css文件马上找到这个class吗?估计很难,由于这个类的名称只是某一我的能理解的符号再没有其余意义,因此这里没有一个准确的方法可以让你当即说出来。ide
让咱们来看下这个类名定义:布局
.right-red { color:red; }字体
你可能很明确的知道这个class选择符的所起的做用。可是这里还有个问题,当你在一星期的时间须要从新设计。在从新设计的时候,这个模块被放置到了左边,并且仍是绿色。这个类就再也不有存在的价值。因此如今不得不选择,要么改变全部的属性值,要么放着它不动,这可能致使混乱。优化
最好不要在你的类名或者ID名中去加入颜色或者长宽的尺寸等带有属性的名字。你应该避免任何的属性值都是直接的词汇。(如box)直接属性可能会致使内容的分离。网站
让咱们来看看最合理ID/CLASS的命名规范:url
.product-description { color: red; }
用这种样式定义的product-description(产品描述),无论你怎么改变,她都是那么的干净清晰。
1、使用CSS缩写
使用缩写能够帮助减小你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《经常使用css缩写语法总结》,这里就不展开描述。
2、明肯定义单位,除非值为0
忘 记定义尺寸的单位是CSS新手广泛的错误。在HTML中你能够只写width=100,可是在CSS中,你必须给一个准确的单位,好比:width: 100px width:100em。只有两个例外状况能够不定义单位:行高和0值。除此之外,其余值都必须紧跟单位,注意,不要在数值和单位之间加空格。
3、区分大小写
当 在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了不这种错误,我建议全部的定义名称都采用小写。class和id的值在HTML 和XHTML中也是区分大小写的,若是你必定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。前的元素限定
4、取消class和id
当你写给一个元素定义class或者id,你能够省略前面的元素限定,由于ID在一个页面里是惟一的,class能够在页面中屡次使用。你限定某个元素毫无心义。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
能够写成
#content { /* declarations */ }
.details { /* declarations */ }
这样能够节省一些字节。
5、默认值
一般padding的默认值为0,background-color的默认值是transparent。可是在不一样的浏览器默认值可能不一样。若是怕有冲突,能够在样式表一开始就先定义全部元素的margin和padding值都为0,象这样:
* {
margin:0;
padding:0;
}
6、不须要重复定义可继承的值
CSS中,子元素自动继承父元素的属性值,象颜色、字体等,已经在父元素中定义过的,在子元素中能够直接继承,不须要重复定义。可是要注意,浏览器可能用一些默认值覆盖你的定义。
7、最近优先原则
若是对同一个元素的定义有多种,以最接近(最小一级)的定义为最优先,例若有这么一段代码
Update: Lorem ipsum dolor set
在CSS文件中,你已经定义了元素p,又定义了一个classupdate
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
这两个定义中,class=update将被使用,由于class比p更近。你能够查阅W3C的《 Calculating a selector’s specificity》 了解更多。
8、多重class定义
一个标签能够同时定义多个class。例如:咱们先定义两个样式,第一个样式背景为#666;第二个样式有10 px的边框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在页面代码中,咱们能够这样调用
这样最终的显示效果是这个div既有#666的背景,也有10px的边框。是的,这样作是能够的,你能够尝试一下。
九.使用子选择器(descendant selectors)
CSS初学者不知道使用子选择器是影响他们效率的缘由之一。子选择器能够帮助你节约大量的class定义。咱们来看下面这段代码:
〈div id=subnav〉
〈ul〉
〈li class=subnavitem〉 〈a href=# class=subnavitem〉Item 1〈/a〉〈/li〉
〈li class=subnavitemselected〉 〈a href=# class=subnavitemselected〉 Item 1〈/a〉 〈/li〉
〈li class=subnavitem〉 〈a href=# class=subnavitem〉 Item 1〈/a〉 〈/li〉
〈/ul〉
〈/div〉
这段代码的CSS定义是:
div#subnav ul { /* Some styling */ }
div#subnav ul li.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitem a.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitemselected { /* Some styling */ }
div#subnav ul li.subnavitemselected a.subnavitemselected { /* Some styling */ }
你能够用下面的方法替代上面的代码
〈ul id=subnav〉
〈li〉 〈a href=#〉 Item 1〈/a〉 〈/li〉
〈li class=sel〉 〈a href=#〉 Item 1〈/a〉 〈/li〉
〈li〉 〈a href=#〉 Item 1〈/a〉 〈/li〉
〈/ul〉
样式定义是:
#subnav { /* Some styling */ }
#subnav li { /* Some styling */ }
#subnav a { /* Some styling */ }
#subnav .sel { /* Some styling */ }
#subnav .sel a { /* Some styling */ }
用子选择器可使你的代码和CSS更加简洁、更加容易阅读。
10、不须要给背景图片路径加引号
为了节省字节,我建议不要给背景图片路径加引号,由于引号不是必须的。例如:
background:url(images/***.gif) #333;
能够写为
background:url(images/***.gif) #333;
若是你加了引号,反而会引发一些浏览器的错误。
11、组选择器(Group selectors)
当一些元素类型、class或者id都有共同的一些属性,你就可使用组选择器来避免屡次的重复定义。这能够节省很多字节。
例如:定义全部标题的字体、颜色和margin,你能够这样写:
h1,h2,h3,h4,h5,h6 {
font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
若是在使用时,有个别元素须要定义独立样式,你能够再加上新的定义,能够覆盖老的定义,例如:
h1 { font-size:2em; }
h2 { font-size:1.6em; }
12、用正确的顺序指定连接的样式
当 你用CSS来定义连接的多个状态样式时,要注意它们书写的顺序,正确的顺序是::link :visited :hover :active。抽取第一个字母是LVHA,你能够记忆成LoVe HAte(喜欢讨厌)。为何这么定义,能够参考Eric Meyer的《Link Specificity》。
若是你的用户须要用键盘来控制,须要知道当前连接的焦点,你还能够定义:focus属性。:focus属性的效果也取 决与你书写的位置,若是你但愿聚焦元素显示:hover效果,你就把:focus写在:hover前面;若是你但愿聚焦效果替代:hover效果,你就 把:focus放在:hover后面。
十三.清除浮动
一个很是常见的CSS问题,定位使用浮动的时候,下面的层被浮动的层所覆盖,或者层里嵌套的子层超出了外层的范围。
一般的解决办法是在浮动层后面添加一个额外元素,例如一个div或者一个br,而且定义它的样式为clear: both。这个办法有一点牵强,幸运的是还有一个好办法能够解决,参看这篇文章《How To Clear Floats Without Structural Markup》(注:本站将尽快翻译此文)。
上面2种方法能够很好解决浮动超出的问题,可是若是当你真的须要对层或者层里的对象进行clear的时候怎么办?一种简单的方法就是用overflow属性,这个方法最初的发表在《Simple Clearing of Floats》,又在《Clearance》和《Super simple clearing floats》中被普遍讨论。
上面那一种clear方法更适合你,要看具体的状况,这里再也不展开论述。另外关于float的应用,一些优秀的文章已经说得很清楚,推荐你阅读:《Floatutorial》、《Containing Floats》和《Float Layouts》
十4、横向居中(centering)
这是一个简单的技巧,可是值得再说一遍,由于我看见太多的新手问题都是问这个:CSS如何横向居中?你须要定义元素的宽,而且定义横向的margin,若是你的布局包含在一个层(容器)中,就象这样:
undefined
你能够这样定义使它横向居中:
#wrap {
width:760px; /* 修改成你的层的宽度 */
margin:0 auto;
}
可是IE5/Win不能正确显示这个定义,咱们采用一个很是有用的技巧来解决:用text-align属性。就象这样:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改成你的层的宽度 */
margin:0 auto;
text-align:left;
}
第一个body的text-align:center; 规则定义IE5/Win中body的全部元素居中(其余浏览器只是将文字居中) ,第二个text-align:left;是将#warp中的文字居左。
十5、导入(Import)和隐藏CSS
由于老版本浏览器不支持CSS,一个一般的作法是使用@import技巧来把CSS隐藏起来。例如:
@import url(main.css);
然而,这个方法对IE4不起做用,这让我非常头疼了一阵子。后来我用这样的写法:
@import main.css;
这样就能够在IE4中也隐藏CSS了,呵呵,还节省了5个字节呢。想了解@import语法的详细说明,能够看这里《centricle’s css filter chart》
十6、针对IE的优化
有些时候,你须要对IE浏览器的bug定义一些特别的规则,这里有太多的CSS技巧(hacks),我只使用其中的两种方法,无论微软在即将发布的IE7 beta版里是否更好的支持CSS,这两种方法都是最安全的。
1.注释的方法
(a)在IE中隐藏一个CSS定义,你可使用子选择器(child selector):
html>body p {
/* 定义内容 */
}
(b)下面这个写法只有IE浏览器能够理解(对其余浏览器都隐藏)
* html p {
/* declarations */
}
(c)还有些时候,你但愿IE/Win有效而IE/Mac隐藏,你可使用反斜线技巧:
/* */
* html p {
declarations
}
/* */
2.条件注释(conditional comments)的方法
另一种方法,我认为比CSS Hacks更加经得起考验就是采用微软的私有属性条件注释(conditional comments)。用这个方法你能够给IE单独定义一些样式,而不影响主样式表的定义。就象这样:
undefined
十7、调试技巧:层有多大?
当 调试CSS发生错误,你就要象排版工人,逐行分析CSS代码。我一般在出问题的层上定义一个背景颜色,这样就能很明显看到层占据多大空间。有些人建议用 border,通常状况也是能够的,但问题是,有时候border 会增长元素的尺寸,border-top和boeder-bottom会破坏纵向margin的值,因此使用background更加安全些。
另一个常常出问题的属性是outline。outline看起来象boeder,但不会影响元素的尺寸或者位置。只有少数浏览器支持outline属性,我所知道的只有Safari、OmniWeb、和Opera。
十8、CSS代码书写样式我的的书写习惯。在通过不断实践后,我决定采用下面这样的书写样式:
selector1,
在写CSS代码的时候,对于缩进、断行、空格,每一个人有每
selector2 {
property:value;
}
当使用联合定义时,我一般将每一个选择器单独写一行,这样方便在CSS文件中找到它们。在最后一个选择器和大括号{之间加一个空格,每一个定义也单独写一行,分号直接在属性值后,不要加空格。
我习惯在每一个属性值后面都加分号,虽然规则上容许最后一个属性值后面能够不写分号,可是若是你要加新样式时容易忘记补上分号而产生错误,因此仍是都加比较好。
最后,关闭的大括号}单独写一行,空格和换行有助与阅读。
---------------------
CSS命名参考
一、经常使用的CSS命名规则:
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
二、直观命名
当在设计Web页面以及须要对一个div进行标识的时候,最天然的想法就是使用能够描述元素所在页面位置的词汇来对其命名。这种方法使得类以及id的名称以下面所示:
自上而下小组:top-panel
横向:horizontal-nav
左面:left-side
中心-栏目:center-column
右面:right-col
这些是CSS以及XHTML类和id的有效命名方式。这些词汇简单而且可以令人顾名思义,所以知足了标识页面元素以及相应的CSS样式的须要。
但问题是这样的名称同页面内容的特定表达方式相关联。这些命名参考了某种特定页面布局中的页面元素位置,所以在这样的布局以外使用就会显得不合适甚至形成理解混乱。同时,这些命名没有涉及文档内容的结构。所以,下面给出了对CSS类以及ID命名更好的方法。
三、结构化命名
结构化的标记意味着表达方式/位置信息同内容的彻底分离——这其中包括出如今标记(markup)中的类和id名称。
有标记的相关信息都是用来描述文档的结构而不是外观。这样的特色使得咱们能够经过简单的改变CSS的方式来对不一样外观格式下的内容(content)以及标记(markup)进行重用。当你理解这种方式时,很容易就能够发现采用页面位置来为类以及id命名的方式在处理如音频(audio)等外观格式上显得很是不合适。所以,应当根据在文档中的使用目的而非出现位置来对类以及id进行结构化命名。
能够按照以下所示的结构化方式来对类以及id名称命名:
顶部抢眼部分:branding
导航部分:main-nav
主要内容部分:main-content
这些名字同直观命名方式同样很是易懂,但他们描述了页面元素的做用而非位置。这使得代码更加符合使用纯粹的结构化标记(structural markup)的初衷,即开发人员能够在不改变标记的状况下对各类各样媒体下的显示格式进行处理。
即便你不打算在其余的媒体上对Web页面进行格式修改,使用结构化命名方式还能够帮助你在往后的站点升级或从新设计中更为轻松。例如,结构化命名避免了当一个div同id right-column移动到页面左边后所带来的混乱。对div sidebar的采用这样的命名方式就显得更加适当,由于不管它出如今页面的哪一边,这个名字仍然对开发人员来讲直观易懂。
四、惯例
Andy Clarke分析了40份由推崇标准化Web设计理念的开发人员所设计的Web站点的源代码。尽管类以及id名称很不统一,可是仍是发现了一些频繁出现的经常使用名称。这里给出了最经常使用类/id名称的示例列表:
header
content
nav
sidebar
footer
若是要查看完整的列表,能够看看最多见命名惯例表
这些常见的类以及id名称是否标志着一种标准的诞生或是广泛接受惯例的造成呢?尽管这是我所但愿的,但我并不这么认为。个人确但愿可以看见一整套对于咱们天天均可以看到的经常使用页面元素的命名标准。同时,使用标准化的命名方式可使得寻找页面元素以及对Web站点升级带来方便,尤为当须要在由不一样开发人员在不一样时间所开发站点中换来换去工做的时候。
review:
大的布局div能够之外观的方式命名(如header,footer),其余的我以为仍是应该以描述所含内容的标准来命名(如menu,news)
五、自定义命名:
根据w3c网站上给出的,最好是用意义命名
好比:是重要的新闻高亮显示(像红色)
有两种
.red{color:red}
.important-news{color:red}
很显然第二种传达的意义更加明确,因此尽可能不要用意义不明确的做为本身自定义的名字