前端开发规范
CSS相关
命名规范
尽量避免使用id选择器,使用class选择器,不要使用标签选择器设置样式
使用BEM规范
标准的 BEM 写法是:.block-name__element-name--modifier-name
- Block
可以使用字母,数字,连字符进行命名
任何html元素都可以成为一个block
不依赖于页面上的其他block或者element。
<header class="header"></header>
.header {
color: #333;
background: #f5f5f5;
}
- Element
组成块的一部分,内部的任何元素都与块有关联,不能在块的外部使用
<article class="article">
<h2 class="article__title"></h2>
<p class="article__content"></p>
</article>
.article {
padding: 12px;
&__title {
font-size: 1rem;
}
&__content {
font-size: .9rem;
}
}
- Modifier
用来表示块或者元素的状态,外观或者行为,不必须,可以选择使用
<button class="btn btn--disabled"></button>
.btn {
color: #333;
background-color: #fff;
&--disabled{
color: #fff;
background-color: #6c757d;
}
}
示例
<div class="list-card">
<img class="list-card__img" />
<div class="list-card__content">
<a class="list-card__link"></a>
<p class="list-card__desc"></p>
<div class="list-card__stats">
<span class="list-card__stat"><i class="list-card__icon"></i></span>
<span class="list-card__stat"><i class="list-card__icon"></i></span>
<span class="list-card__stat"><i class="list-card__icon"></i></span>
<span class="list-card__date"></span>
</div>
</div>
</div>
当然,BEM 不是必须的,你依然可以选择自己喜欢的方式编写,组织你的 CSS 代码。
你也可以使用 block-element_modifier 的方式。
Mix
一种在一个DOM节点上使用不同BEM的方法:
1.组合不同实体的行为和样式,而不需要复制代码
2.基于现有的组件组合创造出新的组件
<!-- `header` block -->
<div class="header">
<!--
The `search-form` block is mixed with the `search-form` element
from the `header` block
-->
<div class="search-form header__search-form"></div>
</div>
常见的CSS class类名
包裹类: container, wrapper, outer, inner, box, header, footer,main, content, aside, page, section, block
状态类: primary, secondary, success, danger, warning, info, error, Link, light, dark, disabled, active, checked, loading
尺寸类: large, middle, small, bigger, smaller
组件类: card, list, picture, carousel, swiper, menu, navs, badge, hint, modal, dialog
位置类: first, last, current, prev, next, forward, back
文本类: title, desc, content, date, author, category,label,tag
人物类: avatar, name, age, post, intro
参考来源:BEM命名规范入门及常用CSS class 命名 、css BEM书写规范
预编译处理器
- 预编译处理器不要嵌套太多层,一般
不超过5层,超过5层则必须要拆分以减少css代码量; - 使用BEM规范选择器
建议不超过2级,命名上不要使用B__E__E的写法(B: block,E:element);
布局
-
如果没有浏览器兼容问题则使用flex布局
-
页面上的样式相同时应当抽取公共部分进行类名
class进行引用 -
页面尽量布局尽量考虑做严谨一些
JS相关
变量声明时,确定不变的写成常量 const,而不是过度使用变量声明 let,var声明基本不用。
命名
- 统一使用驼峰(camelCase)命名(对象、函数、实例)
// good
function getValue() {}
// bad
function getvalue() {}
// good
const userName = "xxx";
// bad
const username = "xxx"
- 用 PascalCase 命名类
// bad
function user(options) {
this.name = options.name;
}
const bad = new user({
name: 'nope',
});
// good
class User {
constructor(options) {
this.name = options.name;
}
}
const good = new User({
name: 'yup',
});
格式规范
使用eslint+prettier插件进行统一管理配置,解决eslint和prettier相关冲突问题
eslint规则在.eslintrc.js中定义,规定好相关规则;
主要注意一下几条:
- 代码缩进用4或者2空格
- 语句必须默认后加分号
- 使用单引号或双引号等相关配置(还有很多,配置参考)
- 提交代码前将console.log语句删掉或注释掉(不然影响其他开发人员调试)
一些情况是不需要检测的,例如第3方的库, 框架、组件、ui库等等,可以将这些文件放在.eslintignore文件中,可以忽略eslint的检测
来源:稀土掘金
prettier
- 安装依赖:
npm install --save-dev --save-exact prettier // or yarn add --dev --exact prettier - 创建一个空配置文件,配置相关配置(相关配置 百度一下 )
在根目录下创建 .prettierrc.json - 创建一个.prettierignore文件,用于忽略文件不能格式化
# Ignore artifacts: dist build coverage - VSCode安装 Prettier-Code Formater插件并配置
format On Save进行保存格式化。
prettier 和 eslint 会有一些配置上的冲突
安装eslint-config-prettier以使 ESLint 和 Prettier 相互配合,安装完后在.eslintrc中配置(以Create-React-App为例)
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest",
"prettier"
]
}
来源:前端开发爱好者
代码
多使用函数式编程
- es5:filter,map,reduce,slice,concat
- es6+: findIndex,find,includes,some,isArray等
枚举或标识不要使用中文
在项目中尽量不要使用中文进行传值,个人对声明值为中文是较为反感的。
注释
有必要时可添加添加 jsDoc注释 进行一些注释提示;
可以通过输入 /** 然后 Enter 快速生成注释;
变量/函数 声明时,可为弱类型提供代码提示;
参考:JSDoc 注释规范
vue项目相关
v-for
- 一定要加上key,一般key取id或者唯一的变量值,比如:key="item.id",:key="item.uuid"等,如果没有则使用index进行绑定
维护重用
- 项目页面上超过一千行代码时应当考虑抽取封装组件,单个功能要抽离到当前文件目录下的components目录下,以单独组件方式引入到当前页面使用
- 页面上代码相同时
(超过3次)应抽离成通用方法进行开发,如多个页面都用到,抽取成当前业务块的公共方法,多个业务块用到则抽取成全局方法 - 使用频率较高的工具类函数抽离到utils/index.js工具类中
项目目录结构
- 按业务模块进行目录划分,一个业务模块只负责当前业务模块内的事情
- 业务模块的公共方法也可在当前业务模块目录下建立一个公共common目录进行存放
其他一些文件命名和编码规范
下面有几篇较为全面的一些风格指南,择其一些相应的规范约束自己,写出较舒服的代码
地址:史上最全 Vue 前端代码风格指南、前端开发规范文档、vue官方风格指南
业务相关
列表
-
列表规定显示为一行/三行/五行(
在开发时应该提前和产品确认规定),超出文字使用一致省略 -
预知长度固定值或较短的字典值,宽度设为固定宽度
-
表格数据请求方法时需要给表格添加loading加载状态(常规做法是请求封装)
具体方式:百度一下
对话框表单提交
-
给对应的提交请求按钮添加loading请求限制操作或者添加模态加载等操作安全(常规做法是请求封装)
具体方式:百度一下
(其他业务相关约定有待补充)
命名相关
变量命名
变量名应该使用清晰具体含义的英文描述,避免用一个字母命名,而应改使命名更加语义化
- 使用易读的命名
- 描述变量名尽量简洁精确,具体这个变量是做什么操作
- 像data/value这些并不清楚是做什么的,如果使用则应考虑是否能明显地从上下文知道数据的含义