坚持制定好的代码规范。
无论团队人数多少,代码应该同出一门。
如果您觉得有不合理的地方,请指正修改。
命名规范
项目命名、HTML文件命名、CSS文件命名、JS文件命名、目录命名、图片命名:
全部采用小写方式, 以下划线分隔。例:my_project_name
HTML
1、语法
l 缩进使用soft tab(4个空格);
l 嵌套的节点应该缩进;
l 在属性上,使用双引号,不要使用单引号;
l 属性名全小写,用中划线做分隔符;
l 不要在自动闭合标签结尾处使用斜线;
l 不要忽略可选的关闭标签,例:</li>
和 </body>
。
2、引入CSS, JS
根据HTML5规范, 通常在引入CSS和JS时不需要指明 type
,因为 text/css
和text/javascript
分别是他们的默认值。
3、属性顺序
属性应该按照特定的顺序出现以保证易读性;
class
id
name
data-*
src
,for
,type
,href
,value
,max-length
,max
,min
,pattern
placeholder
,title
,alt
aria-*
,role
required
,readonly
,disabled
class是为高可复用组件设计的,所以应处在第一位;
id更加具体且应该尽量少使用,所以将它放在第二位。
4、boolean属性
boolean属性指不需要声明取值的属性,XHTML需要每个属性声明取值,但是HTML5并不需要;boolean属性的存在表示取值为true,不存在则表示取值为false。
5、JS生成标签
在JS文件中生成标签让内容变得更难查找,更难编辑,性能更差。应该尽量避免这种情况的出现。
6、减少标签数量
在编写HTML代码时,需要尽量避免多余的父节点;
很多时候,需要通过迭代和重构来使HTML变得更少。
7、实用高于完美
尽量遵循HTML标准和语义,但是不应该以浪费实用性作为代价;
任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。
CSS, SCSS
1、缩进
使用soft tab(4个空格)。
2、分号
每个属性声明末尾都要加分号。
3、空格
以下几种情况不需要空格:
- 属性名后
- 多个规则的分隔符','前
!important
'!'后- 属性值中'('后和')'前
- 行末不要有多余的空格
以下几种情况需要空格:
- 属性值前
- 选择器'>', '+', '~'前后
- '{'前
!important
'!'前- 属性值中的','后
- 注释'/*'后和'*/'前
4、换行
以下几种情况不需要换行:
- '{'前
以下几种情况需要换行:
- '{'后和'}'前
- 每个属性独占一行
- 多个规则的分隔符','后
5、注释
文件顶部注释(推荐使用)
/*
* @description: 中文说明
* @author: name(2016-05-16)
* @update: name( 2016-05-18)
*/
注释统一用'/* */';
缩进与下一行代码保持一致;
可位于一个代码行的末尾,与代码间隔一个空格。
6、引号
最外层统一使用双引号;
url的内容要用引号;
属性选择器中的属性值需要引号。
7、命名
- 类名使用小写字母,以中划线分隔
- id采用驼峰式命名
- scss中的变量、函数、混合、placeholder采用驼峰式命名
(1)页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center | (2)导航 导航:nav 主导航:mainbav 子导航:subnav 顶导航:topnav 边导航:sidebar 左导航:leftsidebar 右导航:r ightsidebar 菜单:menu 子菜单:submenu 标题: title 摘要: summary | (3)功能 标志:logo 广告:banner 登陆:login 登录条:loginbar 注册:regsiter 搜索:search 功能区:shop 标题:title 加入:joinus 状态:status 按钮:btn 滚动:scroll 标签页:tab 文章列表:list | (3)功能 提示信息:msg 当前的: current 小技巧:tips 图标: icon 注释:note 指南:guild 服务:service 热点:hot 新闻:news 下载:download 投票:vote 合作伙伴:partner 友情链接:link 版权:copyright |
9、颜色
颜色16进制用小写字母;
颜色16进制尽量用简写。
10、媒体查询
尽量将媒体查询的规则靠近与他们相关的规则,不要将他们一起放到一个独立的样式文件中,或者丢在文档的最底部,这样做只会让大家以后更容易忘记他们。
11、其他
不允许有空的规则;
元素选择器用小写字母;
去掉小数点前面的0;
去掉数字中不必要的小数点和末尾的0;
属性值'0'后面不要加单位;
同个属性不同前缀的写法需要在垂直方向保持对齐,具体参照右边的写法;
无前缀的标准属性应该写在有前缀的属性后面;
不要在同个规则里出现重复的属性,如果重复的属性是连续的则没关系;
不要在一个文件里出现两个相同的规则;
用 border: 0;
代替 border: none;
;
发布的代码中不要有 @import
;
尽量少用'*'选择器。
JavaScript
1、缩进
使用soft tab(4个空格)。
2、单行长度
不要超过80,但如果编辑器开启word wrap可以不考虑单行长度。
3、分号
以下几种情况后需加分号:
- 变量声明
- 表达式
- return
- throw
- break
- continue
- do-while
4、空格
以下几种情况不需要空格:
- 对象的属性名后
- 前缀一元运算符后
- 后缀一元运算符前
- 函数调用括号前
- 无论是函数声明还是函数表达式,'('前不要空格
- 数组的'['后和']'前
- 对象的'{'后和'}'前
- 运算符'('后和')'前
以下几种情况需要空格:
- 二元运算符前后
- 三元运算符'?:'前后
- 代码块'{'前
- 下列关键字前:
else
,while
,catch
,finally
- 下列关键字后:
if
,else
,for
,while
,do
,switch
,case
,try
,catch
,finally
,with
,return
,typeof
- 单行注释'//'后(若单行注释和代码同行,则'//'前也需要),多行注释'*'后
- 对象的属性值前
- for循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
- 无论是函数声明还是函数表达式,'{'前一定要有空格
- 函数的参数之间
5、空行
以下几种情况需要空行:
- 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
- 注释前(当注释在代码块的第一行时,则无需空行)
- 代码块后(在函数调用、数组、对象中则无需空行)
- 文件最后保留一个空行
6、换行
换行的地方,行末必须有','或者运算符;
以下几种情况不需要换行:
- 下列关键字后:
else
,catch
,finally
- 代码块'{'前
以下几种情况需要换行:
- 代码块'{'后和'}'前
- 变量赋值后
7、单行注释
双斜线后,必须跟一个空格;
缩进与下一行代码保持一致;
可位于一个代码行的末尾,与代码间隔一个空格。
8、多行注释
最少三行, '*'后跟一个空格,具体参照右边的写法;
建议在以下情况下使用:
- 难于理解的代码段
- 可能存在错误的代码段
- 浏览器特殊的HACK代码
- 业务逻辑强相关的代码
9、引号
最外层统一使用单引号。
10、变量命名
- 标准变量采用驼峰式命名(除了对象的属性外,主要是考虑到cgi返回的数据)
- 'ID'在变量名中全大写
- 'URL'在变量名中全大写
- 'Android'在变量名中大写第一个字母
- 'iOS'在变量名中小写第一个,大写后两个字母
- 常量全大写,用下划线连接
- 构造函数,大写第一个字母
- jquery对象必须以'$'开头命名
11、变量声明
一个函数作用域中所有的变量声明尽量提到函数首部,用一个var声明,不允许出现两个连续的var声明。
12、函数
无论是函数声明还是函数表达式,'('前不要空格,但'{'前一定要有空格;
函数调用括号前不需要空格;
立即执行函数外必须包一层括号;
不要给inline function命名;
参数之间用', '分隔,注意逗号后有一个空格。
数组、对象
对象属性名不需要加引号;
对象以缩进的形式书写,不要写在一行;
数组、对象最后不要有逗号。
12、括号
下列关键字后必须有大括号(即使代码块的内容只有一行):if
, else
, for
,while
, do
, switch
, try
, catch
, finally
, with
。
13、null
适用场景:
- 初始化一个将来可能被赋值为对象的变量
- 与已经初始化的变量做比较
- 作为一个参数为对象的函数的调用传参
- 作为一个返回对象的函数的返回值
不适用场景:
- 不要用null来判断函数调用时有无传参
- 不要与未初始化的变量做比较
14、undefined
永远不要直接使用undefined进行变量判断;
使用typeof和字符串'undefined'对变量进行判断。
15、jshint
用'===', '!=='代替'==', '!=';
for-in里一定要有hasOwnProperty的判断;
不要在内置对象的原型上添加方法,如Array, Date;
不要在内层作用域的代码里声明了变量,之后却访问到了外层作用域的同名变量;
变量不要先使用后声明;
不要在一句代码中单单使用构造函数,记得将其赋值给某个变量;
不要在同个作用域下声明同名变量;
不要在一些不需要的地方加括号,例:delete(a.b);
不要使用未声明的变量;
不要声明了变量却不使用;
不要在应该做比较的地方做赋值;
debugger不要出现在提交的代码里;
数组中不要存在空元素;
不要在循环内部声明函数;
不要像这样使用构造函数,例:new function () { ... }
, new Object
;
16、其他
不要混用tab和space;
不要在一处使用多个tab或space;
对上下文this的引用只能使用'_this', 'that', 'self'其中一个来命名;
行尾不要有空白字符;
switch的falling through和no default的情况一定要有注释特别说明;
不允许有空的代码块。
优化建议:
项目列表分类:根据需求导航确定项目的大分类,分别建立文件夹存放相对应的html页面,不要所有的页面都在一个视图文件夹下,相应的js、css、images的存放位置和命名都与html一一相对应,如下图所示,一目了然,便于维护。风格类似的两个项目(如果咱们的平台端后台管理和商户端后台管理),可以合并成一个项目开发,共用一套CSS样式,只需把HTML和JS分别存放清晰即可。
HTML:尽量使用html5元素和标签结构,html5并不复杂,它简洁清晰易用。把CSS放到顶部,把JS放到底部。尽量少使用别的网站复制下载下来的js和css表,如果使用,请删除所有无关的js和css内容。如今,用纯 CSS3 就可以实现各种各样很酷的效果,甚至是动画,可以多尝试使用。
Bootstrap框架:如果使用Bootstrap框架,请使用原始Bootstrap样式和js,而套用的模板,里面少很多Bootstrap最基础的样式。
css压缩:不要压缩最原始的样式,后期不便维护,可以使用压缩方法Compass、 gulp或其他方法压缩出新的样式文件进行引用。
所有的样式可以写入一个样式文件里面,引用压缩这一个样式表。
JS模块化:我推荐使用使用Require.js库按需及并行加载js,可以把我们的代码以模块化的方式组织。中文官网地址:http://www.requirejs.cn/
关于图片:图片不要超过100k,png图片可以用https://tinypng.com/压缩,小图标可以使用CSS Sprite或CssGaga合并,尽量把图片作为背景使用。
关于字体:字蛛是一个中文字体压缩器,网址:http://font-spider.org/。
关于存储:图片、jQuery等静态资源,建议上传到比如阿里云这样的地方,减少对服务的请求。
关于demo页制作:建议使用.asp格式,方便include共同的部分,比如网页头部,导航。
关于SVN:我有个不成熟的小建议,项目单独存放,方便开发人员方便简洁的更新提交和修改,而不用像现在这样打开一个又一个文件夹来寻找。RandDCenter 目前已经24G,太大了。