1、命名

标签、类名都使用小写,单词之间使用短横线分隔开。例:

正确:module-header 错误:moduleHeader 错误:module_header 错误:moduleheader

2、排版

1. 空格。

选择器 与 { 之前必须包含空格。                   

属性名的:后必须包含空格。如:

.selector {  font-weight: bold;}

>+~ 选择器的两边各保留一个空格。如:

label + input {    margin-left: 5px;}

2. 分行。

对于以逗号分隔并且非常长的属性值(例如一堆渐变或者阴影的声明)可以放在多行中,这有助于提高可读性。如:

.selector {
   box-shadow:        1px 1px 1px #000,        2px 2px 1px 1px #ccc inset;    background-p_w_picpath:        linear-gradient(#fff, #ccc),        linear-gradient(#f3c, #4ec); }

当一个样式块有多个选择器时,每个选择器都应占一行。如:

.selector,.selector-secondary,.selector[type="text"] {  padding: 15px;  margin-bottom: 15px;}

3、语法

1. 数值尽量缩写。例:

.selector {  margin: 0px;  opacity: 0.7;}/* 可优化为如下 */.selector {  margin: 0;  opacity: .7;}

2. 声明顺序。

属性的声明顺序应当按照如下顺序进行编写:

  • Position 定位

  • Box model 盒模型

  • Typographic 排版

  • Visual 外观

按照这样的顺序书写可提升浏览器渲染DOM的性能。如:

.selector {  /* 定位 */  position: absolute;  left: 0;  z-index: 100;  /* 盒模型 */  display: block;  float: right;  width: 100px;  /* 排版 */  line-height: 1.5;  color: #333;  text-align: center;  /* 外观 */  background-color: #f5f5f5;  border: 1px solid #fff;  border-radius: 3px;  /* 其他 */  opacity: 1;}

4、CSS文件的分类与引用顺序

我们按照CSS的性质和用途,将CSS文件分成“公共型样式”、“特殊型样式”、“皮肤型样式”,并以此顺序引用。

  • 公共型样式:包括了以下几个部分:“标签的重置和设置默认值”、“统一调用背景图和清除浮动或其他需统一处理的长样式”、“网站通用布局”、“通用模块和其扩展”、“元件和其扩展”、“功能类样式”、“皮肤类样式”。

  • 特殊型样式:当某个栏目或页面的样式与网站整体差异较大或者维护率较高时,可以独立引用一个样式:“特殊的布局、模块和元件及扩展”、“特殊的功能、颜色和背景”,也可以是某个大型控件或模块的独立样式。

  • 皮肤型样式:如果产品需要换肤功能,那么我们需要将颜色、背景等抽离出来放在这里。

  • 项目模块样式:按照功能合理的拆分模块,依照项目而定。

  • 业务独立样式:当前页面独立的样式,无法被模块化的样式。

例如:

合理有序、合理分组,直观,然后是构建工具会自动完成样式的分组、合并、压缩、版本管理。


5、CSS内部的分类及其顺序

1. 重置(reset)和默认(base)(tags):消除默认样式和浏览器差异,并设置部分标签的初始样式,以减少后面的重复劳动!你可以根据你的网站需求设置!

2. 通用(common):通常将公共、通用的模块、布局、元件、皮肤放在这里。

3. 元件、功能、模块,使用2个以上字母开头

按钮(button)可以用 .btn- 开始。

输入框(input)可以用.ipt- 开始。

警告框(alert)可以用 .alert- 开始。

文本(text)可以用 .text- 开始。
浮动(pull)可以用 .pull- 开始。
字体图标(font-icon)可以用 .fi- 开始。

雪碧图标(sprite-icon)可以用 .si- 开始。

4. 状态:常用命名有 activedisabledhoverfocusclosed

5. 脚本(javascript)可以用 .j- 开始。需要脚本控制的类,使用 j-nav 加上,而不要在css文件内使用它。


6、模块化

合适大小的完整语义化单元为一个模块化。比如一类按钮、一类弹出框、一组雪碧图,或者是页面上的个块区域。

既然是一个模块,那么它就有自己的衍伸、扩展和变体。

书写原则:

从大到小(以选择器的范围为准)

从低到高(以等级上的高低为准)
从先到后(以结构上的先后为准)
从父到子(以结构上的嵌套为准)

使用短横线和空格区分,最多4个层级,避免过分嵌套,如果层级过多应拆分模块。

每层都必须带上父级名,除非是语义化标签。例如按钮:

.btn{
   ...        &-primary{
       ...    }        &-success{
       ...    } }

7、雪碧图

当图片色彩过于丰富且无透明要求时,建议采用 jpg 格式并保存为较高质量。

当图片色彩过于丰富又有透明或半透明要求或阴影效果时,建议采用 png24 格式。

图标之间要保留空隙,保持一定的容错性,并且需要保留原始 PSD 文件。

按照模块或元件,把同属于一个模块或元件的图片进行合并,方便模块或元件的维护。

如图:

使用参考线分隔每个等宽等高的单元格,常用的单元格尺寸为 40px*40px,图标显示大小是20px*20px,因为需要照顾到视网膜屏幕。这样的话,每个图标都不需要重标尺去测量了,只需要数一下单元格的个数。

如图:

8、避免

1. 避免使用 css hack

IE 下的样式可以使用 html 条件注释配合一起使用:

例:

.btn{
background: #eee;} .ie8 .btn{
background: #ccc;}

2. 避免使用 @import

@import('...');

9、媒体查询

尽量将媒体查询的位置靠近他们相关的规则。不要将他们一起放到一个独立的样式文件中,或者丢在文档的最底部。

这样做只会让大家以后更容易忘记他们。这里是一个典型的案例。

.element { ... } .element-avatar { ... } .element-selected { ... } @media (min-width: 480px) {
 .element { ...}  .element-avatar { ... }  .element-selected { ... } }

10、编码

样式文件开头

@charset "utf-8"; /* 样式主体 */

11、CSS 预编译

统一使用 scss 来作为 css 预编译工具。

  • docs: 

  • cli: 


12、目录结构

以下是推荐的目录结构

. css |-- varible.scss 公共变量 |-- common 基础样式 |   |-- 0-normalize.scss |   |-- 1-base.scss |   |-- 2-btn.scss |   `-- ... |-- modules 模块样式 |   |-- header.scss |   |-- footer.scss |   |-- layout.scss |   `-- ... `-- app     |-- page1.scss     |-- page2.scss     `-- ...