前端书写规范和简单优化

坚持制定好的代码规范。

无论团队人数多少,代码应该同出一门。

如果您觉得有不合理的地方,请指正修改。

 

命名规范

项目命名、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-*
  • srcfortypehrefvalue , max-lengthmaxminpattern
  • placeholdertitlealt
  • aria-*role
  • requiredreadonlydisabled

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、空格

以下几种情况不需要空格:

  • 对象的属性名后
  • 前缀一元运算符后
  • 后缀一元运算符前
  • 函数调用括号前
  • 无论是函数声明还是函数表达式,'('前不要空格
  • 数组的'['后和']'前
  • 对象的'{'后和'}'前
  • 运算符'('后和')'前

以下几种情况需要空格:

  • 二元运算符前后
  • 三元运算符'?:'前后
  • 代码块'{'前
  • 下列关键字前:elsewhilecatchfinally
  • 下列关键字后:ifelseforwhiledoswitchcasetrycatch,finallywithreturntypeof
  • 单行注释'//'后(若单行注释和代码同行,则'//'前也需要),多行注释'*'后
  • 对象的属性值前
  • for循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
  • 无论是函数声明还是函数表达式,'{'前一定要有空格
  • 函数的参数之间

5、空行

以下几种情况需要空行:

  • 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
  • 注释前(当注释在代码块的第一行时,则无需空行)
  • 代码块后(在函数调用、数组、对象中则无需空行)
  • 文件最后保留一个空行

6、换行

换行的地方,行末必须有','或者运算符;

以下几种情况不需要换行:

  • 下列关键字后:elsecatchfinally
  • 代码块'{'前

以下几种情况需要换行:

  • 代码块'{'后和'}'前
  • 变量赋值后

7、单行注释

双斜线后,必须跟一个空格;

缩进与下一行代码保持一致;

可位于一个代码行的末尾,与代码间隔一个空格。

8、多行注释

最少三行, '*'后跟一个空格,具体参照右边的写法;

建议在以下情况下使用:

  • 难于理解的代码段
  • 可能存在错误的代码段
  • 浏览器特殊的HACK代码
  • 业务逻辑强相关的代码

9、引号

最外层统一使用单引号。

10、变量命名

  • 标准变量采用驼峰式命名(除了对象的属性外,主要是考虑到cgi返回的数据)
  • 'ID'在变量名中全大写
  • 'URL'在变量名中全大写
  • 'Android'在变量名中大写第一个字母
  • 'iOS'在变量名中小写第一个,大写后两个字母
  • 常量全大写,用下划线连接
  • 构造函数,大写第一个字母
  • jquery对象必须以'$'开头命名

11、变量声明

一个函数作用域中所有的变量声明尽量提到函数首部,用一个var声明,不允许出现两个连续的var声明。

12、函数

无论是函数声明还是函数表达式,'('前不要空格,但'{'前一定要有空格;

函数调用括号前不需要空格;

立即执行函数外必须包一层括号;

不要给inline function命名;

参数之间用', '分隔,注意逗号后有一个空格。

数组、对象

对象属性名不需要加引号;

对象以缩进的形式书写,不要写在一行;

数组、对象最后不要有逗号。

12、括号

下列关键字后必须有大括号(即使代码块的内容只有一行):ifelsefor,whiledoswitchtrycatchfinallywith

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,太大了。

 

转载于:https://www.cnblogs.com/oomph/p/5519233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值