# FrontEndRule
**Repository Path**: whao311/FrontEndRule
## Basic Information
- **Project Name**: FrontEndRule
- **Description**: 根据自身实践所总结出来的前端规范,希望得到评价与补全
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2016-04-22
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FrontEndRule
根据自身实践所总结出来的前端规范,希望得到评价与补全
##一、基本原则
1. 统一**两个空格**缩进,不要使用TAB或TAB、空格混搭(大部分编辑器可设置一个tab键代替几个空格)
2. 省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,如:
```
```
3. 注释
* HTML
模块注释:
```
...
```
区域注释:
```
```
* CSS
- 注释统一用'/* */'(scss中也不要用'//'),具体参 照下边的写法;
- 缩进与下一行代码保持一致;
- 可位于一个代码行的末尾,与代码间隔一个空格。
```css
/* Modal header */
.modal-header {
...
}
/*
* Modal header
*/
.modal-header {
...
}
.modal-header {
/* 50px */
width: 50px;
color: red; /* color red */
}
```
* JS
- 单行注释
- 双斜线后,必须跟一个空格;
- 缩进与下一行代码保持一致;
- 可位于一个代码行的末尾,与代码间隔一个空格。
```javascript
if (condition) {
// if you made it here, then all security checks passed
allowed();
}
var zhangsan = 'zhangsan'; // one space after code
```
- 多行注释
- 最少三行, '*'后跟一个空格,具体参照下边的写法,建议在以下情况下使用
- 难于理解的代码段
- 可能存在错误的代码段
- 浏览器特殊的HACK代码
- 业务逻辑强相关的代码
```javascript
/*
* init
*/
var x = 1;
```
- 文档注释
各类标签@param, @method等请参考 [JSDoc Guide]
复杂函数需要注释好函数的作用以及各参数
```
/**
* @func
* @param {string} a - 参数a
* @param {number} b=1 - 参数b默认值为1
* @param {object} c - 参数d为一个对象
*/
function foo(a, b, c) {}
```
## 二、HTML
#### 1. 语法
* 缩进使用soft tab(4个空格)
* 嵌套的节点应该缩进
* 在属性上,使用双引号,不要使用单引号
* 属性名全小写,用中划线做分隔符
* 文件应以""首行顶格开始,推荐使用""
* 必须声明文档的编码charset,且与文件本身编码保持一致,推荐使用UTF-8编码
#### 2. 属性顺序
属性应该按照特定的顺序出现以保证易读性:
* id
* class
* name
* data-*
* src, for, type, href, value , max-length, max, min, pattern
* placeholder, title, alt
* aria-*, role
* required, readonly, disabled
#### 3. 遵循HTML标准和语义
在编写HTML代码时,使用语义化标签,避免多余的父节点;
要用尽量小的复杂度和尽量少的标签来解决问题。
#### 4. 结构、表现、行为三者分离,避免内联
* 使用link将CSS文件引入,并置于head中
* 使用script将JS文件引入,并置于body底部
## 三、CSS
#### 1. 书写格式
* 使用4个空格缩进
* 避免选择器嵌套层级过多,尽量少于3级
* 以下情况需要换行:
- ' { '后和' } '前
- 每个属性独占一行
- 多个规则的分隔符','后
* 以下情况需要空行:
- 文件最后保留一个空行
- '}'后最好跟一个空行,包括scss中嵌套的规则
* 颜色16进制用小写字母、简写
*
#### 2. 命名规则
* 使用语义化、通用的命名方式
* 使用连字符 - 作为 ID、Class 名称界定符,不要驼峰命名法和下划线
* scss中的变量、函数、混合、placeholder采用驼峰式命名
#### 3. 缩写属性
CSS提供了各种缩写属性(如 font 字体)应该尽可能使用,即使在只设置一个值的情况下。
```css
/* 不推荐 */
border-top-style: none;
font-family: palatino, georgia, serif;
font-size: 100%;
line-height: 1.6;
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
```
```css
/* 推荐 */
border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
padding: 0 1em 2em;
```
#### 4. 书写顺序
为了保证更好的可读性和可扫描重要。作为最佳实践,我们应该遵循以下顺序:
1)结构性属性:
* display
* position, left, top, right etc.
* overflow, float, clear etc.
* margin, padding
2)表现性属性:
* background, border etc.
* font, text
#### 5. 结构与样式分离
减少重复的代码精简CSS,提高代码复用性,如
```css
/*not good*/
.btn-primary{
width: 100px;
height: 50px;
padding:5px 3px;
background: #ccc;
color: #000;
}
.btn-delete{
width: 100px;
height: 50px;
padding:5px 3px;
background: #888;
color: #fff;
}
/*good*/
.btn{
width: 100px;
height: 50px;
padding:5px 3px;
}
.primary{
background: #ccc;
color: #000;
}
.delete{
background: #888;
color: #fff;
}
```
#### 5. 其他
* 不允许有空的规则
* 元素选择器用小写字母
* 去掉小数点前面的0
* 去掉数字中不必要的小数点和末尾的0
* 属性值'0'后面不要加单位
## 四、JS
#### 1.命名
* **变量、函数、函数的参数、类的方法属性**使用骆驼命名法
```javascript
var loadingModules = {};
```
* **私有属性、变量和方法**以下划线 _ 开头
```javascript
var _privateMethod = {};
```
* **常量**, 使用全部字母大写,单词间下划线分隔的命名方式
```javascript
var CLICK_SUM = 100;
```
* 命名语法
- **类名**,使用名词。
```
function Engine(options) {}
```
- **函数名**,使用动宾短语
```
function getStyle(element) {}
```
- boolean 类型的变量使用 is 或 has 开头。
```javascript
var isReady = false;
var hasMoreCommands = false;
```
- 构造函数,大写第一个字母
```javascript
function Person(name) {
this.name = name;
}
```
- jquery对象必须以'$'开头命名
```
var $body = $('body');
```
#### 2.声明
一个函数作用域中所有的变量声明提到函数首部,除了for (...)里面使用的一次性变量。var的数量不做限制,但要统一,一行定义一个变量。
#### 3. 数组、对象
* 对象属性名不需要加引号;
* 对象以缩进的形式书写,不要写在一行;
* 数组、对象最后不要有逗号。
```javascript
// not good
var a = {
'b': 1
};
var a = {b: 1};
var a = {
b: 1,
c: 2,
};
// good
var a = {
b: 1,
c: 2
};
```
#### 4. 空格
* 数值操作符(如, +/-/*/% 等)、比较符(大于、小于、等于)两边留空格;
* 逗号、冒号、分号后要留一个空格(如果后面还有内容的话);
* 行尾不要有空格;
* 点号前后不要出现空格;
* 函数名末尾和左括号之间不要出现空格
```javascript
// not good
++ x;
y ++;
z = x?1:2;
// good
++x;
y++;
z = x ? 1 : 2;
// not good
var a = [ 1, 2 ];
// good
var a = [1, 2];
// not good
var a = ( 1+2 )*3;
// good
var a = (1 + 2) * 3;
// not good
for(i=0;i<6;i++){
x++;
}
// good
for (i = 0; i < 6; i++) {
x++;
}
```
#### 5. 书写习惯
* 使用两个空格缩进
* 单行过长应在适当位置予以换行,增强可读性,长字符串拼接用加号。
* 句末必须使用分号结束
* if、while、for、do语句的执行体总是用"{"和"}"括起来,即使在其结构体内只有一条语句
* 语法意义相互独立的代码将用空行分隔
* JSON对象的最后一个字段、数组最后一个元素后面都不能加','
* 字符串拼接在少量(次数为个位数)的情况下可以使用'+', 大量的时候使用数组 join(), 或者尽可能采用模板引擎渲染:比如jsRender等
* 不要使用魔法数字,尽量定义一个常量来表示该数字,并加上相应的注释,否则后期可能出现因为数字变化而导致牵一发而动全身,需要到处修改,增加维护成本
```javascript
//如汇率换算
//not god
dollarPrise = 6.5*price;
//good
var RATE_USA = 6.5;
dollarPrise = RATE_USA*price;
```
* 不要直接使用undefined进行变量判断;使用typeof和字符串'undefined'对变量进行判断。
* 用 === , !== 代替'==', '!='
#### 6.代码格式化
建议使用jsformat插件使代码格式化,易于阅读
[JSDoc Guide]:[http://yuri4ever.github.io/jsdoc/#@file]