GIT
分支名称规范与含义
-
开发分支命名为
dev-[你的名字缩写或英文名]-[创建分支日期]
,例如:dev-yzs-20200707
-
bug修改分支命名为
bug-[你的名字缩写或英文名]-[创建分支日期]
,例如:bug-yzs-20200707
-
迭代分支命名为
release-[预计发布日期]
,例如:release-20200707
-
环境分支
dev,preview,uat
统称为环境分支,开发这使用环境分支发布到各个对应环境下
开发流程图
- 创建开发分支同时需要检查预定上线的迭代分支是否存在,不存在需要创建迭代分支
- 功能开发完成需要提交 dev或preview等环境,需要使用 迭代分支 merge到环境分支上
- 合并生产分支由管理员或指定人员操作,其他人不可操作
- 线上bug类分支可不使用迭代分支
其他
命名规范
- 统一使用驼峰命名法,使用范围包括
css
,vue组件名称
,react组件名称
,变量
,vue attribute属性
等 - 变量,常量,事件等命名规则,⚠️接口命名的几个关键字并不是说其他地方就不能用,只是接口内推荐使用这几个钱真来统一
//变量命名规则,第一个单词首字母小写,其他单词首字母大写
const listCount = 0;
// 常量命名规则单词全部大写,单词与单词用下划线连接
const MAX_COUNT = 20;
//查询接口命名,使用fetch为前置
const fetchUserList = () => {}
//保存或更新接口,使用save或update,保存也可使用insert前置
const saveUserInfo = () => {}
const updateUserInfo = () => {}
const insertUsetInfo = () => {}
//删除接口使用delete前置
const deletUserUnfo = () => {}
vue组件规范
-
[强制]组件命名需要使用驼峰法命名,单词首字母大写,每个组件都需要一个唯一name,name不可省略
export default { name: 'AddGiftModal' }
-
[建议]组件内调用其他组件建议也使用与组件命名一样的驼峰式调用(element-ui ,比较特殊)
<template> <AddGiftModal/> // or <add-gift-modal/> </template>
-
[建议]vue 下方法命名与排序
-
绑定在template里的事件方法需要以on开头,以事件类型结尾,结尾省略默认为
click
,事件类型常用四种:click
,change
,focus
,blur
-
on开头的方法请放在其他方法之前,以提高阅读性
methods:{ //onSubmitClick可写成以下形式 onSubmit(){ }, // 这里Change无法省略,否则别人会认为是click事件 onTabChange(){ }, //其他方法 fetchData(){ } }
-
-
[建议]结构排列
// vue 组件顺序 export default { //组件名称放这里 name:'', //调用组件 components:{}, //混合 minixs, //props props:{}, //当前data data(){ return {} } //context inject:[], //计算属性 computed:{ } //监听 watch:{ } //方法 methods:{ } //生命周期 created(){ } }
HTML代码规范
1 通用
1.1 DOCTYPE
- [强制] 文档类型一律采用HTML5标准
<!DOCTYPE html>
来启用标准模式,建议使用大写的DOCTYPE
<!DOCTYPE html>
- [强制] 启用
IE Edge
模式,IE 支持通过特定的<meta>
标签来确定绘制当前页面所应该采用的 IE 版本。除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的模式。
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
- [建议] 在
html
标签上设置正确的lang
属性。
有助于提高页面的可访问性,如:让语音合成工具确定其所应该采用的发yin,令翻译工具确定其翻译语音等。
<html lang="zh-CN">
- 简体中文
<html lang="zh-cmn-Hans">
- 繁体中文
<html lang="zh-cmn-Hant">
1.2 编码
- [强制] 页面必须使用精简形式,明确指定字符编码。指定字符编码的
meta
必须是head
的第一个直接子元素。
<html>
<head>
<meta charset="UTF-8">
......
</head>
<body>
......
</body>
</html>
- [强制] 字符集一律采用
utf-8
通过明确声明字符编码,能够确保浏览器快速并容易的判断页面内容的渲染方式。这样做的好处是,可以避免在 HTML 中使用字符实体标记(character entity),从而全部与文档编码一致
<head>
<meta charset="UTF-8">
</head>
1.3 CSS和JavaScript引入
- [强制] 引入
css
时必须指明rel="stylesheet"
。
<link rel="stylesheet" href="page.css">
- [建议] 引入
css
时和JavaScript
时无须指明type属性。
type/css 和 text/javascript 是type的默认值。
- [建议] 展现定义放置于外部
CSS
中,行为定义放置于外部JavaScript
中。
结构-样式-行为的代码分离,对于提高代码的可阅读性和维护性都有好处。
- [建议] 在
head
中引入页面需要的所有CSS
资源
在页面渲染的过程中,新的
CSS
可能导致元素的样式重新计算和绘制,页面闪烁。
- [建议]
JavaScript
应当放在页面末尾,或采用异步加载。
将
script
放在页面中间将阻断页面的渲染。出于性能方面的考虑
<body>
<!-- a lot of elements -->
<script src="init-behavior.js"></script>
<body>
- [强制] 移动环境或只针对现代浏览器设计的
Web
应用,如果引用外部资源的URL
协议部分与页面相同,建议省略协议前缀。
使用
protocol-relative URL
引入CSS
,在IE7/8
下,会发两次请求。是否使用protocol-relative URL
应充分考虑页面针对的环境。
<script src="//m.lanehub.cn/cache/static/vue.js"></script>
2. 代码风格
2.1 缩进与换行
- [强制] 使用
2
个空格作为一个缩进层级,不允许使用4
个空格或tab
字符
<ul>
<li>first</li>
<li>second</li>
</ul>
- [建议] 每行不得超过
80
个字符。
过长的代码不容易阅读与维护,但是考虑到HTML的特殊性,不做硬性要求。
2.2 命名
-
[强制]
class
必须单词全字母小写,单词间以-
分隔 -
[强制]
class
必须代表相应模块或部件的内容或功能,不得以样式信息进行命名
<!-- good -->
<div class="sidebar"></div>
<!-- bad -->
<div class="left"></div>
- [强制] 元素
id
必须保证页面唯一
同一个页面中,不同的元素包含相同的
id
,不符合id
的属性定义。并且使用document.getElementById
时可能导致难以追查此处的问题。
-
[强制]
id
建议单词全字母小写,单词间以-
分隔,同项目必须保持风格一致。 -
[强制]
id
,class
命名,在避免冲突并描述清楚的前提下尽可能短。
<!-- good -->
<div id="nav"></div>
<!-- bad -->
<div id="navigation"></div>
<!-- good -->
<p class="comment"></p>
<!-- bad -->
<p class="com"></p>
<!-- good -->
<span class="author"></span>
<!--bad -->
<span class="red"></span>
- [强制] 静止为了
hook
脚本,创建无样式信息的class
。
不允许
class
只用于让JavaScript
选择某些元素,class
应该具有明确的语义和样式。否则则容易导致css class
泛滥
使用id
,属性选择
作为hook
是更好的方式。
- [强制] 同一个页面,应避免使用相同的
name
与id
。
IE
浏览器会混淆元素的id
和name
属性,document.getElementById
可能获得不期望的元素。所以在对元素的id
与name
属性的命名需要非常小心。
一个比较好的实践是,为id
和name
使用不同的命名法。
<input name="foo">
<div id="foo"></div>
<script>
// IE6将显示 INPUT
alert(document.getElementById('foo').tagName);
</script>
-
[建议]用于
js
的class
名以j
开头 -
[建议]
JOCK.js
中用到的class
以J
开头,后面跟正常的驼峰表示,如:JsendBtn
-
[建议]尽量采用
id
作为js
选择器
用
id
作为选择器效率最高,通常class
应该具有明确的语义和样式,大量使用class
作为选择器导致代码混乱,用节点中的其它属性作为选择器效率较低
- [建议]
p、span、a
等直接包含内容的标签,内容不换行。行内标签不换行,块级元素换行。
<!-- good -->
<p>a paragraph</p>
<!-- bad -->
<p>
a paragraph
</p>
2.3 标签
- [强制] 标签名必须使用小写字母。
<!-- good -->
<p>Hello StyleGuide!</p>
<!-- bad -->
<P>Hello StyleGuide!</P>
- [强制] 对于无需自闭合的标签,不允许自闭合。
常见无需自闭合标签有
input
,br
,img
,hr
等。
<!-- good -->
<input type="text" name="title">
<!-- bad -->
<input type="text" name="title" />
- [强制] 对
HTML5
中规定允许省略的闭合标签,不允许省略闭合标签。
对代码体积要求非常严苛的场景,可以例外。比如:第三方页面使用的投放系统。
<!-- good -->
<ul>
<li>first</li>
<li>second</li>
</ul>
<!-- bad -->
<ul>
<li>first
<li>second
</ul>
- [强制] 标签使用必须符合标签嵌套规则。
比如
div
不得置于p
中,tbody
必须置于table
中,行内元素不要嵌套块级元素。
h 、 p 、 dt
标签内不能嵌入块级元素。
a
标签内不能嵌入其他交互式元素,eg: a,button, select, input
ul
标签的子节点标签必须是li
dl
标签的子节点只能是dt 、 dd
标签
- [建议] HTML标签的使用应该遵循标签的语义。
下面是常见标签语义
-
p
- 段落 -
h1,h2,h3,h4,h5,h6
- 层级标题 -
strong,em
- 强调 -
ins
- 插入 -
del
- 删除 -
abbr
- 缩写 -
code
- 代码标识 -
cite
- 引述来源作品的标题 -
q
- 引用 -
blockquote
- 一段或长篇引用 -
ul
- 无序列表 -
ol
- 有序列表 -
dl,dt,dd
- 定义列表
<!-- good -->
<p>Esprima serves as an important <strong>building block</strong> for some Javascript language tools.</p>
<!-- bad -->
<div>Esprima serves as an important <span class="strong">building block</span> for some Javascript language tools.</div>
- [建议] 在
CSS
可以实现相同需求的情况下不得使用表格进行布局。
在兼容性允许的情况下应尽量保持语义正确性。对网络对齐和拉伸性有严格要求的场景允许例外,如多列复杂表单
- [建议] 标签的使用应尽量简洁,减少不必要的标签。
<!-- good -->
<img class="avatar" src="image.png">
<!-- bad -->
<span class="avatar">
<img src="image.png">
</span>
2.4 属性
- [强制] 属性名必须使用小写字母。
<!-- good -->
<table cellspacing="0">...</table>
<!-- bad -->
<table cellSpacing="0">...</table>
- [强制] 属性值必须用双引号包围。
不允许使用单引号,不允许不使用引号
<!-- good -->
<script src="esl.js"></script>
<!-- bad -->
<script src='esl.js'></script>
<script src=esl.js></script>
- [强制] 自定义属性建议以xxx-为前缀,推荐使用data-。
使用前缀有助于区分自定义属性和标准定义的属性。
<ol data-ui-type="Select"></ol>
3 head
3.1 title
-
[强制] 页面必须包含
title
标签声明标题。 -
[强制]
title
必须作为head
的直接子元素,并紧随charset
声明之后。
title
中如果包含ascii
之外的字符,浏览器需要知道字符编码类型才能进行解码,否则可能导致乱码。
<head>
<meta charset="UTF-8">
<title>页面标题</title>
</head>
3.2 favicon
- [强制] 保证
favicon
可访问。
在未指定
favicon
时,大多数浏览器会请求Web Server
根目录下的favicon.ico
。为了保证favicon
可访问,避免404
,必须遵循以下两种方法之一:
- 在
Web Server
根目录放置favicon.ico
文件。 - 使用
link
指定favicon
。
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
3.3 viewport
- [强制] 若页面欲对移动设备友好,需指定页面的
viewport
。
viewport meta tag
可以设置可视区域的宽度和初始缩放大小,避免在移动设备上出现页面展示不正常。
4 图片
- [强制] 静止
img
的src
取值为空,延迟加载的图片也要增加默认的src
。
src
取值为空,会导致部分浏览器重新加载一次当前页面
- [建议] 避免为
img
添加不必要的title
属性。
多余的
title
影响看图体验,并且增加了页面尺寸。
- [建议] 为重要图片添加
alt
属性。
可以提高图片加载失败时的用户体验。
-
[建议] 添加
width
和height
属性,以避免页面抖动。 -
[建议] 有下载需求的图片采用
img
标签实现,无下载需求的图片采用CSS
背景图实现。
产品logo,用户头像,用户产生的图片等有潜在下载需求的图片,以
img
形式实现, 能方便用户下载。
无下载需求的图片,比如:icon,背景,代码使用的图片等,尽可能采用css
背景图实现。
5 表单
5.1 控件标题
- [强制] 有文本标题的控件必须使用
label
标签将其与其标题相关联。
有两种方式
- 将控件置于
label
内。 -
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">
5.2 按钮
- [强制] 使用
button
元素时必须指明type
属性值。
button 元素的默认 type 为 submit,如果被置于 form 元素中,点击后将导致表单提交。为显示区分其作用方便理解,必须给出 type 属性。
<button type="submit">提交</button>
<button type="button">取消</button>
- [建议] 尽量不要使用按钮类元素的
name
属性。
由于浏览器兼容性问题,使用按钮的
name
属性会带来许多难以发现的问题。
5.3 可访问性
- [建议] 负责主要功能的按钮在
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">
6 多媒体
- [建议] 当在现代浏览器中使用
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>
7 注释
-
[强制] 对于html片段的功能块加注释。
-
[建议]
HTML
过长的节点加上开始标签
结束标签
开始和结束的注释添分别加在
HTML
代码段的上方和下方,用相同的名字
标识,结束的注释加上end
,如下图。这样可以方便用类似cmd + D
的快捷键定位代码段
参考公司标配的dell显示器,一屏能显示50行html标签,所以超过50行标签的大节点要求加上首尾注释
网友评论