CSS规范

1、分类方法

CSS文件的分类和引用顺序css

一般,一个项目咱们只引用一个CSS,可是对于较大的项目,咱们须要把CSS文件进行分类。html

咱们按照CSS的性质和用途,将CSS文件分红“公共型样式”、“特殊型样式”、“皮肤型样式”,并以此顺序引用(按需求决定是否添加版本号)。web

  1. 公共型样式:包括了如下几个部分:“标签的重置和设置默认值”、“统一调用背景图和清除浮动或其余需统一处理的长样式”、“网站通用布局”、“通用模块和其扩展”、“元件和其扩展”、“功能类样式”、“皮肤类样式”。
  2. 特殊型样式:当某个栏目或页面的样式与网站总体差别较大或者维护率较高时,能够独立引用一个样式:“特殊的布局、模块和元件及扩展”、“特殊的功能、颜色和背景”,也能够是某个大型控件或模块的独立样式。
  3. 皮肤型样式:若是产品须要换肤功能,那么咱们须要将颜色、背景等抽离出来放在这里。
1 <link href="assets/css/global.css" rel="stylesheet" type="text/css"/>
2 <link href="assets/css/index.css" rel="stylesheet" type="text/css"/>
3 <link href="assets/css/skin.css" rel="stylesheet" type="text/css"/>

CSS内部的分类及其顺序浏览器

  1. 重置(reset)和默认(base)(tags):消除默认样式和浏览器差别,并设置部分标签的初始样式,以减小后面的重复劳动!你能够根据你的网站需求设置!
  2. 统一处理:建议在这个位置统一调用背景图(这里指多个布局或模块或元件共用的图)和清除浮动(这里指通用性较高的布局、模块、元件内的清除)等统一设置处理的样式!
  3. 布局(grid)(.g-):将页面分割为几个大块,一般有头部、主体、主栏、侧栏、尾部等!
  4. 模块(module)(.m-):一般是一个语义化的能够重复使用的较大的总体!好比导航、登陆、注册、各类列表、评论、搜索等!
  5. 元件(unit)(.u-):一般是一个不可再分的较为小巧的个体,一般被重复用于各类模块中!好比按钮、输入框、loading、图标等!
  6. 功能(function)(.f-):为方便一些经常使用样式的使用,咱们将这些使用率较高的样式剥离出来,按需使用,一般这些选择器具备固定样式表现,好比清除浮动等!不可滥用!
  7. 皮肤(skin)(.s-):若是你须要把皮肤型的样式抽离出来,一般为文字色、背景色(图)、边框色等,非换肤型网站一般只提取文字色!非换肤型网站不可滥用此类!
  8. 状态(.z-):为状态类样式加入前缀,统一标识,方便识别,她只能组合使用或做为后代出现(.u-ipt.z-dis{},.m-list li.z-sel{}),具体详见命名规则的扩展相关项。
  9. 功能类和皮肤类样式为表现化的样式,请不要滥用!以上顺序能够按需求适当调整。以上分类的命名方法详见命名规则
     1 /* 重置 */
     2 div,p,ul,ol,li{margin:0;padding:0;}
     3 /* 默认 */
     4 strong,em{font-style:normal;font-weight:bold;}
     5 /* 统一调用背景图 */
     6 .m-logo a,.m-nav a,.m-nav em{background:url(images/sprite.png) no-repeat 9999px 9999px;}
     7 /* 统一清除浮动 */
     8 .g-bdc:after,.m-dimg ul:after,.u-tab:after{display:block;visibility:hidden;clear:both;height:0;overflow:hidden;content:'.';}
     9 .g-bdc,.m-dimg ul,.u-tab{zoom:1;}
    10 /* 布局 */
    11 .g-sd{float:left;width:300px;}
    12 /* 模块 */
    13 .m-logo{width:200px;height:50px;}
    14 /* 元件 */
    15 .u-btn{height:20px;border:1px solid #333;}
    16 /* 功能 */
    17 .f-tac{text-align:center;}
    18 /* 皮肤 */
    19 .s-fc,a.s-fc:hover{color:#fff;}

 2、命名规则

使用类选择器,放弃ID选择器ide

ID在一个页面中的惟一性致使了若是以ID为选择器来写CSS,就没法重用。布局

NEC特殊字符:"-"连字符网站

"-"在本规范中并不表示连字符的含义。url

她只表示两种含义:分类前缀分隔符、扩展分隔符,详见如下具体规则。spa

分类的命名方法:使用单个字母+"-"为前缀.net

布局(grid)(.g-);模块(module)(.m-);元件(unit)(.u-);功能(function)(.f-);皮肤(skin)(.s-);状态(.z-)。

对以上的解释详情参见:分类方法中的“CSS内部的分类及其顺序”。

注:在你样式中的选择器老是要以上面前五类开头,而后在里面使用后代选择器。

  若是这五类不能知足你的需求,你能够另外定义一个或多个大类,但必须符合单个字母+"-"为前缀的命名规则,即 .x- 的格式。

  特殊:.j-将被专用于JS获取节点,请勿使用.j-定义样式。

后代选择器命名

  • 约定不以单个字母+"-"为前缀且长度大于等于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;}

 

 命名应简约而不失语义

/* 反对:表现化的或没有语义的命名 */
.m-abc .green2{}
.g-left2{}
/* 推荐:使用有语义的简短的命名 */
.m-list .wrap2{}
.g-side2{}

相同语义的不一样类命名

方法:直接加数字或字母区分便可(如:.m-list、.m-list二、.m-list3等,都是列表模块,可是是彻底不同的模块)。

其余举例:.f-fw0、.f-fw一、.s-fc0、.s-fc一、.m-logo二、.m-logo三、u-btn、u-btn2等等。

模块和元件的扩展类的命名方法

当A、B、C、...它们类型相同且外形类似区别不大,那么就以它们中出现率最高的作成基类,其余作成基类的扩展。

方法:+“-”+数字或字母(如:.m-list的扩展类为.m-list-一、.m-list-2等)。

补充:基类自身能够独立使用(如:class="m-list"便可),扩展类必须基于基类使用(如:class="m-list m-list-2")。

若是你的扩展类是表示不一样状态,那么你能够这样命名:u-btn-dis,u-btn-hov,m-box-sel,m-box-hov等等,而后像这样使用:class="u-btn u-btn-dis"。

若是你的网站能够不兼容IE6等浏览器,那么你标识状态的方法也能够采起独立状态分类(.z-)方法:.u-btn.z-dis,.m-box.z-sel,而后像这样使用:class="u-btn z-dis"。

模块和元件的后代选择器的扩展类

有时候模块内会有些相似的东西,若是你没有把它们作成元件和扩展,那么也可使用后代选择器和扩展。

后代选择器:.m-login .btn{}。

后代选择器扩展:.m-login .btn-1{},.m-login .btn-dis{}。

一样也能够采起独立状态分类(.z-)方法:.m-login .btn.z-dis{},而后像这样使用:class="btn z-dis"。

注:此方法用于类选择器,直接使用标签作为选择器的则不须要使用此命名方法。

注:为防止后代选择器的扩展类和大类命名规范冲突,后代选择器不容许使用单个字母。

  好比:.m-list .a{}是不容许的,由于当这个.a须要扩展的时候就会变成.a-bb,这样就和大类的命名规范冲突。

分组选择器有时能够代替扩展方法

有时候虽然两个同类型的模块很类似,可是你但愿他们之间不要有依赖关系,也就是说你不但愿使用扩展的方法,那么你能够经过合并选择器来设置共性的样式。

使用本方法的前提是:相同类型、功能和外观都类似,写在同一片代码区域方便维护。

/* 两个元件共性的样式 */
.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的形式来下降后代选择器的污染性。

 

选择器、属性和值都使用小写

在xhtml标准中规定了全部标签、属性和值都小写,CSS也是如此。

单行写完一个选择器定义

便于选择器的寻找和阅读,也便于插入新选择器和编辑,便于模块等的识别。去除多余空格,使代码紧凑减小换行。

若是有嵌套定义,能够采起内部单行的形式。

/* 单行定义一个选择器 */
.m-list li,.m-list h3{width:100px;padding:10px;border:1px solid #ddd;}
/* 这是一个有嵌套定义的选择器 */
@media all and (max-width:600px){
    .m-class1 .itm{height:17px;line-height:17px;font-size:12px;}
    .m-class2 .itm{width:100px;overflow:hidden;}
}
@-webkit-keyframes showitm{
    0%{height:0;opacity:0;}
    100%{height:100px;opacity:1;}
}

 

最后一个值也以分号结尾

一般在大括号结束前的值能够省略分号,可是这样作会对修改、添加和维护工做带来没必要要的失误和麻烦。

省略值为0时的单位

为节省没必要要的字节同时也使阅读方便,咱们将0px、0em、0%等值缩写为0。

1 .m-box{margin:0 10px;background-position:50% 0;}

 

使用单引号

省略url引用中的引号,其余须要引号的地方使用单引号。

1 .m-box{background:url(bg.png);}
2 .m-box:after{content:'.';}

使用16进制表示颜色值

除非你须要透明度而使用rgba,不然都使用#f0f0f0这样的表示方法,并尽可能缩写。

1 .m-box{color:#f00;background:rgba(0,0,0,0.5);}

根据属性的重要性按顺序书写

只遵循横向顺序便可,先显示定位布局类属性,后盒模型等自身属性,最后是文本类及修饰类属性。

 

显示属性 自身属性 文本属性和其余修饰
  display width font
  visibility height text-align
  position margin text-decoration
  float padding vertical-align
  clear border white-space
  list-style overflow color
  top min-width background

 

1 .m-box{position:relative;width:600px;margin:0 auto 10px;text-align:center;color:#000;}
相关文章
相关标签/搜索