为提升团队协做效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. 本文档若有不对或者不合适的地方请及时提出, 经讨论决定后能够更改此文档.javascript
全部必须、禁止等词 表示强调,不表示必须,若是能遵照最好css
Tab键统一约定用4个空格代替(避免有的工具Tab键位2个空格)
每一个样式属性或js语句后要加分号,方便压缩工具“断句”html
注释
代码是写给人看的,只是机器偶尔执行一下。
注释永远不闲多的,必定要写注释前端
html 注释
这里是内容
html5
css 注释
/* header /
这里是css内容
/ end header */java
文件名称统一用小写的英文字母、数字和中划线的组合,其中不得包含汉字、空格和特殊字符;命名原则的指导思想一是使得你本身和工做组的每个成员可以方便的理解每个文件的意义。(每一个规范前面都有各自的命名规则)jquery
fe 前端开发目录 src 开发环境 dist 生产环境 H5 移动端页面 pc Pc端页面 html 存放html文件 images 存放图片 css 存放css文件 js 存放js文件
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制总体布局宽度:wrapper
左右中:left right center
登陆条:loginbar
标志:logo
广告:banner
页面主体:main
热点:hot
新闻:news
下载:download
子导航:subnav
菜单:menu
子菜单:submenu
搜索:search
友情连接:friendlink
页脚:footer
版权:copyright
滚动:scroll
内容:content
标签页:tab
文章列表:list
提示信息:msg
小技巧:tips
栏目标题:title
加入:joinus
指南:guild
服务:service
注册:regsiter
状态:status
投票:vote
合做伙伴:partner
(二)注释的写法:
/* footer /
内容区
/ end footer */
(三)id的命名:
(1)页面结构
容器: container
页头:header
内容:content/container
页面主体:main
页尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制总体布局宽度:wrapper
左右中:left right centerweb
(2)导航
导航:nav
主导航:mainbav
子导航:subnav
顶导航:topnav
边导航:sidebar
左导航:leftsidebar
右导航:rightsidebar
菜单:menu
子菜单:submenu
标题: title
摘要: summaryjson
(3)功能
标志:logo
广告:banner
登录:login
登陆条:loginbar
注册:regsiter
搜索:search
功能区:shop
标题:title
加入:joinus
状态:status
按钮:btn
滚动:scroll
标签页:tab
文章列表:list
提示信息:msg
当前的: current
小技巧:tips
图标: icon
注释:note
指南:guild
服务:service
热点:hot
新闻:news
下载:download
投票:vote
合做伙伴:partner
友情连接:link
版权:copyright数组
html5 doctype,字符编码统一使用使用utf-8
统一的文档类型,保证每一个页面的表现形式统一
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> </html>
兼容IE meta 写法(在web页面中使用)
使IE浏览器解析页面使用IE最高版本解析
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
资源规范
css 放到head中
javascript 放置到body内,主题内容后
style 默认type为text/css ,能够省去
script 默认 type 为 text/javascript ,能够省去
实用为王
尽可能使用语义标签,减小使用div、span 无语义标签
图片背景图
修饰图片尽可能使用背景图片来展现
切图请保存为最优格式,透明图片保存为 PNG24 格式
属性顺序
HTML属性应该按照一下顺序排列,确保易读性
class用于标识高度可复用组件,所以应该排在首位。id用于标识具体组件,应当谨慎使用(例如,页面内的书签),所以排在第二位。
javascript 生成的标签
经过js生成的标签内容,不易查找和修改,性能也会下降,减小使用。若是使用请分析它的利和弊
1, id 和 class命名只能使用字符、数字、中划线 - ,一概使用小写字符
2, id 和 class 根据内容来命名
3, 使用js操做的id或者class,一概使用J_ 开头,后面的命名使用大驼峰的写法,例如J_Header
方便压缩工具“断句”
.header { color: red; }
选择器 { 以前要有空格
属性名 : 后要有空格
属性名 : 前禁止加空格
一个缘由是美观,其次IE 6存在一个bug,IE6bug
当样式针对多个选择器时,每一个选择器占一行
/* 推荐的写法 */ a.btn, input.btn, input[type="button"] { ...... }
.header { color: red;}
单行显示很差备注,这应该是压缩工具的活
.hader { margin: 0px; }
css 原生import 有不少弊端,好比会增长请求数,我没有验证过
推荐文章:Don't use @import
.header { /*定位*/ display: block; position: absolute; left: 0; top: 0; /*盒模型*/ width: 50px; height: 50px; padding: 10px; border: 1px solid red; margin: 10px; /*文字系列*/ font-size: 12px; line-height: 20px; text-align: center; /*背景*/ background: red; /*其余*/ }
按照这样的顺序书写可见提高浏览器渲染dom的性能
简单举个例子,网页中的图片,若是没有设置width和height,在图片载入以前,他所占的空间为0,可是当他加载完毕以后,那块为0的空间忽然被撑开了,这样会致使,他下面的元素从新排列和渲染,形成重绘(repaint)和回流(reflow)。咱们在写css的时候,把元素的定位放在前头,首先让浏览器知道该元素是在文本流内仍是外,具体在页面的哪一个部位,接着让浏览器知道他们的宽度和高度,border等这些占用空间的属性,其余的属性都是在这个固定的区域内渲染的,差很少就是这个意思吧~
Poll Results: How do you order your CSS properties?
/* 针对ie的hack */ selector { property: value; /* 全部浏览器 */ property: value\9; /* 全部IE浏览器 */ property: value\0; /* IE8 */ +property: value; /* IE7 */ _property: value; /* IE6 */ *property: value; /* IE6-7 */ }
<p style="font-size:12px;">我是一段文字</p>
尽可能作个样式和结构分离,否则维护成本比较高
a:link -> a:visited ->a:hover a:active
.header span { color: red; }
使用标签名,让结构和样式耦合度高,不利于后期修改
(1)变量使用小驼峰命名法,以首字母小写开始,例如:headFirst
(2)常量采用全大写命名,例如:FEEL_NAME
(3)类采用大驼峰的命名法,例如:HeadFirst
if (a == b) { // 这里是内容 }
if (a == b) { return a; }
/** * * 简述 * * 功能详细描述 * * @param <String> arg1 参数1 * @param <Number> arg2 参数2,默认为0 * @return <Boolean> 看xxx是否成功 */ function fooFunction (arg1, arg2) { }
字符串拼接,应使用数组保存字符串片断,使用时调用join方法。避免使用+或+=的方式拼接较长的字符串,每一个字符串都会使用一个小的内存片断,过多的内存片断会影响性能。如
很差的拼接方式,+= var str = ''; for (var i = 0, len = list.length; i < len; i++) { str+= '<div>' + list[i] + '</div>'; } dom.innerHTML = str; 正确拼接方式,Array的push+join var str = []; for (var i = 0, len = list.length; i < len; i++) { str.push('<div>'+ list[i] + '</div>'); } dom.innerHTML = str.join('');
由于变量声明提早的原则,不管你定义到哪里,在解析的时候都会声明提早
// 没有换行,小的代码段没法区分 if (wl && wl.length) { for (i = 0, l = wl.length; i < l; ++i) { p = wl[i]; type = Y.Lang.type(r[p]); if (s.hasOwnProperty(p)) { if (merge && type == 'object') { Y.mix(r[p], s[p]); } else if (ov || !(p in r)) { r[p] = s[p]; } } } } // 有了换行,逻辑清楚多了 if (wl && wl.length) { for (i = 0, l = wl.length; i < l; ++i) { p = wl[i]; type = Y.Lang.type(r[p]); if (s.hasOwnProperty(p)) { // 处理merge逻辑 if (merge && type == 'object') { Y.mix(r[p], s[p]); } else if (ov || !(p in r)) { r[p] = s[p]; } } } }
// 缓存对象 var getComment = function() { var dom = $("#common-container"), // 缓存dom appendTo = $.appendTo, // 缓存全局变量 data = this.json.data; // 缓存做用域链较深的对象 }
## 当须要使用this时, 建议使用_this 来缓存
```
// 缓存this
function Row(name) {
var _this = this;
_this.name = name;
$(".row").click(function() {
_this.getName();
});
}
```
在缓存this时,有使用self的、that、_this ,这里咱们统一下,使用this
1.同一的对象的操做不超过三个动做能够写入一行(代码的可读性)
2.对于同一对象的多个操做,建议每行写一个操做。
3.若是闲代码块太多,能够以代码块来换行;
4.若是获取的对象是jQuery 对象,建议以$ 符号开头 例如:$nav = $(“#nav”); 以区分javascript对象和jQuery对象
参考网址 http://www.cnblogs.com/hustskyking/p/javascript-spec.html