前端规范

前端规范

前端开发规范文档

HTML规范

语法

HTML5 doctype – 为每个 HTML 页面的第一行添加标准模式的声明
用两个空格来代替制表符(tab) – 保证在所有环境下展现一致
嵌套元素应当缩进一次(即两个空格)
对于属性的定义,确保全部使用双引号
不要省略可选的结束标签(例如, 或 )


<!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>

结构顺序和视觉顺序基本保持一致

按照从上至下、从左到右的视觉顺序书写HTML结构。
有时候为了便于搜索引擎抓取,我们也会将重要内容在HTML结构顺序上提前。

<header>
    <div class="logo"></div>
    <div class="user-box"></div>
</header>
<nav>
    <div class="nav-list"></div>
</nav>

IE 兼容模式

IE 支持通过特定的 标签来确定绘制当前页面所应该采用的 IE 版本。除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的模式。

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
</head>

字符编码

通过明确声明字符编码,能够确保浏览器快速并容易的判断页面内容的渲染方式。

<head>
  <meta charset="UTF-8">
</head>

属性顺序

HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读性。

  • class
  • id, name
  • data-*
  • src, for, type, href, value
  • title, alt

class 用于标识高度可复用组件,因此应该排在首位。

<a class="..." id="..." data-toggle="modal" href="#">link</a>

<input class="form-control" type="text">

<img src="..." alt="...">

css规范

语法

用两个空格来代替制表符(tab) – 保证在所有环境下展现一致
为选择器分组时,将单独的选择器单独放在一行
为了代码的易读性,在每个声明块的左花括号前添加一个空格
每条声明语句的 : 后应该插入一个空格
声明块的右花括号应当单独成行
每条声明都应该独占一行
所有声明语句都应当以分号结尾
对于属性值或颜色参数,省略小于 1 的小数前面的 0 (例如,.5代替 0.5;.5px 代替0.5px)
十六进制值应该全部小写,例如,#fff。尽量使用简写形式的十六进制值,例如,用 #fff代替 #ffffff
为选择器中的属性添加双引号,例如,input[type=”text”]

CSS文件的分类和引用顺序

通常,一个项目我们只引用一个CSS,但是对于较大的项目,我们需要把CSS文件进行分类。

我们按照CSS的性质和用途,将CSS文件分成“公共型样式”、“特殊型样式”、“皮肤型样式”,并以此顺序引用(按需求决定是否添加版本号)。

公共型样式:包括了以下几个部分:“标签的重置和设置默认值”、“统一调用背景图和清除浮动或其他需统一处理的长样式”、“网站通用布局”、“通用模块和其扩展”、“元件和其扩展”、“功能类样式”、“皮肤类样式”。
特殊型样式:当某个栏目或页面的样式与网站整体差异较大或者维护率较高时,可以独立引用一个样式:“特殊的布局、模块和元件及扩展”、“特殊的功能、颜色和背景”,也可以是某个大型控件或模块的独立样式。
皮肤型样式:如果产品需要换肤功能,那么我们需要将颜色、背景等抽离出来放在这里。

class 命名

class 名称中只能出现小写字符和破折号(-)(不是下划线,也不是驼峰命名法)。破折号应当用于相关 class 的命名(类似于命名空间)(例如,.btn 和 .btn-danger)。
避免过度任意的简写。.btn 代表 button,但是 .s不能表达任何意思。
class 名称应当尽可能短,并且意义明确。
使用有意义的名称。使用有组织的或目的明确的名称,不要使用表现形式(presentational)的名称。
基于最近的父 class 或基本 class 作为新 class 的前缀。

.nav{ ... }
.important { ... }
.nav-item{ ... }

选择器

对于通用元素使用 class ,这样利于渲染性能的优化。
对于经常出现的组件,避免使用属性选择器(例如,[class^="…"])。浏览器的性能会受到这些因素的影响。
选择器要尽可能短,并且尽量限制组成选择器的元素个数,建议不要超过3 。

/* Bad*/
span { ... }
.page-container #stream .stream-item .tweet .tweet-header .username { ... }
.avatar { ... }

/* Good*/
.avatar { ... }
.tweet-header .username { ... }
.tweet .avatar { ... }

声明顺序

相关的属性声明应当归为一组,并按照下面的顺序排列:

Positioning
Box model
Typographic
Visual
由于定位可以从正常的文档流中移除元素,并且还能覆盖盒模型相关的样式,因此排在首位。盒模型排在第二位,因为它决定了组件的尺寸和位置。
其他属性只是影响组件的内部或者是不影响前两组属性,因此排在后面。

.select {
  /* Positioning */
  position: absolute;
  top: 0;
  left: 0;
  z-index: 100;

  /* Box-model */
  display: block;
  float: left;
  width: 200px;
  height: 200px;

  /* Typography */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  color: #333;
  text-align: center;

  /* Visual */
  background-color: #f5f5f5;
  border: 1px solid #e5e5e5;
  border-radius: 3px;

  /* Misc */
  opacity: 1;
}

简写形式的属性声明

在需要显示地设置所有值的情况下,应当尽量限制使用简写形式的属性声明。常见的滥用简写属性声明的情况如下:

padding
margin
font
background
border
border-radius

.element {
  margin: 10px 20px;
  background-color: red;
  background-image: url("image.jpg");
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}

JavaScript规范

语法

变量命名

强烈建议使用ESlint来进行代码检查

用两个空格来代替制表符(tab) – 保证在所有环境下展现一致
变量, 使用小驼峰命名法
私有属性、变量和方法以下划线 _ 开头
常量采用大写字母,下划线连接的方式
字符常量一般情况下统一使用单引号’’
使用的URL的地方一定全大写, 比如说 reportURL

let loadingModules = {};
const URL = 'www.baidu.com';
const USERNAME = '李二狗';
function getNewNum(num) {
  let _newNum = '';
  _newNum = num + 5;
  return _newNum;
}

空格

对象属性:后应加空格
{大括号前应加一个空格
运算符前后应加空格,如: +, -, %, &&等
if else else前后留有空格
普通for循环, 分号后留有一个空格, 判断条件等内的操作符两边不留空格, 前置条件如果有多个,逗号后留一个空格

var man = {
  hair: 'black',
  eyes: 'brown'
}

function findNumLessThan5(arr){
  let _newArr = [];
  for(let i = 0,len = arr.length; i < len; i++; ){
    if(arr[i] < 5){
      _newArr.push(arr[i]);
    } else {
      // do nothing
    }
  }
  return _newArr
}

注释

何时使用

难于理解的代码段
可能存在错误的代码段
浏览器特殊的HACK代码
想吐槽的产品逻辑, 合作同事
业务逻辑强相关的代码

注释原则

As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。
As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感。
单行注释 必须独占一行。 // 后跟一个空格,缩进与下一行被注释说明的代码一致。
多行注释 避免使用 //这样的多行注释。有多行注释内容时,使用多个单行注释。
函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识。
参数和返回值注释必须包含类型信息和说明
当函数是内部函数,外部不可访问时,可以使用 @inner 标识;

/*
 * 函数描述
 *
 * @param {string} p1 参数1的说明
 * @param {string} p2 参数2的说明,比较长
 *     那就换行了.
 * @param {number=} p3 参数3的说明(可选)
 * @return {Object} 返回值描述
 */
function foo(p1, p2, p3) {
  var p3 = p3 || 10;
  return {
    p1: p1,
    p2: p2,
    p3: p3
  };
}

文件注释

文件注释用于告诉不熟悉这段代码的读者这个文件中包含哪些东西。 应该提供文件的大体内容, 它的作者, 依赖关系和兼容性信息。如项目交接,新的交接人应把author写到前边。如有多个交接人,应按责任或及时回应速度排序,以便快速找到维护人。

/**
 * 前端开发规范文档
 * @author liergou(liergou@123.com)
 */

性能优化

优化DOM查询

短时间内多次操作同一DOM节点,要对DOM查询结果进行缓存,避免性能浪费。
动态添加DOM节点,要将HTML代码整合到一起后再进行渲染,以减少reflow和repaint

function foo(data){
  let parent = document.getElementById('list');
  let dom = [];
  for(let i = 0,len = data.length; l < len; i++){
    let html= data[i];
    dom.push(html);
  }
  parent.innerHTML = dom.join('');
}

抽象公共方法

对于多次出现的功能或者组件,要进行抽象和封装,提高复用性,提高代码的整洁性,便于以后的维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值