命名规范
项目命名
全部采用小写方式,包含多个单词时,使用中划线 ( - ) 分隔。
例:my-project-name
目录命名
参照项目命名规则;
有复数结构时,要采用复数命名法。
例:pages, styles,images,components, utils,data-models
vue的项目中,components下的组件目录名,使用大驼峰命令
例:LeftBar,BackToTop
javaScript 文件命名
参照项目命名规则;
例:error-log.js,get-page-title.js
css,less文件命名
参照项目命名规则;
例:index.css,retina-sprites.css
HTML文件命名
参照项目命名规则;
例:avatar-upload.html
如果使用Vue或者React技术栈,组件Component命名
- 能直观的感受当前组件的用途
- 所有组件名字使用大驼峰式命名法:首字母大写
例:MixChart.vue
HTML规范
语法:
- 缩进使用 tab(2 个空格);
- 嵌套的节点应该缩进;
- 在属性上,使用双引号,不要使用单引号;
- 属性名全小写,用中划线(-)做分隔符;
- 要在自动闭合标签结尾处使用斜线;
<!DOCTYPE html>
<html>
<head>
<title>Page title</title>
</head>
<body>
<img src="images/company_logo.png" alt="Company" />
<!-- 属性名全小写,用中划线(-)做分隔符 -->
<h1 class="hello-world">Hello, world!</h1>
</body>
</html>
标准模式
在开头规定 doctype,来启动标准模式,doctype 要大写。
<!DOCTYPE html>
<html>
...
</html>
规定字符编码
在HTML中指定编码<meta charset="utf-8">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
...
</html>
IE 兼容模式
使用 meta 标签指定页面应该使用什么版本的 IE 来渲染。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
...
</html>
语义化标签
html 的标签能使用语义化的,尽量使用语义化标签,避免一个页面都是 div 或者 p 标签。
<!-- bad -->
<div>
<p></p>
</div>
<!-- good -->
<header></header>
<footer></footer>
外链资源URL协议
省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,使 URL 成为相对地址,避免Mixed Content 问题,减小文件字节数。
Mixed Content:http和https混用造成的问题。
其它协议(ftp 等)的 URL 不省略。
<!-- bad -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.3"></script>
<!-- good -->/* 推荐 */
<script src="//cdn.jsdelivr.net/npm/vue@2.5.3"></script>
<!-- bad -->
.example {
background: url(http://www.google.com/images/example);
}
<!-- good -->/* 推荐 */
.example {
background: url(//www.google.com/images/example);
}
标签中的属性顺序
class
(class 是最高的复用设计,应该放在最前)id name
(id
尽量少用)data-\\*
自定义属性(属性名称全小写用-
做连接)src
(资源文件)placeholder title alt
(提示)required readonly disable
(辅助)
CSS规范
命名
- 类名使用
小写字母
,以中划线( - )
分隔 - id 采用
驼峰式
命名 - less、scss 中的变量、函数、混合、placeholder 采用
驼峰式
命名
/* class */
.element-content {
...;
}
/* id */
#myDialog {
...;
}
/* 变量 */
$colorBlack: #000;
/* 混合 */
@mixin centerBlock {
...;
}
属性声明顺序
书写顺序前后为:
- 位置属性(
position,top,right,z-index,display,flaot
) - 自身属性(
width height padding border margin background
) - 文字(
font,line-height,letter-spacing, color
) - 其他(
animation,transition
)
缩进
使用 tab 缩进(2 个空格)
.element {
border-radius: 10px;
width: 50px;
height: 50px;
}
分号
每个声明结束都要加分号
.div{
width: 50px;
height: 50px;
}
引号
- 最外层统一使用双引号
- url 的内容要用引号
- 属性选择器中的属性值需要引号
每个声明结束都要加分号
.box:after {
content: "";
background-image: url("logo.png");
}
li[data-name="single"] {
...;
}
颜色
- 颜色16进制用小写字母
- 颜色16进制尽量用简写
/* bad */
.element {
color: #ABCDEF;
background-color: #001122;
}
/* good */
.element {
color: #abcdef;
background-color: #012;
}
媒体查询
尽量将媒体查询的规则靠近与他们相关的规则,不要将他们一起放到一个独立的样式文件中,或者丢在文档的最底部,这样做只会让大家以后更容易忘记他们.
.element {
...
}
.element-avatar{
...
}
@media (min-width: 720px) {
.element {
...
}
.element-avatar {
...
}
}
Less/scss相关规范
CSS选择器不要超过3层
- 避免嵌套过多,
LESS/SCSS嵌套最多不能超过5层
- 组织顺序
- @import
- 变量声明
- 样式声明
@import "mixins/size.less";
@colorBlack: #000;
.page {
width: 960px;
margin: 0 auto;
}
其他规范
去掉小数点后面的0,如:rgba(0,0,0,0.5)=>rgba(0,0,0,.5)
- 尽量少用元素选择器
JavaScript 规范
缩进
使用 tab 缩进(2 个空格)
if (x < y) {
x += 2;
} else {
x += 1;
}
命名规范
- 变量命名:小驼峰命名
- 参数名:小驼峰命名
- 函数名:小驼峰命名
- 方法/属性名:小驼峰命名
- 类名开头大写
- 常量全大写,用下划线 _ 连接
- 私有属性、变量和方法以下划线 _ 开头
- Boolean类型应当使用 is , has 等开头
- 变量应当使用名词,尽量符合当时语义
var loadingModules ;
const MAX_COUNT = 10;
function insertHTML(element, html) {}
变量声明
- 一个函数作用域中所有的变量声明尽量提到函数
首部
。尽量使用 let 和 const 取代var。 - 在let和const之间,建议优先使用
const
,尤其是在全局环境,不应该设置变量,只应设置常量。
function doSomethingWithItems(items) {
// use one var
let value = 10,
result = value + 10,
i,
len;
for (i = 0, len = items.length; i < len; i++) {
result += 10;
}
}
模板字符串
需要拼接,使用模板字符串
let str = 'world'
let string = `hello ${str}`
空格
以下几种情况不用写空格:
- 对象的属性名后
- 函数调用括号前
- 无论是函数声明还是函数表达式,’('前不要空格
- 数组的
[
后和]
前 - 运算符
(
后和)
前
以下几种情况一定要写空格:
- 三元运算符’?:'前后
- 逗号后必须要有空格
- 代码块
{
前 - 关键字前:
else, while, catch, finally
- 关键字后:
if, else, for, while, do, switch, case, try,catch, finally, with, return, typeof
- 对象的属性值前
- for 循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
- 函数声明,函数表达式
(
前不要空格,)
后空格 - 函数的参数之间
空行
以下几种情况一定要有空行
- 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
- 注释前(当注释在代码块的第一行时,则无需空行)
- 代码块后
- 文件最后保留一个空行
var x = 1;
// 注释前要有空行
if (x >= 1) {
var y = x + 1;
}
引号
最外层统一使用单引号,除非字符串嵌套的情况。
// bad
var x = "test";
// good
var y = 'foo',
z = '<div id="test"></div>';
括号
下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with
。
// bad
if (condition) doSomething();
// good
if (condition) {
doSomething();
}
对象,数组
- 对象属性名不需要加引号,如对象属性名是中划线命名的需要加引号(eslint 的 rules)
- 对象以缩进的形式书写,不要写在一行(单个属性可以写一行,es6 导入方法时可以使用单行)
- 数组、对象最后不要有逗号
// good
var a = {
b: 1,
c: 2
};
undefined
永远不要直接使用 undefined 进行变量判断;
使用 typeof 和字符串’undefined’对变量进行判断。
// bad
if (user=== undefined) {
...
}
// good
if (typeof user=== 'undefined') {
...
}
不允许存在多层嵌套的条件判断和循环(最多三层)
条件判断能使用三目运算符和逻辑运算符解决的,就不要使用条件判断,但是谨记不要写太长的三目运算符
。
其它
- 换行符统一用’LF’
- 对上下文this的引用只能使用
'_this', 'that', 'self'
其中一个来命名 - 行尾不要有空白字符
- 不允许有空的代码块(如果实在需要,可以在代码块中写注释)
注释规范
单行注释 ( // )
- 单独一行:// (双斜线)与注释文字之间保留一个空格
- 在代码后面添加注释://(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字之间保留一个空格。
- 注释代码://(双斜线)与代码之间保留一个空格。
例:
// 调用了一个函数;(1)单独在一行
setTitle();
var maxCount = 10; // 设置最大量;(2)在代码后面注释
// setData(); // (3)注释代码
多行注释 ( / 注释说明 / )
- 若开始(/
*
和结束(*
/)都在一行,推荐采用单行注释 - 若至少三行注释时,第一行为/
*
,最后行为*
/,其他行以*
开始,并且注释文字与*
保留一个空格。
例:
/*
* 代码执行到这里后会调用setTitle()函数
* setTitle():设置title的值
*/
setTitle();
函数 ( 方法 ) 注释
函数(方法)注释也是多行注释的一种,但是包含了特殊的注释要求,参照 javadoc (百度百科)
/**
* 函数说明
* @关键字
*/
例:
/**
* 判断对象是否为空
* @param obj
* @returns {boolean}
*/
export const isNotEmpty = (obj) => {
let flag = true;
if (obj === "" || obj == null || obj === undefined || obj === "undefined") {
flag = false;
}
return flag;
};