日期:2014-05-16  浏览次数:20791 次

通用 CSS 笔记、建议与指导

# 通用 CSS 笔记、建议与指导

?

---

?

在参与规模庞大、历时漫长且人手众多的项目时,所有开发者遵守如下规则极为重要:

?

+ **保持 CSS 的可维护性**

+ **保持代码清晰易懂**

+ **保持代码的可拓展性**

?

为了实现这一目标,我们要采用诸多方法。

?

本文档第一部分将探讨语法、格式以及 CSS 分析;第二部分将从方法论、思维框架以及编写与规划 CSS 的态度入手。

?

## 目录

?

* CSS 文档分析

? * 总览

? * 单一文件与多文件

? * 目录

? * 章节标题

* 代码顺序

* 规则解析

* 命名规范

? * JavaScript 钩子

? * I18n

* 注释

? * 注释的拓展用法

? ? * 准修饰选择器

? ? * 代码标签

? ? * 继承标记

* 编写 CSS

* 添加新部分

* 面向对象 CSS

* 布局

* 界面尺寸

? * 字号调节

* 简写

* IDs

* 选择器

? * 过修饰选择器

? * 选择器性能

* 选择器继承

* `!important`

* 魔数与绝对比例

* 条件判断

* Debugging

* 预处理

?

?

?

---

?

## CSS 文档分析

?

无论编写什么文档,我们都应当尽力维持统一的风格,包括统一的注释、统一的语法与统一的命名规范。

?

### 总则

?

尽量将行宽控制在 80 字节以下。渐变(gradient)相关的语法以及注释中的 URL 等可以算作例外,毕竟这部分我们也无能为力。

?

我倾向于用 4 个空格而非 Tab 缩进,并且将声明拆分成多行。

?

### 单一文件与多文件

?

有些人喜欢将样式写成一个大文件,这并不赖,而且如果你按照下文的规则来编写的话也不会遇到什么问题。我在迁移至 Sass 之后,开始将样式拆分成众多小文件。这也不赖。无论你采用什么方式,下文中的规则都将适用。这两种写法仅仅在目录以及区块标题上有所差异。

?

### 目录

?

在 CSS 的开头,我会写一份目录,例如:

?

? ? /*------------------------------------*\

? ? ? ? $CONTENTS

? ? \*------------------------------------*/

? ? /**

? ? ?* CONTENTS............You’re reading it!

? ? ?* RESET...............Set our reset defaults

? ? ?* FONT-FACE...........Import brand font files

? ? ?*/

?

这份目录可以告诉其他开发者这个文件中具体含有哪些内容。这份目录中的每一项都与其对应的区块标题相同。

?

如果你在维护一份规模较大的单文件 CSS,对应的区块将也在同一文件中。如果你是在编写一组小文件,那么目录中的每一项应当对应相应的 @include 语句。

?

### 区块标题

?

目录应当对应区块的标题。请看如下示例:

?

? ? /*------------------------------------*\

? ? ? ? $RESET

? ? \*------------------------------------*/

?

区块标题前缀 `$` 可以让我们使用([Cmd|Ctrl]+F)命令查找 `$[SECTION-NAME]`,同时 **将搜索范围限制在区块标题中**。

?

如果你在维护一份大文件,那么在区块之间空 5 行,如下:

?

? ? /*------------------------------------*\

? ? ? ? $RESET

? ? \*------------------------------------*/

? ? [Our

? ? reset

? ? styles]

? ??

? ??

? ??

? ??

? ??

? ? /*------------------------------------*\

? ? ? ? $FONT-FACE

? ? \*------------------------------------*/

?

在大文件中快速翻动时这些大块的空档有助于区分区块。

?

如果你在维护多份、以 @include 连接的 CSS 的话,在每份文件头加上标题即可,不必这样空行。

?

## 顺序

?

尽量按照特定顺序编写规则,这将确保你充分发挥 CSS 缩写中第一个 <i>C</i> 的意义:cascade,层叠。

?

一份规划良好的 CSS 应当按照如下排列:

?

1. **Reset** 万物之根源

2. **元素类型** 没有设置 class 的 `h1`、`ul` 等

3. **对象以及抽象内容** 最一般、最基础的设计模式

4. **子元素** 由对象延伸出来的所有拓展及其子元素

5. **修补** 针对异常状态

?

如此一来,当你依次编写 CSS 时,每个区块都可以自动继承在它之前区块的属性。这样就可以减少代码相互抵消的部分,减少某些特殊的问题,构成设计更理想的 CSS 结构。

?

关于这方面的更多信息,强烈推荐 Jonathan Snook 的 [SMACSS](http://smacss.com)。

?

## CSS 规则集分析

?

? ? [selector]{

? ? ? ? [property]:[value];

? ? ? ? [<- Declaration ->]

? ? }

?

? ? [选择器]{

? ? ? ? [属性]:[值];

? ? ? ? [<- 声明 ->]

? ? }

?

编写 CSS 样式时,我习惯遵守这些规则:

?

* class 名称以连字符(-)连接,除了下文提到的 BEM 命名法;

* 缩进 4 空格;

* 声明拆分成多行;

* 声明以相关性顺序排列,而非字母顺序;

* 有前缀的声明适当缩进,对齐其值;

* 缩进样式从而反映 DOM;

* 保留最后一条声明结尾的分号。

?

例如:

?

? ? .widget{

? ? ? ? padding:10px;

? ? ? ? border:1px solid #BADA55;

? ? ? ? background-color:#C0FFEE;

? ? ? ? -webkit-border-radius:4px;

? ? ? ? ? ?-moz-border-radius:4px;

? ? ? ? ? ? ? ? bor