收藏 分销(赏)

前端代码编写规范.doc

上传人:人****来 文档编号:3118659 上传时间:2024-06-18 格式:DOC 页数:20 大小:142.50KB 下载积分:10 金币
下载 相关 举报
前端代码编写规范.doc_第1页
第1页 / 共20页
前端代码编写规范.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
前端代码编写规范 命名规则 1. 项目名称 项目名称驼峰式命名。 例:myProject 2. 目录命名 采用单数命名法。 例:css img font js 3. JS文件命名 字母全部小写,单词之间用“-”链接。 例:popup-window.js 4. CSS文件命名 字母全部小写,单词之间用“-”链接。 例:popup-window.css 5. HTML文件命名 文件名称驼峰式命名。 例:riverMonitor.html HTML 1. 语法 缩进使用Tab(4个空格); 解释:对于非HTML标签之间的缩进,比如script或style标签内容缩进,与script或style标签的缩进同级。 <style> /* 样式内容的第一级缩进与所属的 style 标签对齐 */ ul { padding: 0; } </style> <ul> <li>first</li> <li>second</li> </ul> <script> // 脚本代码的第一级缩进与所属的 script 标签对齐 require(['app'], function (app) { app.init(); }); </script> 嵌套的节点应该缩进; 在属性上使用双引号(字符串拼接除外); 属性名全小写,用“-”做分隔符; 自动闭合标签处不能使用斜线。 <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> 2. HTML5 doctype 页面开头的doctype大写,html小写。 例:<!DOCTYPE html> <!DOCTYPE html> <html> ... </html> 3. 字符编码 采用UTF-8的编码格式。 例:<meta charset=”UTF-8”> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ... </html> 4. 引入CSS,JS CSS引入使用<link> <link rel="stylesheet" href="code-guide.css"> JS 引入使用<script> <script type="text/javascript" href="code-guide.js"></script> 页面不允许出现style标签。 5. 属性 1. 属性名必须使用小写字母 <!-- good --> <table cellspacing="0">...</table> <!-- bad --> <table cellSpacing="0">...</table 2. 属性值必须使用双引号包围 不允许使用单引号。 <!-- good --> <script src="esl.js"></script> <!-- bad --> <script src='esl.js'></script> <script src=esl.js></script> 6. 属性顺序 class id name data-* src,for,type,href,value,max-length,max,min,pattern placeholder,title,alt aria-*,role required,readonly,disabled 7. 标签 标签名必须使用小写字母 <!-- good --> <p>Hello StyleGuide!</p> <!-- bad --> <P>Hello StyleGuide!</P> 1. 对于无需自闭合的标签,不允许自闭合 解释: 常见无需自闭合标签有 input、br、img、hr 等。 <!-- good --> <input type="text" name="title"> <!-- bad --> <input type="text" name="title" /> 2. 标签使用必须符合标签嵌套规则 解释: 比如div不得置于p中,tbody必须置于table中。 ul 标签包含着 li、dl 标签包含着 dt 和 dd。 3. 标签使用必须符合标签嵌套规则 常见标签语义: P –段落 h1,h2,h3,h4,h5,h6–层级标题 strong,em–强调 ins–插入 del–删除 abbr–缩写 code–代码标识 cite–引述来源作品的标题 q–引用 blockquote–一段长篇引用 ul–无序列表 ol–有序列表 dl,dt,dd–定义列表 8. 图片 禁止 img 的 src 取值为空。延迟加载的图片也要增加默认的 src。 解释: src 取值为空,会导致部分浏览器重新加载一次当前页面,参考: [建议] 避免为 img 添加不必要的 title 属性。 解释: 多余的 title 影响看图体验,并且增加了页面尺寸。 [建议] 为重要图片添加 alt 属性。 解释: 可以提高图片加载失败时的用户体验。 [建议] 添加 width 和 height 属性,以避免页面抖动。 [建议] 有下载需求的图片采用 img 标签实现,无下载需求的图片采用 CSS 背景图实现。 解释: 1. 产品 logo、用户头像、用户产生的图片等有潜在下载需求的图片,以 img 形式实现,能方便用户下载。 2. 无下载需求的图片,比如:icon、背景、代码使用的图片等,尽可能采用 CSS 背景图实现。 9. 表单 1.控件标题 [强制] 有文本标题的控件必须使用 label 标签将其与其标题相关联。 解释: 有两种方式: 1. 将控件置于 label 内。 2. label 的 for 属性指向控件的 id。 推荐使用第一种,减少不必要的 id。如果 DOM 结构不允许直接嵌套,则应使用第二种。 示例: <label><input type="checkbox" name="confirm" value="on"> 我已确认上述条款</label> <label for="username">用户名:</label> <input type="textbox" name="username" id="username"> 2.按钮 [强制] 使用 button 元素时必须指明 type 属性值。 解释: button 元素的默认 type 为 submit,如果被置于 form 元素中,点击后将导致表单提交。为显示区分其作用方便理解,必须给出 type 属性。 示例: <button type="submit">提交</button> <button type="button">取消</button> [建议] 尽量不要使用按钮类元素的 name 属性。 解释: 由于浏览器兼容性问题,使用按钮的 name 属性会带来许多难以发现的问题。具体情况可参考此文。 3.可访问性 (A11Y) [建议] 负责主要功能的按钮在 DOM 中的顺序应靠前。 解释: 负责主要功能的按钮应相对靠前,以提高可访问性。如果在 CSS 中指定了 float: right 则可能导致视觉上主按钮在前,而 DOM 中主按钮靠后的情况。 示例: <!-- good --> <style> .buttons .button-group { float: right; } </style> <div class="buttons"> <div class="button-group"> <button type="submit">提交</button> <button type="button">取消</button> </div> </div> <!-- bad --> <style> .buttons button { float: right; } </style> <div class="buttons"> <button type="button">取消</button> <button type="submit">提交</button> </div> [建议] 当使用 JavaScript 进行表单提交时,如果条件允许,应使原生提交功能正常工作。 解释: 当浏览器 JS 运行错误或关闭 JS 时,提交功能将无法工作。如果正确指定了 form 元素的 action 属性和表单控件的 name 属性时,提交仍可继续进行。 示例: <form action="/login" method="post"> <p><input name="username" type="text" placeholder="用户名"></p> <p><input name="password" type="password" placeholder="密码"></p> </form> [建议] 在针对移动设备开发的页面时,根据内容类型指定输入框的 type 属性。 解释: 根据内容类型指定输入框类型,能获得能友好的输入体验。 示例: <input type="date"> 10. 多媒体 [建议] 当在现代浏览器中使用 audio 以及 video 标签来播放音频、视频时,应当注意格式。 解释: 音频应尽可能覆盖到如下格式: · MP3 · WAV · Ogg 视频应尽可能覆盖到如下格式: · MP4 · WebM · Ogg [建议] 在支持 HTML5 的浏览器中优先使用 audio 和 video 标签来定义音视频元素。 [建议] 使用退化到插件的方式来对多浏览器进行支持。 示例: <audio controls> <source src="audio.mp3" type="audio/mpeg"> <source src="audio.ogg" type="audio/ogg"> <object width="100" height="50" data="audio.mp3"> <embed width="100" height="50" src="audio.swf"> </object> </audio> <video width="100" height="50" controls> <source src="video.mp4" type="video/mp4"> <source src="video.ogg" type="video/ogg"> <object width="100" height="50" data="video.mp4"> <embed width="100" height="50" src="video.swf"> </object> </video> [建议] 只在必要的时候开启音视频的自动播放。 [建议] 在 object 标签内部提供指示浏览器不支持该标签的说明。 示例: <object width="100" height="50" data="something.swf">DO NOT SUPPORT THIS TAG</object> 11. js生成标签 在js文件中生成标签让内容更难查找,更难编辑,性能更差, 应该尽量避免这种情况的出现 12. 减少标签数量 在编写HTML代码时,需要尽量避免多余的父节点; 很多时候,需要通过迭代和重构来使HTML变得更少; 任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。 例:<!-- Not well --> <span class="avatar"> <img src="..."> </span> <!-- Better --> <img class="avatar" src="..."> 13. 使用高于完美 尽量组训HTML标准和语义,但是不应该以浪费实用性作为代价; 任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。 14. 整体结构 HTML基础设施 · 文件应以“<!DOCTYPE ......>”首行顶格开始,推荐使用“<!DOCTYPE html>”。 · 必须申明文档的编码charset,且与文件本身编码保持一致,推荐使用UTF-8编码<meta charset="utf-8"/>。 · 根据页面内容和需求填写适当的keywords和description。 · 页面title是极为重要的不可缺少的一项。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>NEC:更好的CSS方案</title> <meta name="keywords" content=""/> <meta name="description" content=""/> <meta name="viewport" content="width=device-width"/> <link rel="stylesheet" href="css/style.css"/> <link rel="shortcut icon" href="img/favicon.ico"/> <link rel="apple-touch-icon" href="img/touchicon.png"/> </head> <body> </body> </html> 结构顺序和视觉顺序基本保持一致 · 按照从上至下、从左到右的视觉顺序书写HTML结构。 · 有时候为了便于搜索引擎抓取,我们也会将重要内容在HTML结构顺序上提前。 · 用div代替table布局,可以使HTML更具灵活性,也方便利用CSS控制。 · table不建议用于布局,但表现具有明显表格形式的数据,table还是首选。 结构、表现、行为三者分离,避免内联 · 使用link将css文件引入,并置于head中。 · 使用script将js文件引入,并置于body底部。 保持良好的简洁的树形结构 · 每一个块级元素都另起一行,每一行都使用Tab缩进对齐(head和body的子元素不需要缩进)。删除冗余的行尾的空格。 · 使用4个空格代替1个Tab(大多数编辑器中可设置)。 · 对于内容较为简单的表格,建议将tr写成单行。 · 你也可以在大的模块之间用空行隔开,使模块更清晰。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <body> <!-- 侧栏内容区 --> <div class="m-side">     <div class="side">         <div class="sidein">             <!-- 热门标签 -->             <div class="sideblk">                 <div class="m-hd3"><h3 class="tit">热门标签</h3> </div>                 ...             </div>             <!-- 最热TOP5 -->             <div class="sideblk">                 <div class="m-hd3"><h3 class="tit">最热TOP5</h3> <a href="#" class="s-fc02 f-fr">更多»</a></div>                 ...             </div>         </div>     </div> </div> <!-- /侧栏内容区 --> </body> CSS 1. 缩进 缩进使用Tab(4个空格)。 .element { position: absolute; top: 10px; left: 10px; border-radius: 10px; width: 50px; height: 50px; } 2. 分号 每个属性声明末尾都要加分号。 .element { width: 20px; height: 20px; } 3. 空行 文件最后保留一个空行; ‘}’结尾后跟一个空行。 .element { ... } .dialog { color: red; &:after { ... } } 4. 换行 每个属性独占一行。 .element { color: red; background-color: black; } 5. 注释 注释统一用‘/**/’,具体参照例中写法; 缩进与下一行代码保持一致; 可位于一个代码行的末尾,与代码间隔一个空格。 例:/* Modal header */ .modal-header { /* 50px */ width: 50px; color: red; /* color red */ } 6. 引号 最外层统一使用双引号; url的内容要用引号; 属性选择器找那个的属性值需要引号。 .element:after { content: ""; background-image: url("logo.png"); } li[data-type="single"] { ... } 7. 命名 命名使用小写字母,以“-”分隔; Id采用驼峰式命名; /* class */ .element-content { ... } /* id */ #myDialog { ... } 8. 颜色 颜色十六进制用小写字母,尽量使用简写; 例:.element { color: #abcdef; background-color: #012; } 9. 杂项 不允许有空的规则; 元素选择器用小写字母; 属性值‘0’后面不加单位; 不要在一个文件里出现两个相同的规则; 用border:0; 代替 border:none; ; 尽量少用“*”选择器。 JavaScript 1. 缩进 缩进使用Tab(4个空格) var x = 1, y = 1; if (x < y) { x += 10; } else { x += 1; } 2. 分号 以下几种情况后需加分号: 变量声明 表达式 return throw break continue do-while /* var declaration */ var x = 1; /* expression statement */ x++; /* do-while */ do { x++; } while (x < 10); 3. 空行 以下几种情况需要空行: 变量声明后; 注释前; 代码块后; 文件最后保留一个空行。 4. 换行 以下几种情况不需要换行: 解释:超长的不可分割的代码允许例外,比如复杂的正则表达式, 长字符串不在例外之列。 下列关键字后:else,catch,finally 代码块‘{’前 以下几种情况需要换行: 代码块‘{’后和‘}’前 变量复制后 5. 单行注释 双斜线后,必须跟一个空格; 缩进与下一行代码保持一致; 可位于一个代码行的末尾,与代码间隔一个空格。 if (condition) { // if you made it here, then all security checks passed allowed(); } var zhangsan = 'zhangsan'; // one space after code 6. 多行注释 最少三行,“*”后跟一个空格。 /* * one space after '*' */ var x = 1; 7. 文件注释 文件顶部必须包含文件注释,用@file标识文件说明 /** * @file Describe the file */ 8. 命名空间注释 命名空间使用@namespace标识 /** * @namespace */ var util = {}; 9. 类注释 /** * parm * return */ function Developer() { // constructor body } 10. 变量命名 变量名采用驼峰式命名(除对象的属性外) var thisIsMyName; ‘id’在变量名中‘i’大写 例:Id var goodId; ‘url’在变量名中全大写 var reportURL; ‘Android’在变量名中大写第一个字母 var AndroidVersion; ‘iOS’在变量名中小写第一个字母,大写后两个字母 var iOSVersion; 常量全大写,用下划线链接 var MAX_COUNT = 10; 构造函数,大写第一个字母 function Person(name) { this.name = name; } 11. 变量声明 每个var只能声明一个变量。 var hangModules = []; var missModules = []; var visited = {}; 12. 数组、对象 对象属性名不需要加引号; 对象以缩进的形式书写,不要写在一行。 var a = { b: 1, c: 2 }; 13. 括号 下列关键字后必须有大括号(即使代码块的内容只有一行) If,else,for,while,do,switch,try,catch,finally,with。 14. Null 使用场景: 初始化一个将来可能被赋值为对象的变量 与已经初始化的变量做比较 作为一个参数为对象的函数的调用传参 作为一个返回对象的函数的返回值 不使用场景: 不要用null来判断函数调用时有无传参 不要与未初始化的变量做比较 // not good function test(a, b) { if (b === null) { // not mean b is not supply ... } } var a; if (a === null) { ... } // good var a = null; if (a === null) { ... } 15. Undefined 永远不要直接使用undefined进行变量判断; 使用typeof和字符串‘undefined’对变量进行判断。 // not good if (person == undefined) { ... } // good if (typeof person == 'undefined') { ... } 16. Jshint 比较用‘==’,‘!=’; if (a == 1) { a++; } 不要在内层作用域的代码里声明了变量,之后却访问了外层作用域的同名变量; // not good var x = 1; function test() { if (true) { var x = 0; } x += 1; } 变量不要先使用后声明; 不要在同个作用域下声明同名变量; 不要在一些不需要的地方加括号,例:delete(a.b); 不要使用未声明的变量; 数组中不要存在空元素; // not good var nums = []; for (var i = 0; i < 10; i++) { (function(i) { nums[i] = function(j) { return i + j; }; }(i)); } 不要声明了变量却不使用; 不要在循环内部声明函数; // not good function test() { console.log(x); var x = 1; } 17. 杂项 不要混用Tab和Space; 不要在一处使用多个Tab或Space; 行尾不要有空白字符; 不允许有空的代码块。 // not good var a = 1; function Person() { // not good var me = this; // good var _this = this; // good var that = this; // good var self = this; } // good switch (condition) { case 1: case 2: ... break; case 3: ... // why fall through case 4 ... break; // why no default } // not good with empty block if (condition) { } E-JSON数据传输标准 JSON数据类型 JSON(JavaScript Object Notation)是一种轻量级,基于文本,语言无关的数据交换格式。其包括了基本数据类型4种和复合数据类型2种,共6种数据类型。在下面章节中,JSON数据类型的表示法为JSON+空格+数据类型,如:JSON Array。 传输的数据,包括对象属性以及数组成员, 必须(MUST) 是6种JSON数据类型之一。 杜绝(MUST NOT) 使用function、Date等js对象类型。 基本数据类型 · Number可以表示整数和浮点数。 · Boolean可以表示真假,值为true或false。 · String表示一个字符串。 · Null通常用于表示空对象。 "true"和true,这两个数据代表的是不同的数据类型。非字符串类型数据输出时一定 不要(MUST NOT) 为两端加上双引号,否则可能产生不希望的后果(如if中判断"false"的结果是true)。其他容易产生错误的例子如:0和"0"等。 复合数据类型 Object是无序的集合,以键值对的方式保持数据。一个Object中包含零到多个name/value的数据,数据间以逗号(,)分隔。name为String类型,value可以是任意类型的数据。 Object的最后一个元素之后一定 不要(MUST NOT) 加上分隔符的逗号,否则可能导致解析出错。 Array(数组)为多个值的有序集合,数组元素间以逗号(,)分隔。 http响应头 status http响应的status 必须(MUST) 为200。通常JSON数据被用于通过XMLHttpRequest对象访问,通过javascript进行处理。返回错误的状态码可能导致错误不被响应,数据不被处理。 Content-Type Content-Type字段定义了响应体的类型。一般情况下,浏览器会根据该类型对内容进行正确的处理。对于传输JSON数据的响应,Content-Type 推荐(RECOMMENDED) 设置为"text/javascript"或"text/plain"。 避免(MUST NOT) 将Context-Type设置为text/html,否则可能导致安全问题。 Content-Type中可以指定字符集。通常 需要(SHOULD) 明确指定一个字符集。如果是通过XMLHTTPRequest请求的数据,并且字符编码为UTF-8时,可以不指定字符集。 Context-Type示例 text/javascript;charset=UTF-8 数据字段 返回的数据包含在http响应体中。数据 必须(MUST) 是一个JSON Object。该Object可能包含3个字段:status,statusInfo,data。 status status字段 必须(MUST) 是一个不小于0的JSON Number整数,表示请求的状态。这个字段 可以(SHOULD) 被省略,省略时和为0时表示同一含义。 0:表示server端理解了请求,成功处理并返回。 非0:表示发生错误。 可以(SHOULD) 根据错误类型扩展错误码。 一个成功请求的status字段 { "status": 0, "data": "hello world!" } statusInfo statusInfo字段 通常(SHOULD) 是一个JSON String或JSON Object,表示除了请求状态外server端想要对status做出的说明,使client端能够获取更多信息进行后续处理。这个字段是 可选的(OPTIONAL) 。下面的两个例子中,statusInfo字段的信息都可以用于client端程序的后续处理,但是粒度和处理方式会有不同。 client端参数错误的statusInfo 简单说明的statusInfo: { "status": 1, "statusInfo": "参数错误" } 具有更多信息的statusInfo: { "status": 1, "statusInfo": { "text": "参数错误", "parameters": { "email": "电子邮件格式不正确" } } } data data字段可以是除JSON Null之外的任意JSON类型,表示请求返回的数据主体。这个字段是 可选的(OPTIONAL) 。数据主体data包含了在请求成功时有意义的数据。 一个查询姓名请求的返回数据 { "status": 0, "data": "Lily" } 键/值对象 对于在一个JSON Object中表示键/值: · 键的属性名 必须(MUST) 为name, 杜绝(MUST NOT) 使用key或k · 值的属性名 必须(MUST) 为value, 杜绝(MUST NOT) 使用v。 数据场景:键/值对象 { "name": "BMW", "value": 1 } 键/值有序集合 键/值有序集合表示对事务或逻辑类型的抽象与分类。常见的应用场景有单选复选框集合,下拉菜单等。 标准的键/值有序集合是一个JSON Array,集合中的每一项是一个JSON Object。项 必须(MUST) 包含name和value属性。 可以(MAY) 通过其他的属性修饰每一项的特殊信息,如selected。 数据场景:键/值有序集合 [ { "name": "BMW", "value": 1 }, { "name": "Benz", "value": 2, "selected": true } ] 树 树形数据用于表示层叠的数据结构。树型数据 必须(MUST) 是一个JSON Object,代表树型数据的根节点。下面是标准定义的可选节点列表,不在列表中的属性 可以(SHOULD) 自行扩展。 树型数据结构的可选节点属性 · {Number|String} id - 节点的唯一标识。 · {String} text - 名称或用于显示的字符串。 · {Array} children - 子节点列表。 数据场景:树型数据 { "id": 1, "text": "中国", "children": [ { "id": 10, "text": "北京", "children": [ { "id": 100, "text": "东城区" }, { "id": 101, "text": "西城区" }, { "id": 102, "text": "海淀区" } ...... ] }, { "id": 31, "text": "海南", "children": [ { "id": 600, "text": "海口"
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服