css的命名规范
在编写css的样式时,必须遵循一定的命名规范,以达到css简洁、易用的特点。
使用类选择器,放弃ID选择器
ID在一个页面中的唯一性导致了如果以ID为选择器来写CSS,就无法重用。
"-"连字符
"-"在并不表示连字符的含义,只表示两种含义:分类前缀分隔符、扩展分隔符。
后代选择器命名
- 以"-"为前缀且长度大于等于2的类选择器为后代选择器,如:.item为m-list模块里的每一个项,.text为m-list模块里的文本部分:.m-list .item{}.m-list .text{}。
- 一个语义化的标签也可以是后代选择器,比如:.m-list li{}。
- 不允许单个字母的类选择器出现,原因详见下面的“模块和元件的后代选择器的扩展类”。
通过使用后代选择器的方法,你不需要考虑他的命名是否已被使用,因为他只在当前模块或元件中生效,同样的样式名可以在不同的模块或元件中重复使用,互不干扰;在多人协作或者分模块协作的时候效果尤为明显!
后代选择器不需要完整表现结构树层级,尽量能短则短。
后代选择器不要在页面布局中使用,因为污染的可能性较大;
/* 这里的.itm和.cnt只在.m-list中有效 */
.m-list{margin:0;padding:0;}
.m-list .itm{margin:1px;padding:1px;}
.m-list .cnt{margin-left:100px;}
/* 这里的.cnt和.num只在.m-page中有效 */
.m-page{height:20px;}
.m-page .cnt{text-align:center;}
.m-page .num{border:1px solid #ddd;}
/* 不要命名后代选择器在页面布局中 */
.cnt{}
.num{}
分组选择器有时可以代替扩展方法
有时候虽然两个同类型的模块很相似,但是你希望他们之间不要有依赖关系,也就是说你不希望使用扩展的方法,那么你可以通过合并选择器来设置共性的样式。
使用本方法的前提是:相同类型、功能和外观都相似,写在同一片代码区域方便维护。
/* 两个元件共性的样式 */
.u-tip1,.u-tip2{}
.u-tip1 .itm,.u-tip2 .itm{}
/* 在分别是两个元件各自的样式 */
/* tip1 */
.u-tip1{}
.u-tip1 .itm{}
/* tip2 */
.u-tip2{}
.u-tip2 .itm{}
防止污染和被污染
当模块或元件之间互相嵌套,且使用了相同的标签选择器或其他后代选择器,那么里面的选择器就会被外面相同的选择器所影响。
所以,如果你的模块或元件可能嵌套或被嵌套于其他模块或元件,那么要慎用标签选择器,必要时采用类选择器,并注意命名方式,可以采用.m-layer .layerxxx、.m-list2 .list2xxx的形式来降低后代选择器的污染性。
/* 当一个li嵌套一个ul列表时,样式可能会有所影响*/
ul li .u-item ul li .u-item{}
/* 采用层级的形式,减少影响*/
ul li .u-item-layer1 ul li .u-item-layer2{}