制定自己团队的前端开发规范文档

本文详细介绍了前端开发中的命名规范,包括项目命名、目录结构、Vue组件命名、HTML和CSS的编写规则,以及JavaScript的编码风格。强调了语义化标签、媒体查询、CSS选择器顺序、JavaScript变量命名和代码缩进等关键点,旨在提升代码质量和可维护性。
摘要由CSDN通过智能技术生成

命名规范

项目命名

全部采用小写方式,包含多个单词时,使用中划线 ( - ) 分隔。
例:my-project-name

目录命名

参照项目命名规则;

有复数结构时,要采用复数命名法。

例:pages, styles,images,components, utils,data-models

vue的项目中,components下的组件目录名,使用大驼峰命令

例:LeftBar,BackToTop

javaScript 文件命名

参照项目命名规则;

例:error-log.js,get-page-title.js

css,less文件命名

参照项目命名规则;

例:index.css,retina-sprites.css

HTML文件命名

参照项目命名规则;

例:avatar-upload.html

如果使用Vue或者React技术栈,组件Component命名

  • 能直观的感受当前组件的用途
  • 所有组件名字使用大驼峰式命名法:首字母大写

例:MixChart.vue

HTML规范

语法:

  • 缩进使用 tab(2 个空格);
  • 嵌套的节点应该缩进;
  • 在属性上,使用双引号,不要使用单引号;
  • 属性名全小写,用中划线(-)做分隔符;
  • 要在自动闭合标签结尾处使用斜线;
<!DOCTYPE html>
<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>

标准模式

在开头规定 doctype,来启动标准模式,doctype 要大写。

<!DOCTYPE html>
<html>
  ...
</html>

规定字符编码

在HTML中指定编码<meta charset="utf-8">

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
  </head>
  ...
</html>

IE 兼容模式

使用 meta 标签指定页面应该使用什么版本的 IE 来渲染。

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  </head>
  ...
</html>

语义化标签

html 的标签能使用语义化的,尽量使用语义化标签,避免一个页面都是 div 或者 p 标签。

<!-- bad -->
<div>
  <p></p>
</div>

<!-- good -->
<header></header>
<footer></footer>

外链资源URL协议

省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,使 URL 成为相对地址,避免Mixed Content 问题,减小文件字节数。

Mixed Content:http和https混用造成的问题。

其它协议(ftp 等)的 URL 不省略。

<!-- bad -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.3"></script>

<!-- good -->/* 推荐 */
<script src="//cdn.jsdelivr.net/npm/vue@2.5.3"></script>


<!-- bad -->
.example {
  background: url(http://www.google.com/images/example);
}

<!-- good -->/* 推荐 */
.example {
  background: url(//www.google.com/images/example);
}

标签中的属性顺序

  • class(class 是最高的复用设计,应该放在最前)
  • id name(id 尽量少用)
  • data-\\*自定义属性(属性名称全小写用-做连接)
  • src(资源文件)
  • placeholder title alt(提示)
  • required readonly disable(辅助)

CSS规范

命名

  • 类名使用小写字母,以中划线( - )分隔
  • id 采用驼峰式命名
  • less、scss 中的变量、函数、混合、placeholder 采用驼峰式命名
/* class */
.element-content {
  ...;
}

/* id */
#myDialog {
  ...;
}

/* 变量 */
$colorBlack: #000;

/* 混合 */
@mixin centerBlock {
  ...;
}

属性声明顺序

书写顺序前后为:

  • 位置属性(position,top,right,z-index,display,flaot)
  • 自身属性(width height padding border margin background)
  • 文字(font,line-height,letter-spacing, color)
  • 其他(animation,transition)

缩进

使用 tab 缩进(2 个空格)

.element {
  border-radius: 10px;
  width: 50px;
  height: 50px;
}

分号

每个声明结束都要加分号

.div{
  width: 50px;
  height: 50px;
}

引号

  • 最外层统一使用双引号
  • url 的内容要用引号
  • 属性选择器中的属性值需要引号

每个声明结束都要加分号

.box:after {
  content: "";
  background-image: url("logo.png");
}

li[data-name="single"] {
  ...;
}

颜色

  • 颜色16进制用小写字母
  • 颜色16进制尽量用简写
/* bad */
.element {
    color: #ABCDEF;
    background-color: #001122;
}

/* good */
.element {
    color: #abcdef;
    background-color: #012;
}

媒体查询

尽量将媒体查询的规则靠近与他们相关的规则,不要将他们一起放到一个独立的样式文件中,或者丢在文档的最底部,这样做只会让大家以后更容易忘记他们.

.element {
    ...
}

.element-avatar{
    ...
}

@media (min-width: 720px) {
    .element {
        ...
    }

    .element-avatar {
        ...
    }
}

Less/scss相关规范

  • CSS选择器不要超过3层
  • 避免嵌套过多,LESS/SCSS嵌套最多不能超过5层
  • 组织顺序
  1. @import
  2. 变量声明
  3. 样式声明
@import "mixins/size.less";

@colorBlack: #000;

.page {
  width: 960px;
  margin: 0 auto;
}

其他规范

  • 去掉小数点后面的0,如:rgba(0,0,0,0.5)=>rgba(0,0,0,.5)
  • 尽量少用元素选择器

JavaScript 规范

缩进

使用 tab 缩进(2 个空格)

if (x < y) {
  x += 2;
} else {
  x += 1;
}

命名规范

  • 变量命名:小驼峰命名
  • 参数名:小驼峰命名
  • 函数名:小驼峰命名
  • 方法/属性名:小驼峰命名
  • 类名开头大写
  • 常量全大写,用下划线 _ 连接
  • 私有属性、变量和方法以下划线 _ 开头
  • Boolean类型应当使用 is , has 等开头
  • 变量应当使用名词,尽量符合当时语义
var loadingModules ;

const MAX_COUNT = 10;

function insertHTML(element, html) {}

变量声明

  • 一个函数作用域中所有的变量声明尽量提到函数首部。尽量使用 let 和 const 取代var。
  • 在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。
function doSomethingWithItems(items) {
  // use one var
  let value = 10,
    result = value + 10,
    i,
    len;

  for (i = 0, len = items.length; i < len; i++) {
    result += 10;
  }
}

模板字符串

需要拼接,使用模板字符串


let str = 'world'

let string = `hello ${str}`

空格

以下几种情况不用写空格:

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

以下几种情况一定要写空格:

  • 三元运算符’?:'前后
  • 逗号后必须要有空格
  • 代码块{
  • 关键字前:else, while, catch, finally
  • 关键字后:if, else, for, while, do, switch, case, try,catch, finally, with, return, typeof
  • 对象的属性值前
  • for 循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
  • 函数声明,函数表达式(前不要空格,)后空格
  • 函数的参数之间

空行

以下几种情况一定要有空行

  • 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
  • 注释前(当注释在代码块的第一行时,则无需空行)
  • 代码块后
  • 文件最后保留一个空行
var x = 1;

// 注释前要有空行
if (x >= 1) {
  var y = x + 1;
}

引号

最外层统一使用单引号,除非字符串嵌套的情况。

// bad
var x = "test";

// good
var y = 'foo',
  z = '<div id="test"></div>';
  

括号

下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with

// bad
if (condition) doSomething();

// good
if (condition) {
  doSomething();
}

对象,数组

  • 对象属性名不需要加引号,如对象属性名是中划线命名的需要加引号(eslint 的 rules)
  • 对象以缩进的形式书写,不要写在一行(单个属性可以写一行,es6 导入方法时可以使用单行)
  • 数组、对象最后不要有逗号
// good
var a = {
  b: 1,
  c: 2
};

undefined

永远不要直接使用 undefined 进行变量判断;
使用 typeof 和字符串’undefined’对变量进行判断。

// bad
if (user=== undefined) {
    ...
}

// good
if (typeof user=== 'undefined') {
    ...
}

不允许存在多层嵌套的条件判断和循环(最多三层)

条件判断能使用三目运算符和逻辑运算符解决的,就不要使用条件判断,但是谨记不要写太长的三目运算符

其它

  • 换行符统一用’LF’
  • 对上下文this的引用只能使用'_this', 'that', 'self'其中一个来命名
  • 行尾不要有空白字符
  • 不允许有空的代码块(如果实在需要,可以在代码块中写注释)

注释规范

单行注释 ( // )

  • 单独一行:// (双斜线)与注释文字之间保留一个空格
  • 在代码后面添加注释://(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字之间保留一个空格。
  • 注释代码://(双斜线)与代码之间保留一个空格。
    例:
// 调用了一个函数;(1)单独在一行
setTitle();

var maxCount = 10; // 设置最大量;(2)在代码后面注释

// setData(); // (3)注释代码

多行注释 ( / 注释说明 / )

  • 若开始(/*和结束(*/)都在一行,推荐采用单行注释
  • 若至少三行注释时,第一行为/*,最后行为*/,其他行以*开始,并且注释文字与*保留一个空格。
    例:
/*
* 代码执行到这里后会调用setTitle()函数
* setTitle():设置title的值
*/
setTitle();

函数 ( 方法 ) 注释

函数(方法)注释也是多行注释的一种,但是包含了特殊的注释要求,参照 javadoc (百度百科)

/** 
 * 函数说明 
 * @关键字 
 */

例:

/**
 * 判断对象是否为空   
 * @param obj   
 * @returns {boolean}
 */
export const isNotEmpty = (obj) => {
  let flag = true;
  if (obj === "" || obj == null || obj === undefined || obj === "undefined") {
    flag = false;
  }
  return flag;
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sea9528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值