[TOC]
## 前言
本文就css代码规范进行简单的整理,不完善以及不正确之处欢迎大家批评指正。
## 选择器
* 选择器命名
选择器命名,class命名时选择语义化的,不建议使用直接样式效果,比如.red,.fontBold,另外整体的样式文件中命名建议使用统一的规则,或者驼峰式,或者中划线分割,命名注意缩写,避免与id重名,不建议通过1 2 3等序号命名。关于命名规则以及常见类名可以本站搜索相关文章
* 选择器选择原则
基本的选择器中,尽量使用类选择器;复杂选择器中,尽量少使用层次、属性的相关选择器。
* 样式重用
样式重复可以一定程度的避免,用类样式来提炼公共样式,建议多用样式的预处理,比如less。基本使用类选择器实现重用最简单实用。
* 合理的避免id的使用
原因有二:一个是id修饰权重比较高,不容易被class修改重定义;第二个,id一般被用来定义特定模块的。如果该模块是可重用的,或者不具有特殊意义的不建议使用。
* 筛选出同时具有
中间没有任何间隔,与群组选择器,后代选择器区分开
* 非主流选择器
主要包括:伪类选择器,结构选择器,伪元素,属性选择器,语言选择器等。可以本站搜索选择器攻略查看所有的选择器分类以及使用。基于兼容性考虑,建议大家慎用。
* 选择器层级
层级关系确定在3层以内,去除不必要的层级关系,简化dom结构或者样式组件结构。
## 样式分类
* 全局样式
顾名思义,没有任何限制条件的样式,可以任何位置使用并达到其显示效果。如果可能有样式代码冲突的,建议写在样式组合中最后。定义全局样式的时候,注意样式污染的问题。一般建议用`.c- `来区分。
* 布局样式
一般用于页面布局,我们经常会把页面布局和模块混合起来,或者根本就不区分。这实际是因为我们对样式理解不够深刻。实际。从视图分析,很多模块在宽高以及整体布局上都是基于整体布局的。而一些整体布局又是可以重用的,所以这部分建议单独分出来,提高开发效率。一般建议用`.g- `来区分。
* 模块样式
以模块的思维去写样式代码,按照层级关系依次展开样式,保证模块清晰同时使得一些样式名称可复用,比如title,price等。其中模块样式顶级也可以理解为命名空间,模块子样式可以追加模块样式前缀,比如header-nav。模块样式是样式代码中占据比例最多的部分,针对具体样式,希望既能做到针对业务,又能提炼出可复用、耦合度低的优质模块。一般建议用`.m- `来区分。
* 组件样式
页面中总有一部分常规组件是我们经常用的,定义好他们对我们开发工作有事半功倍的效果。这些组件常见的有,按钮,单选框,多选框,下拉框,时间选择控件等。一般建议用`.u- `来区分。
* 功能样式(交互样式)
有些页面中的元素是有额外的含义的,涉及到这类样式时,有时有特定的交互,或者功能,或者内容,我们针对这部分定义为功能样式,比如删除,查看详情,增加,搜索,这些在涉及具体功能时追加的效果,我们会写在功能样式中。一般建议用`.f- `来区分。
* 皮肤样式
任何一个网站或者页面都有其布局思想,在这个整体的布局当中,颜色自然是不可缺少的,针对主色,交互色,响应颜色,配色等,我们都会把这一类归到皮肤样式中。一般建议用`.s- `来区分。
## 样式优化
* 合理利用继承和默认
1. 可继承的样式如果是正确的,不用重写;如果是不对的,纠正;
2. 任何样式都有默认值。或者是继承来的默认值,针对默认值要清楚,决定是否调整
* 抽离公共样式
代码中有超过2个类超过3行以上公用代码,建议抽离公共样式到公共区或者提炼公共样式
* 复合属性缩写
比如font,border,margin,padding,background等
* 减少层级关系
层级关系越多,代码量越大,同时访问越慢
* 使用高效能的选择器
多使用class选择器,css的查询顺序为从右向左,所以最后一个选择器基本决定了你第一次匹配得到的整体数量。
* 重绘与重排
影响标签显示样式的叫重绘;影响标签大小-盒模型,位置关系的称为重排。尽量减少这两种,如果有需要,优先选择用重绘代替重排。
* 待补充
## 书写规范
1. 规则完成一组之后换行,
2. 选择器开始语法之前大括号前面加空格。
3. 只有单行样式时放一行,两行以上每行样式一行,每一行添加分号,最后一行也加。
4. 每个样式属性值前添加空格而属性名之后不加空格。
5. 数值为0的不用加单位,数值小于1的前面的0可以省略。
6. 没有边框的时候写border:none
7. 减少使用低性能的选择器,比如标签,*,多层
8. 除了颜色以及字体外,所有的代码小写,如果有引号使用单引号
9. 字体名称请映射成对应的英文名
10. 背景图片请合理使用csssprites,按照模块、业务、页面来划分均可
11. css背景图片的文件类型,请按照以下原则来保存:如果背景图片有动画,则保存成gif,如果没有动画,也没有半透明效果,则保存成png-8,如果有半透明效果,则保存成png-24
12. 清除浮动采用样式,不使用增加空标签的方式
13. 避免过小的背景图片平铺
14. 减少使用important
15. 待补充...
## 编写顺序
1. 显示属性
display/list-style/position/float/clear
2. 盒子模型
width/height/margin/padding/border
3. 背景
background
4. 行高 文本属性其他
line-height,color/font/text-decoration/text-align/,
text-indent/vertical-align/white-space/content,
cursor/z-index/zoom
5. css3属性
transform/transition/animation/box-shadow/border-radius
6. 链接的样式请严格按照如下顺序添加
a:link -> a:visited -> a:hover -> a:active
## 注释规范
注释长度要求:注释中的每一行长度不超过40个汉字,或者80个英文字符
* 文件顶部注释
``` css
/*
* @description: xxxxx中文说明
* @author: zhifu.wang
* @update: zhifu.wang (2012-10-17 18:32)
*/
```
* 模块注释,模块注释必须单独写在一行
``` css
/* module: module1 by zhifu.wang */
```
* 单行注释,单行注释可以写在单独一行,也可以写在行尾
``` css
/* this is a short comment */
```
* 多行注释 :多行注释必须写在单独行内
``` css
/*
* this is comment line 1.
* this is comment line 2.
*/
```
* 特殊注释 :用于标注修改、待办等信息
``` css
/* TODO: xxxx by zhifu.wang 2012-10-18 18:32 */
/* BUGFIX: xxxx by zhifu.wang 2012-10-18 18:32 */
```
## 浏览器hack
* 浏览器的hack :能少用就少用hack ,浏览器的hack如下,注意按照一定的顺序书写:
-webkit-,-moz-,-o-,-ms-,通用的,针对ie不同版本的,归纳如下:
``` css
IE6 _property: value
IE7 +property: value
IE6/7 *property: value
IE6/7/8/9 property: value\9
```
## 其他
待补充...
- 前端入门
- 前端入职须知
- 前端自我定位
- pc与手机页面差别
- 前端书单
- 前端种子计划
- 前端技术栈
- ps
- ps入门阶段
- html
- html入门
- html代码规范
- meta
- table
- iframe
- a标签详解
- image
- html代码审查工具
- h5专题
- h5入门
- h5新增属性
- canvas画布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入门必学
- css代码规范
- 项目字体规范
- css基本位置布局
- css常见样式命名规则
- css代码优化建议
- css常用样式名
- css选择器攻略
- css盒子模型的理解
- css属性继承与默认值
- css代码审查工具
- css中常见的知识盲区
- css3新特性浅谈
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技术
- 文本两端对齐
- css之浮动解决方案
- css优化建议
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固宽&变宽布局
- 宽高固定比例的盒模型
- 样式预处理语言
- less教程
- sass教程
- postcss教程
- js
- javascript入门
- js代码规范
- js基础拓展
- js代码审查工具
- js性能优化
- js基本语句
- 基本运算
- 基本语句语法
- js对象
- es6入门
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入门
- jq核心思想
- jq基本语法
- jq插件库汇总
- js常用技术
- break&continue区别
- js对日期转换
- js控制运动-move.js
- 原生js-cookie语法
- ajax请求后回调
- 表单数据序列化
- zepto
- zepto入门
- 百度touchjs
- js编程
- 插件库
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互组件
- layerjs
- java
- java入门
- java基本语句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入门
- git教程
- git入门
- git分支
- git-tag管理
- git注意事项
- git-torise入门
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容适配文档
- pc端兼容bug汇总
- ie兼容bug汇总
- 手机兼容bug汇总
- web安全
- jeecms
- web存储
- app/h5组件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域问题
- markdown教程
- 常用工具
- postman-api调试
- web常识
- 浏览器ua统计
- ui框架
- easyui
- bootstrap
- 入门推荐
- weui
- sui-pc
- sui-mobile
- layerUi