基本原则

  • 结构、样式、行为分离

    文档和模板只包含HTML结构,样式都放到样式表里,行为放到脚本中

  • 缩进

    统一tab缩进或空格缩进,不混用

  • 文件编码

    使用不带 BOM 的 UTF-8 编码。

    在 HTML中指定编码

    <meta charset="utf-8">

    无需使用 @charset 指定样式表的编码,它默认为 UTF-8 (参考 @charset);

  • 使用小写字母

  • 省略外链资源URL协议部分

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

    <!--推荐-->
    <script src="//www.google.com"></script>
    
    .example {
    	background:url("//www.google.com");
    }
    <!--不推荐-->
    <script src="https://www.google.com"></script>
    
    .example {
    	background:url("https://www.google.com");
    }
  • 统一注释,单行注释双斜线与文字之间保留一个空格

    若至少三行注释时,第一行为/*,最后行为*/,其他行以*开始,并且注释文字与*保留一个空格。

  • 文件名不含空格,一般只使用小写字母,包含多个单词时使用半角连词符‘-’分隔

HTML

  • 尽量减少标签数量

  • Class应以功能或内容命名

  • class与id单词字母小写,class采用下划线分割,id使用驼峰法命名

  • 避免创建无样式信息的 class

  • HTML 属性应该按照特定的顺序出现以保证易读性

    id,class,name,data-xxx,src, for, type, href,title, alt,aria-xxx, role

  • 属性的定义,统一使用双引号

  • 语义嵌套约束,严格嵌套约束

  • 语义化

    没有 CSS 的 HTML 是一个语义系统而不是 UI 系统。通常情况下,每个标签都是有语义的.语义化的 HTML 结构,有助于机器(搜索引擎)理解,另一方面多人协作时,能迅速了解开发者意图。

  • 为每个HTML页面的第一行添加标准模式的声明

    <!DOCTYPE html>
  • lang属性的取值应该遵循 BCP 47 - Tags for Identifying Languages

    <!--中文-->
    <html lang="zh-Hans">  
    </html>
    <!--简体中文-->
    <html lang="zh-cmn-Hans">  
    </html>
    <!--英文-->
    <html lang="en">  
    </html>
  • IE兼容模式

    优先使用最新版本的IE 和 Chrome 内核。

  • viewport

    为移动端设备优化,设置可见区域的宽度和初始缩放比例

    <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">

    viewport: 一般指的是浏览器窗口内容区的大小,不包含工具条、选项卡等内容;

    width: 浏览器宽度,输出设备中的页面可见区域宽度;

    device-width: 设备分辨率宽度,输出设备的屏幕可见宽度;

    initial-scale: 初始缩放比例;

    maximum-scale: 最大缩放比例;

  • favicon

    在未指定 favicon 时,大多数浏览器会请求 Web Server 根目录下的 favicon.ico 。为了保证 favicon 可访问,避免404,必须遵循以下两种方法之一:

    在 Web Server 根目录放置 favicon.ico 文件;使用 link 指定 favicon;

  • SEO优化

  • head模板

    <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"><!DOCTYPE html>
    <html lang="en">
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge,chrome=1">
        <title>Title</title>
        <!--SEO-->
        <meta name="keywords" content="your keywords">
        <meta name="description" content="your description">
        <meta name="author" content="author,email address">
        <!--为移动设备添加viewport-->
        <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
        <!--favicon-->
        <link rel="shortcut icon" href="favicon">
    </html>

CSS

  • 代码组织

    以组件为单位组织代码段;

    制定一致的注释规范;

    组件块和子组件块以及声明块之间使用一空行分隔,子组件块之间三空行分隔;

    如果使用了多个 CSS 文件,将其按照组件而非页面的形式分拆,因为页面会被重组,而组件只会被移动;

    良好的注释是非常重要的。请留出时间来描述组件(component)的工作方式、局限性和构建它们的方法。不要让你的团队其它成员来猜测一段不通用或不明显的代码的目的。

  • 避免选择器嵌套层级过多,尽量少于 3 级;

    避免选择器和 Class、ID 叠加使用;

    出于性能考量,在没有必要的情况下避免元素选择器叠加 Class、ID 使用

  • 声明顺序

    相关属性应为一组,推荐的样式编写顺序

    Positioning

    Box model

    Typographic

    Visual

    由于定位(positioning)可以从正常的文档流中移除元素,并且还能覆盖盒模型(box model)相关的样式,因此排在首位。盒模型决定了组件的尺寸和位置,因此排在第二位。

    其他属性只是影响组件的内部(inside)或者是不影响前两组属性,因此排在后面。

  • 媒体查询放在尽可能相关规则的附近

  • 不要使用 @import

    相比,@import 要慢很多,不光增加额外的请求数,还会导致不可预料的问题。

  • 慎重选择高消耗的样式

    高消耗属性在绘制前需要浏览器进行大量计算:

    box-shadows

    border-radius

    transparency

    transforms

    CSS filters

  • 避免过分重排

  • 正确使用Display的属性

    Display 属性会影响页面的渲染,请合理使用。

    display: inline后不应该再使用 width、height、margin、padding 以及 float;

    display: inline-block 后不应该再使用 float;

    display: block 后不应该再使用 vertical-align;

    display: table-* 后不应该再使用 margin 或者 float;

  • 不滥用float

  • 动画性能优化

    动画的基本概念:

    帧:在动画过程中,每一幅静止画面即为一“帧”;

    帧率:即每秒钟播放的静止画面的数量,单位是fps(Frame per second);

    帧时长:即每一幅静止画面的停留时间,单位一般是ms(毫秒);

    跳帧(掉帧/丢帧):在帧率固定的动画中,某一帧的时长远高于平均帧时长,导致其后续数帧被挤压而丢失的现象。

    一般浏览器的渲染刷新频率是 60 fps,所以在网页当中,帧率如果达到 50-60 fps 的动画将会相当流畅,让人感到舒适。

    如果使用基于 javaScript 的动画,尽量使用requestAnimationFrame. 避免使用 setTimeout, setInterval.

    避免通过类似 jQuery animate()-style 改变每帧的样式,使用 CSS 声明动画会得到更好的浏览器优化。

    使用 translate 取代 absolute 定位就会得到更好的 fps,动画会更顺滑。

  • 3D或透视变换(perspective transform)CSS属性和对 opacity 进行 CSS 动画会创建新的图层,在硬件加速渲染通道的优化下,GPU 完成 3D 变形等操作后,将图层进行复合操作(Compesite Layers),从而避免触发浏览器大面积重绘和重排。使用 translate3d 右移 500px 的动画流畅度要明显优于直接使用 left

  • CSS 选择器是从右到左进行规则匹配。只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,直到找到和规则匹配的选择符,或者因为不匹配而退出。把最右边选择符称之为关键选择器。

    避免使用关键选择器是通配选择器的情况。

    避免使用标签或class选择器限制id选择器

    避免使用标签限制class选择器

    避免使用多层标签选择器,使用class选择器替换,减少css查找

    避免使用子选择器

    /*不推荐*/
    .tree ul li{}
    /*推荐*/
    .tree > ul > li{}
    /*非常推荐*/
    .tree-li{}

    使用继承

    /*不推荐*/
    p > span{font-size:12px;}
    /*推荐*/
    p{font-size:12px;}

JavaScript

注释

  • 没有必要,不加注释。有必要的注释写详尽。
  • 单行注释必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。
  • 避免使用 /…/ 这样的多行注释。有多行注释内容时,使用多个单行注释。

命名

  • 变量:驼峰式
  • 私有属性、变量和方法以下划线_开头
  • 函数,函数参数:驼峰式
  • 类、枚举变量:Pascal命名法,每个单词首字母大写
  • 常量、枚举属性:使用全部字母大写,单词间下划线分割

命名语法

  • 类名使用名词
  • 函数名使用动宾短语
  • boolean类型的变量使用is或has开头
  • Promise对象用动宾短语的进行时表示

接口命名

  • 可读性强
  • 尽量不使用缩写

检测

  • 类型检测优先使用typeof
  • 对象检测使用instanceof
  • null 或 undefined 的检测使用 == null

事件

  • 对 Ajax 加载的 DOM 元素绑定事件时尽量使用事件委托。事件委托允许在父元素绑定事件,子代元素可以响应事件,也包括 Ajax 加载后添加的子代元素;

链式写法

  • 尽量使用链式写法而不是用变量缓存或者多次调用选择器方法;
  • 当链式写法超过三次或者因为事件绑定变得复杂后,使用换行和缩进保持代码可读性;

性能优化

  • 避免不必要的DOM操作
  • 异步加载第三方内容

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

hexo迁移 上一篇
C++笔记 下一篇