前端开发规范文档
<div><h1 data-id="heading-0">(一)前言及简介</h1>
<p>没有规矩,不成方圆,对于团队来说,有一套完整的开发规范可以减少团队协作成本和维护成本,让代码阅读起来更容易。</p>
<h1 data-id="heading-1">(二)环境搭建</h1>
<h2 data-id="heading-2">2.1 安装依赖</h2>
<p>项目中所需要的依赖都会在<code>package.json</code>文件中展示。</p>
<p>安装依赖需要使用<code>npm</code>命令,可去npm官方文档使用及学习。</p>
<h3 data-id="heading-3">2.1.1 生产环境依赖</h3>
<p>生产环境需要的依赖安装在属性<code>dependencies</code>之下。</p>
<p>可以使用命令:</p>
</div>
<p>npm install xxxx --save</p>
<blockquote>
<p>不可安装生产环境无需用到的依赖。</p>
</blockquote>
<h3 data-id="heading-4">2.1.2 开发环境依赖</h3>
<p>开发环境需要的依赖安装在属性<code>devDependencies</code>之下。</p>
<p>可以使用命令:</p>
<p>npm install xxxx <span class="hljs-attr">--save-dev </span></p>
<h2 data-id="heading-5">2.2 webpack配置</h2>
<h3 data-id="heading-6">2.2.1 运行端口</h3>
<p>项目开发环境下的运行端口为</p>
<p>port: 8082</p>
<h3 data-id="heading-7">2.2.2 代理</h3>
<p>如果项目中需要使用其他系统请求,涉及跨域问题,可按照如下修改代理配置。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">proxy: {
</span>'/api'<span style="color: rgba(0, 0, 0, 1)">: {
target: </span>'http://xxxx'<span style="color: rgba(0, 0, 0, 1)">,
pathRewrite: {</span>'^/api' : ''},<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 是否重写</span>
changeOrigin: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> target是域名的话,需要这个参数,</span>
secure: <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置支持https协议的代理</span>
<span style="color: rgba(0, 0, 0, 1)"> },
},</span></pre>
</div>
<h1 data-id="heading-8">(三)项目规范</h1>
<h2 data-id="heading-9">3.1 项目技术构成</h2>
<p>本项目由vue.js技术框架搭建,配合webpack打包。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 技术版本</span>
vue:4.1.2<span style="color: rgba(0, 0, 0, 1)">
webpack:</span>4.0.0</pre>
</div>
<p>vue.js官方文档 学习及使用。</p>
<p>webpack官方文档 学习及使用。</p>
<h2 data-id="heading-10">3.2 项目结构规范</h2>
<h3 data-id="heading-11">3.2.1 项目结构的核心思想</h3>
<ul>
<li>业务功能模块的相关代码都集中在一块,方便移动和删除</li>
<li>实现关注点分离,方便开发、调试、维护、编写、查阅、理解代码</li>
</ul>
<h3 data-id="heading-12">3.2.2 项目目录</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">.
├── vue.config.js</span>/<span style="color: rgba(0, 0, 0, 1)"> # webpack 配置文件;
├── config</span>/<span style="color: rgba(0, 0, 0, 1)"> # 与项目构建相关的常用的配置选项;
│ ├── index.js # 主配置文件
│ ├── dev.env.js # 开发环境变量
│ ├── prod.env.js # 生产环境变量
│ └── test.env.js # 测试环境变量
│
├── src</span>/<span style="color: rgba(0, 0, 0, 1)">
│ ├── main.js # webpack 的入口文件;
│ ├── assets</span>/<span style="color: rgba(0, 0, 0, 1)"> # 共用的代码以外的资源,如:图片、图标、视频 等;
│ ├── api</span>/<span style="color: rgba(0, 0, 0, 1)"> # 网络模块,如:接口;
│ ├── router</span>/<span style="color: rgba(0, 0, 0, 1)"> # 路由模块
│ ├── I18n</span>/<span style="color: rgba(0, 0, 0, 1)"> # 国际化模块
│ ├── pages</span>/<span style="color: rgba(0, 0, 0, 1)"> # 单页页面
│ ├── vuex</span>/<span style="color: rgba(0, 0, 0, 1)"> # 组件共享状态
│ ├── components</span>/<span style="color: rgba(0, 0, 0, 1)"> # 共用的组件;; 这里的存放的组件应该都是展示组件
│ │ ├── base</span>/<span style="color: rgba(0, 0, 0, 1)"> # 基本组件,如:共用的弹窗组件,loading加载组件,提示组件。
│ │ ├── common</span>/<span style="color: rgba(0, 0, 0, 1)"> # 共用的全局组件,封装的导航条,底部组件等等
│ │ ├── temp</span>/<span style="color: rgba(0, 0, 0, 1)"> # 模板组件,如:相同的页面封装成一个组件。
│ │ ├── UItemp</span>/<span style="color: rgba(0, 0, 0, 1)"> # UI组件,如:项目中特定的按钮,消息数字,等等一些样式可以封装成组件的。
│ ├── common</span>/<span style="color: rgba(0, 0, 0, 1)"> # 共用的资源,如:常用的图片、图标,共用的组件、模块、样式,常量文件等等;
│ │ ├── compatible</span>/<span style="color: rgba(0, 0, 0, 1)"> # 兼容模块,如:适合App和微信各种接口的模块;
│ │ ├── extension</span>/<span style="color: rgba(0, 0, 0, 1)"> # 已有类的扩展模块,如:对 Array 类型进行扩展的模块;
│ │ ├── libraries</span>/<span style="color: rgba(0, 0, 0, 1)"> # 存放自己封装的或者引用的库;
│ │ ├── tools</span>/<span style="color: rgba(0, 0, 0, 1)"> # 自己封装的一些工具
│ │ ├── constant.js # 存放js的常量;
│ │ ├── constant.scss # 存放scss的常量;
│ │ └── ...
│ └── app</span>/<span style="color: rgba(0, 0, 0, 1)"> # 存放项目业务代码;
│ ├── App.vue # app 的根组件;
├── public</span>/<span style="color: rgba(0, 0, 0, 1)"> # 纯静态资源,该目录下的文件不会被webpack处理,该目录会被拷贝到输出目录下;
├── .babelrc # babel 的配置文件
├── .editorconfig # 编辑器的配置文件;可配置如缩进、空格、制表类似的参数;
├── .eslintrc.js # eslint 的配置文件
├── .eslintignore # eslint 的忽略规则
├── .gitignore # git的忽略配置文件
├── .postcssrc.js # postcss 的配置文件
├── CHAGNELOG.md # 版本更新变更release
├── index.html # HTML模板
├── package.json # npm包配置文件,里面定义了项目的npm脚本,依赖包等信息
└── README.md # 项目信息文档</span></pre>
</div>
<h2 data-id="heading-13">3.3 资源命名</h2>
<h3 data-id="heading-14">3.3.1 目录命名</h3>
<ul>
<li>能直观的感受当前目录文件的作用</li>
<li>以小驼峰方式命名</li>
<li>特殊缩写名称可大写开头</li>
</ul>
<div class="cnblogs_code">
<pre>│ ├── pages/<span style="color: rgba(0, 0, 0, 1)">
│ ├── components</span>/<span style="color: rgba(0, 0, 0, 1)">
│ │ ├── UItemp</span>/</pre>
</div>
<h3 data-id="heading-15">3.3.2 页面命名</h3>
<ul>
<li>能直观的感受当前文件的作用</li>
<li>以小驼峰方式命名</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">│ │ │ ├── login.vue # 登录页面
│ │ │ ├── changePhone.vue # 用户中心</span>-修改电话号码页面</pre>
</div>
<h3 data-id="heading-16">3.3.3 组件命名</h3>
<ul>
<li>能直观的感受当前组件的用途</li>
<li>组件命名始终是多个单词的,避免跟html元素或标签冲突</li>
<li>要么大写开头,要么始终用横线链接(这里项目大写开头)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 反例</span>
components/
|-<span style="color: rgba(0, 0, 0, 1)"> MyButton.vue
</span>|-<span style="color: rgba(0, 0, 0, 1)"> VueTable.vue
</span>|-<span style="color: rgba(0, 0, 0, 1)"> Icon.vue
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 好例子</span>
components/
|-<span style="color: rgba(0, 0, 0, 1)"> BaseButton.vue
</span>|-<span style="color: rgba(0, 0, 0, 1)"> BaseTable.vue
</span>|- BaseIcon.vue</pre>
</div>
<div>
<div>
<h3 data-id="heading-17">3.3.4 <strong>图片命名</strong></h3>
<ul>
<li>
<p>图片文件夹一般遵从页面或者模块命名,如:<code>login/</code>)</p>
</li>
<li>
<p>图片不可随意命名,且严禁使用0,1,等数字直接命名图片。</p>
</li>
<li>
<p>图片命名可遵循:用途+描述,多个单词用下划线隔开,如:<code>login_icon.png</code>,<code>pwd_icon.png</code></p>
</li>
<li>
<p>10k以下图片建议放置<code>assets/img</code>下(webpack打包时直接转为base64嵌入)</p>
</li>
<li>
<p>大图且不常更换的图片放置<code>public/img</code>下</p>
</li>
<li>
<p>可用css编写的样式严禁使用图片</p>
</li>
<li>
<p>国际化图片,后缀使用简体<code>-cn</code>,英文<code>-en</code>,繁体<code>-tw</code></p>
</li>
</ul>
<pre><code class="hljs language-bash copyable" lang="bash"></code></pre>
</div>
</div>
<div>
<div class="cnblogs_code">
<pre>│ ├── assets/<span style="color: rgba(0, 0, 0, 1)">
│ │ ├── img</span>/<span style="color: rgba(0, 0, 0, 1)"> # 图片
│ │ │ ├── common</span>/<span style="color: rgba(0, 0, 0, 1)"> # 公共图片
│ │ │ │ ├── default_avatar.png# 默认头像
│ │ │ ├── login</span>/<span style="color: rgba(0, 0, 0, 1)"> # 登录模块
│ │ │ │ ├── login1.png # 登录模块图片
│ │ │ │ ├── login_icon</span>-<span style="color: rgba(0, 0, 0, 1)">en.png
│ │ │ │ ├── login_icon</span>-<span style="color: rgba(0, 0, 0, 1)">cn.png
│ │ │ │ ├── login_icon</span>-<span style="color: rgba(0, 0, 0, 1)">tw.png
│ │ │ ├── userInfo</span>/ # 用户中心模块的图片</pre>
</div>
<h2 data-id="heading-18">3.4 资源使用</h2>
<h3 data-id="heading-19">3.4.1 组件使用规范</h3>
<ul>
<li>使用时以<code>v-</code>开头</li>
<li>命名遵循组件命名规范</li>
<li>推荐使用单标签闭合</li>
</ul>
<div class="cnblogs_code">
<pre><v-BaseButton :data="data"/>
<script><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">{
components:{
</span>"v-BaseButton"<span style="color: rgba(0, 0, 0, 1)">:BaseButton
}
}
</span></srcipt</pre>
</div>
<div>
<div>
<h3 data-id="heading-20">3.4.2 <strong>图片使用规范</strong></h3>
<p>项目下有两个文件夹放置图片地址<code>src/assets/img</code>,<code>public/img</code></p>
<p>webpack打包时会直接copy<code>public/img</code>下的图片,所以,当你的图片放置<code>public/img</code>下时,为防止图片打包重复,需要遵从以下写法:</p>
<ul>
<li><strong><code>public/img</code>下的图片调用时禁止使用require</strong></li>
</ul>
</div>
<blockquote>
<p>因为通过require调用的图片会经过webpack打包,生成hash后缀,同`public/img`下图片重复</p>
</blockquote>
<div class="cnblogs_code">
<pre>let img1 = require('../public/img/xxxx')<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">错误写法</span>
let img2 ='../public/img/xxxx'<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">正确写法</span></pre>
</div>
<ul>
<li><code>public/img</code>下的图片不可直接嵌入img的src中</li>
</ul>
<blockquote>
<p>因为img标签src中的图片也会经过webpack打包</p>
</blockquote>
<div class="cnblogs_code">
<pre><!--错误写法-->
<img src="../public/img/xxx">
<!--正确写法-->
<img :src="`../public/img/xxx`"></pre>
</div>
<ul>
<li><code>src/assets/img</code>下的图片必须使用require写法,否则会报错找不到图片</li>
</ul>
<div class="cnblogs_code">
<pre><!--正确写法-->
<img src="../asset/img/xxx">
<!--错误写法-->
<img :src="`../asset/img/xxx`"></pre>
</div>
<div class="cnblogs_code">
<pre>let img1 = require('../asset/img/xxxx')<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">正确写法</span>
let img2 ='../asset/img/xxxx'<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">错误写法</span></pre>
</div>
<blockquote>
<p>图片这样区分,防止图片重复打包,增加项目体积</p>
</blockquote>
<h2 data-id="heading-21">3.5 项目路由</h2>
<h3 data-id="heading-22">3.5.1 路由命名</h3>
<ul>
<li>普通路由(非动态多级)命名,可以直接使用页面组件的命名。</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
path: </span>'/login'<span style="color: rgba(0, 0, 0, 1)">,
name: </span>'login'<span style="color: rgba(0, 0, 0, 1)">,
component(resolve) {
require.ensure([</span>'../pages/login/login.vue'], () =><span style="color: rgba(0, 0, 0, 1)"> {
resolve(require(</span>'../pages/login/login.vue'<span style="color: rgba(0, 0, 0, 1)">));
});
}
},</span></pre>
</div>
<ul>
<li>动态多级路由,遵循:用途或作用或功能。</li>
</ul>
<div class="cnblogs_code">
<pre>/user/personal/infomaition用户中心 -> 个人中心 -> 个人信息<span style="color: rgba(0, 0, 0, 1)">
/</span>user/company/infomaition用户中心 -> 企业中心 -> 企业信息</pre>
</div>
<h3 data-id="heading-23">3.5.3 多级路由</h3>
<ul>
<li>嵌套不可超过三层。</li>
</ul>
<h3 data-id="heading-24">3.5.4 路由权限</h3>
<h4 data-id="heading-25">3.5.4.1 登录权限</h4>
<p>一般页面无需登录可查看,重要页面需要登录权限。</p>
<p>登录权限字段在路由meta标签中确定。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">meta: {
requireAuth: </span><span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 为true则是需要登录权限</span>
}</pre>
</div>
<div>
<div>
<h4 data-id="heading-26">3.5.4.2 管理员权限</h4>
<p>管理员拥有的权限:</p>
<ul>
<li>显示管理入口,进入后台管理。</li>
<li>导航结构展示不一样。</li>
<li>与普通用户相同的路径,会展示不一样的内容。</li>
</ul>
<p>根据不同的权限,渲染不同的组件或页面。</p>
<h1 data-id="heading-27">(四)编码规范</h1>
<h2 data-id="heading-28">4.1 HTML规范</h2>
<h3 data-id="heading-29">4.1.1 <strong>文件编码</strong></h3>
<ul>
<li>开头声明文档类型</li>
<li>使用语言属性
<ul>
<li>中文:"zh-Hans"</li>
<li>简体中文:"zh-cmn-Hans"</li>
<li>繁体中文:"zh-cmn-Hant"</li>
<li>英文:"en"</li>
</ul>
</li>
<li>使用不带BOM的UTF-8编码</li>
<li>在HTML中指定编码<code><meta charset="utf-8"></code></li>
<li>SEO优化</li>
<li>viewport是否可缩放(为移动设备优化)</li>
<li>favicon:如果未指定,大多数浏览器会请求根目录下的favicon,为避免404错误,两种解决方法,一是在根目录放置favicon.ico文件,二是使用link指定favicon文件</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><!</span><span style="color: rgba(255, 0, 255, 1)">DOCTYPE html</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">html </span><span style="color: rgba(255, 0, 0, 1)">lang</span><span style="color: rgba(0, 0, 255, 1)">="en"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">charset</span><span style="color: rgba(0, 0, 255, 1)">="utf-8"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">http-equiv</span><span style="color: rgba(0, 0, 255, 1)">="X-UA-Compatible"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="IE=edge,chrome=1"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> SEO </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span>Style Guide<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="keywords"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="your keywords"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="description"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="your description"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="author"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="author,email address"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="viewport"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="width=device-width, initial-scale=1.0"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">link </span><span style="color: rgba(255, 0, 0, 1)">rel</span><span style="color: rgba(0, 0, 255, 1)">="shortcut icon"</span><span style="color: rgba(255, 0, 0, 1)"> href</span><span style="color: rgba(0, 0, 255, 1)">="path/to/favicon.ico"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">html</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<div>
<div>
<h3 data-id="heading-30">4.1.2 <strong>外链资源URL协议</strong></h3>
<p>省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,使 URL 成为相对地址,避免Mixed Content 问题,减小文件字节数。</p>
<blockquote>
<p>Mixed Content:http和https混用造成的问题。</p>
</blockquote>
<blockquote>
<p>其它协议(ftp 等)的 URL 不省略。</p>
</blockquote>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 推荐 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="//www.xxx.cn/statics/js/autotrack.js"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 不推荐 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="http://www.xxx.cn/statics/js/autotrack.js"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 推荐 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.example </span>{<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> url(//www.google.com/images/example)</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 不推荐 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.example </span>{<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> url(http://www.google.com/images/example)</span>;
}</pre>
</div>
<div>
<div>
<h3 data-id="heading-31">4.1.3 <strong>标签中的属性顺序</strong></h3>
<ul>
<li><code>class</code>(<code>class</code> 是最高的复用设计,应该放在最前)</li>
<li><code>id name</code>(<code>id</code> 应尽量少用)</li>
<li><code>data-\\*</code> 自定义属性(属性名称全小写用<code>-</code>做连接)</li>
<li><code>src</code> (资源文件)</li>
<li><code>placeholder</code> <code>title</code> <code>alt</code> (提示)</li>
<li><code>required</code> <code>readonly</code> <code>disable</code>(辅助)</li>
</ul>
<h3 data-id="heading-32">4.1.4 <strong>语义化</strong></h3>
<p>语义的HTML结构,有助于机器搜索,保证代码可读性。</p>
<p>常见的标签语义</p>
</div>
<div>
<div>
<table>
<thead>
<tr><th>标签</th><th>语义</th></tr>
</thead>
<tbody>
<tr>
<td><code><p></code></td>
<td>段落</td>
</tr>
<tr>
<td><code><h1,2,3></code></td>
<td>标题</td>
</tr>
<tr>
<td><code><ul></code></td>
<td>无序列表</td>
</tr>
<tr>
<td><code><ol></code></td>
<td>有序列表</td>
</tr>
<tr>
<td><code><blockquote></code></td>
<td>大段引用</td>
</tr>
<tr>
<td><code><cite></code></td>
<td>一般引用</td>
</tr>
<tr>
<td><code><b></code></td>
<td>为样式加粗</td>
</tr>
<tr>
<td><code><strong></code></td>
<td>为强调加粗</td>
</tr>
<tr>
<td><code><i></code></td>
<td>为样式倾斜</td>
</tr>
<tr>
<td><code><em></code></td>
<td>为强调倾斜</td>
</tr>
<tr>
<td><code><code></code></td>
<td>代码标识</td>
</tr>
<tr>
<td>……</td>
<td>……</td>
</tr>
</tbody>
</table>
</div>
<br>
<p>例如:</p>
<ul>
<li>h1 大标题,一般用于banner背景,一个页面有且只有一个</li>
<li>h2 章节标题,可以有多个</li>
<li>h3 章节内的文章标题</li>
<li>h4,h5,h6 小标题/副标题</li>
<li>p 段落</li>
</ul>
<div class="cnblogs_code">
<pre>├── h1---<span style="color: rgba(0, 0, 0, 1)">文章大标题
│ ├── h2</span>---<span style="color: rgba(0, 0, 0, 1)"> 这里是一个节点
│ │ ├──h3</span>---<span style="color: rgba(0, 0, 0, 1)"> 节点内的文章标题
│ │ │ ├── h4,h5,h6</span>--- 副标题/作者等信息
│ │ │ ├── p---<span style="color: rgba(0, 0, 0, 1)">段落
│ ├── h2</span>---<span style="color: rgba(0, 0, 0, 1)"> 这里是一个节点
│ │ ├──h3</span>---<span style="color: rgba(0, 0, 0, 1)"> 节点内的文章标题
│ │ │ ├── h4,h5,h6</span>--- 副标题/作者等信息
│ │ │ ├── p---段落 </pre>
</div>
<h3 data-id="heading-33">4.1.5 引号规范</h3>
<ul>
<li>属性值使用双引号包裹</li>
</ul>
<div class="cnblogs_code">
<pre><div :data="data" data-src="some"></div></pre>
</div>
<h3 data-id="heading-34">4.1.6 注释规范</h3>
<div class="cnblogs_code">
<pre><!-- 头部 -->
<view class="header">
<!-- LOGO -->
<image class="logo"></image>
<!-- /LOGO -->
<!-- 详情 -->
<view class="detail"> </view>
<!-- /详情 -->
</view>
<!-- /头部 --></pre>
</div>
<h2 data-id="heading-35">4.2 CSS规范</h2>
<h3 data-id="heading-36">4.2.1 css初始化及公用样式</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> ==========================================================================
css 初始化
============================================================================ </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> margin padding 初始化为0 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td </span>{<span style="color: rgba(255, 0, 0, 1)">
margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;
}<span style="color: rgba(128, 0, 0, 1)">
body, button, input, select, textarea </span>{<span style="color: rgba(255, 0, 0, 1)">
font</span>:<span style="color: rgba(0, 0, 255, 1)"> 12px/1.5tahoma, arial, \5b8b\4f53</span>;
}<span style="color: rgba(128, 0, 0, 1)">
h1, h2, h3, h4, h5, h6 </span>{<span style="color: rgba(255, 0, 0, 1)"> font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;}<span style="color: rgba(128, 0, 0, 1)">
address, cite, dfn, em, var </span>{<span style="color: rgba(255, 0, 0, 1)"> font-style</span>:<span style="color: rgba(0, 0, 255, 1)"> normal</span>;}<span style="color: rgba(128, 0, 0, 1)">
code, kbd, pre, samp </span>{<span style="color: rgba(255, 0, 0, 1)">font-family</span>:<span style="color: rgba(0, 0, 255, 1)"> couriernew, courier, monospace</span>;}<span style="color: rgba(128, 0, 0, 1)">
small </span>{<span style="color: rgba(255, 0, 0, 1)">font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 12px</span>;}<span style="color: rgba(128, 0, 0, 1)">
ul, ol </span>{<span style="color: rgba(255, 0, 0, 1)">list-style</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;}<span style="color: rgba(128, 0, 0, 1)">
a </span>{<span style="color: rgba(255, 0, 0, 1)">text-decoration</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;}<span style="color: rgba(128, 0, 0, 1)">
a:hover </span>{<span style="color: rgba(255, 0, 0, 1)">text-decoration</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;}<span style="color: rgba(128, 0, 0, 1)">
sup </span>{<span style="color: rgba(255, 0, 0, 1)">vertical-align</span>:<span style="color: rgba(0, 0, 255, 1)"> text-top</span>;}<span style="color: rgba(128, 0, 0, 1)">
sub </span>{<span style="color: rgba(255, 0, 0, 1)">vertical-align</span>:<span style="color: rgba(0, 0, 255, 1)"> text-bottom</span>;}<span style="color: rgba(128, 0, 0, 1)">
legend </span>{<span style="color: rgba(255, 0, 0, 1)">color</span>:<span style="color: rgba(0, 0, 255, 1)"> #000</span>;}<span style="color: rgba(128, 0, 0, 1)">
fieldset, img </span>{<span style="color: rgba(255, 0, 0, 1)">border</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;}<span style="color: rgba(128, 0, 0, 1)">
button, input, select, textarea </span>{<span style="color: rgba(255, 0, 0, 1)">font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;}<span style="color: rgba(128, 0, 0, 1)">
table </span>{<span style="color: rgba(255, 0, 0, 1)">
border-collapse</span>:<span style="color: rgba(0, 0, 255, 1)"> collapse</span>;<span style="color: rgba(255, 0, 0, 1)">
border-spacing</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;
}<span style="color: rgba(128, 0, 0, 1)">
html, body </span>{<span style="color: rgba(255, 0, 0, 1)">font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px !important</span>;}</pre>
</div>
<p>flex布局共用样式类,字体大小样式类,margin,padding类:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> flex布局共用样式类,字体大小样式类,margin,padding
(如有需求,可自行添加)
============================================================================ </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.yl-flex</span>{<span style="color: rgba(255, 0, 0, 1)">
dispaly</span>:<span style="color: rgba(0, 0, 255, 1)">flex</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.flex-center-center</span>{<span style="color: rgba(255, 0, 0, 1)">
justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
justify-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center
</span>}<span style="color: rgba(128, 0, 0, 1)">
.flex-start-center</span>{<span style="color: rgba(255, 0, 0, 1)">
justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> start</span>;<span style="color: rgba(255, 0, 0, 1)">
justify-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center
</span>}<span style="color: rgba(128, 0, 0, 1)">
.flex-end-center</span>{<span style="color: rgba(255, 0, 0, 1)">
justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> end</span>;<span style="color: rgba(255, 0, 0, 1)">
justify-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center
</span>}<span style="color: rgba(128, 0, 0, 1)">
.flex-wrap</span>{<span style="color: rgba(255, 0, 0, 1)">
flex-wrap</span>:<span style="color: rgba(0, 0, 255, 1)"> wrap</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.flex-column</span>{<span style="color: rgba(255, 0, 0, 1)">
flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)">column</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.flex-space-around</span>{<span style="color: rgba(255, 0, 0, 1)">
justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> space-around</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 文本 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.tl </span>{<span style="color: rgba(255, 0, 0, 1)">text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> left</span>;}<span style="color: rgba(128, 0, 0, 1)">
.tr </span>{<span style="color: rgba(255, 0, 0, 1)"> text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> right</span>;}<span style="color: rgba(128, 0, 0, 1)">
.tc </span>{<span style="color: rgba(255, 0, 0, 1)"> text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 按钮 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline-block</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.btn-success </span>{<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> @success</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.btn-error </span>{<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> @error</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 按钮禁用 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.disabled </span>{<span style="color: rgba(255, 0, 0, 1)">
outline</span>:<span style="color: rgba(0, 0, 255, 1)"> 0 none</span>;<span style="color: rgba(255, 0, 0, 1)">
cursor</span>:<span style="color: rgba(0, 0, 255, 1)"> default !important</span>;<span style="color: rgba(255, 0, 0, 1)">
opacity</span>:<span style="color: rgba(0, 0, 255, 1)"> .4</span>;<span style="color: rgba(255, 0, 0, 1)">
filter</span>:<span style="color: rgba(0, 0, 255, 1)"> alpha(opacity=40)</span>;<span style="color: rgba(255, 0, 0, 1)">
-ms-pointer-events</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
pointer-events</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 浮动与清除浮动 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.fl </span>{<span style="color: rgba(255, 0, 0, 1)">
float</span>:<span style="color: rgba(0, 0, 255, 1)"> left</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.fr </span>{<span style="color: rgba(255, 0, 0, 1)">
float</span>:<span style="color: rgba(0, 0, 255, 1)"> right</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.fix </span>{<span style="color: rgba(255, 0, 0, 1)">
*zoom</span>:<span style="color: rgba(0, 0, 255, 1)"> 1</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.fix:after </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> table</span>;<span style="color: rgba(255, 0, 0, 1)">
content</span>:<span style="color: rgba(0, 0, 255, 1)"> ''</span>;<span style="color: rgba(255, 0, 0, 1)">
clear</span>:<span style="color: rgba(0, 0, 255, 1)"> both</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 显示 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.dn </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.di </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.db </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> block</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.dib </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline-block</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.dt </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> table</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 定位 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.pr </span>{<span style="color: rgba(255, 0, 0, 1)">
position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pa </span>{<span style="color: rgba(255, 0, 0, 1)">
position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pf </span>{<span style="color: rgba(255, 0, 0, 1)">
position</span>:<span style="color: rgba(0, 0, 255, 1)"> fixed</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.ml20 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.ml10 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mr20 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-right</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mr10 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-right</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mt20 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mt10 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mb20 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.mb10 </span>{<span style="color: rgba(255, 0, 0, 1)">
margin-bottom</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.ml5</span>{<span style="color: rgba(255, 0, 0, 1)">
margin-left</span>:<span style="color: rgba(0, 0, 255, 1)">5px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.m10</span>{<span style="color: rgba(255, 0, 0, 1)">
margin</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.m20</span>{<span style="color: rgba(255, 0, 0, 1)">
margin</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.p10</span>{<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.p20</span>{<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pb20</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-bottom</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pb10</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-bottom</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pt20</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-top</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pt10</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-top</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pl20</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-left</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pl10</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-left</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pr20</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-right</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.pr10</span>{<span style="color: rgba(255, 0, 0, 1)">
padding-right</span>:<span style="color: rgba(0, 0, 255, 1)">10px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.rotate90</span>{<span style="color: rgba(255, 0, 0, 1)">
transform</span>:<span style="color: rgba(0, 0, 255, 1)"> rotate(90deg)</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.rotate180</span>{<span style="color: rgba(255, 0, 0, 1)">
transform</span>:<span style="color: rgba(0, 0, 255, 1)"> rotate(180deg)</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.rotate270</span>{<span style="color: rgba(255, 0, 0, 1)">
transform</span>:<span style="color: rgba(0, 0, 255, 1)"> rotate(270deg)</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 图片居中 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.img-middle</span>{<span style="color: rgba(255, 0, 0, 1)">
object-fit</span>:<span style="color: rgba(0, 0, 255, 1)"> contain</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 文本超出隐藏 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.txt-ellipsis</span>{<span style="color: rgba(255, 0, 0, 1)">
overflow</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;<span style="color: rgba(255, 0, 0, 1)">
text-overflow</span>:<span style="color: rgba(0, 0, 255, 1)">ellipsis</span>;<span style="color: rgba(255, 0, 0, 1)">
white-space</span>:<span style="color: rgba(0, 0, 255, 1)"> nowrap</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.min-h100</span>{<span style="color: rgba(255, 0, 0, 1)">
min-height</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.show </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> block</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.hide </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 字体 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.f12 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 12px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f14 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 14px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f15 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 15px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f16 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 16px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f18 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 18px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f20 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f24 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 24px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f36 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 36px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.f48 </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 滚动条优化 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.scroll-style::-webkit-scrollbar </span>{<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 5px</span>;<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 5px</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.scroll-style::-webkit-scrollbar-thumb </span>{<span style="color: rgba(255, 0, 0, 1)">
border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 3px</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #ccc</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.scroll-style::-webkit-scrollbar-track </span>{<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 7px</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #ebebeb</span>;
}</pre>
</div>
<div>
<div>
<h3 data-id="heading-37">4.2.2 <strong><code>id class</code>命名规则</strong></h3>
<ul>
<li>首先根据内容命名,如:<code>nav</code>,<code>header</code></li>
<li>内容中的子元素使用_链接,名称一律小写,如:<code>card_item</code></li>
<li>修饰类(易变的)使用__链接,如:<code>card_item__warning</code></li>
<li>若无内容,结合行为进行辅助,如:<code>box_shawder</code></li>
<li>不影响语义的情况下,可缩写,如:<code>img_box</code>,<code>btn</code></li>
<li>避免广告拦截词汇:<code>ad</code>,<code>gg</code>,<code>banner</code>,<code>guagngao</code></li>
</ul>
</div>
<div>
<div>
<h3 data-id="heading-38">4.2.3 <strong>属性</strong></h3>
<p><strong>属性顺序</strong></p>
<ul>
<li>位置属性(<code>position</code>,<code>top</code>,<code>right</code>,<code>z-index</code>,<code>display</code>,<code>flaot</code>)</li>
<li>大小(<code>width</code>,<code>height</code>,<code>padding</code>,<code>margin</code>)</li>
<li>文字(<code>font</code>,<code>line-height</code>,<code>letter-spacing</code>, <code>color</code>)</li>
<li>背景 (<code>background</code>,<code>border</code>)</li>
<li>其他(<code>animation</code>,<code>transition</code>)</li>
</ul>
<p><strong>属性简写</strong></p>
<p>属性简写需要你非常清楚属性值的正确顺序,而且在大多数情况下并不需要设置属性简写中包含的所有值,所以建议尽量分开声明会更加清晰;</p>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> not good </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.element </span>{<span style="color: rgba(255, 0, 0, 1)">
transition</span>:<span style="color: rgba(0, 0, 255, 1)"> opacity 1s linear 2s</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> good </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.element </span>{<span style="color: rgba(255, 0, 0, 1)">
transition-delay</span>:<span style="color: rgba(0, 0, 255, 1)"> 2s</span>;<span style="color: rgba(255, 0, 0, 1)">
transition-timing-function</span>:<span style="color: rgba(0, 0, 255, 1)"> linear</span>;<span style="color: rgba(255, 0, 0, 1)">
transition-duration</span>:<span style="color: rgba(0, 0, 255, 1)"> 1s</span>;<span style="color: rgba(255, 0, 0, 1)">
transition-property</span>:<span style="color: rgba(0, 0, 255, 1)"> opacity</span>;
}</pre>
</div>
<div>
<div>
<p>margin 和 padding 相反,需要使用简写;margin 和 padding 相反,需要使用简写;</p>
<h3 data-id="heading-39">4.2.4 <strong>媒体查询</strong></h3>
<p>尽量将媒体查询的规则靠近与他们相关的规则,不要将他们一起放到一个独立的样式文件中,或者丢在文档的最底部,这样做只会让大家以后更容易忘记他们。</p>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.element-selected </span>{<span style="color: rgba(255, 0, 0, 1)"> ... </span>}<span style="color: rgba(128, 0, 0, 1)">
@media (max-width: 768px) </span>{<span style="color: rgba(255, 0, 0, 1)">
.element-selected { ... </span>}<span style="color: rgba(128, 0, 0, 1)">
}</span></pre>
</div>
<h3 data-id="heading-40">4.2.5 注释规范</h3>
<ul>
<li>组件块和子组件之间的注释</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> ==========================================================================
组件块
============================================================================ </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 子组件块
============================================================================ </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.selector </span>{<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 15px</span>;<span style="color: rgba(255, 0, 0, 1)">
margin-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 15px</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 子组件块
============================================================================ </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.selector-secondary </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> block</span>; <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 注释</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
}</pre>
</div>
<ul>
<li>单行注释<code>/*</code>后跟空格</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> xxx </span><span style="color: rgba(0, 128, 0, 1)">*/</span></pre>
</div>
<h3 data-id="heading-41">4.2.6 less规范</h3>
<ul>
<li>
<p>组织顺序</p>
<ul>
<li>@import</li>
<li>变量声明</li>
<li>样式声明</li>
</ul>
</li>
<li>
<p>避免嵌套过多,将嵌套深度限制在3级,超过需重新评估</p>
</li>
</ul>
<pre></pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">@import "mixins/size.less";
@default-text-color: #333;
.page </span>{<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 960px</span>;<span style="color: rgba(255, 0, 0, 1)">
margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0 auto</span>;
}</pre>
</div>
<div>
<div>
<h2 data-id="heading-43">4.3 JavaScript编码规范</h2>
<h3 data-id="heading-44">4.3.1 <strong>缩进</strong></h3>
<p>html,css,js缩进一致,使用4个空格。</p>
<h3 data-id="heading-45">4.3.2 <strong>空格</strong></h3>
<ul>
<li>二元运算符前后</li>
<li>三元运算符前后</li>
<li>代码块<code>{</code>前</li>
<li>关键字前:else, while, catch, finally</li>
<li>关键字后:if, else, for, while, do, switch, case, catch, finally, with, return</li>
<li>单行注释<code>//</code>后,多行注释<code>/*</code>后</li>
<li>对象的属性值前</li>
<li>for 循环</li>
<li>函数的参数之间</li>
<li>运算符前后</li>
<li>函数声明,函数表达式<code>(</code>前不要空格,<code>)</code>后空格</li>
</ul>
<h3 data-id="heading-46">4.3.3 <strong>空行</strong></h3>
<ul>
<li>变量声明后</li>
<li>注释前</li>
<li>代码块后</li>
<li>文件最后保留一个空行</li>
</ul>
<div class="cnblogs_code">
<pre>let string = 'my'<span style="color: rgba(0, 0, 0, 1)">
let obj </span>=<span style="color: rgba(0, 0, 0, 1)"> {
</span>'name': 'yang'<span style="color: rgba(0, 0, 0, 1)">
}
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> do something</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> zheli </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> {
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
}</span></pre>
</div>
<h3 data-id="heading-47">4.3.4 引号</h3>
<ul>
<li>最外层统一使用单引号。</li>
</ul>
<div class="cnblogs_code">
<pre>let str = 'my name is'</pre>
</div>
<h3 data-id="heading-48">4.3.5 模板字符串</h3>
<ul>
<li>需要拼接,尽量少用<code>+</code>,多使用模板字符串</li>
</ul>
<div class="cnblogs_code">
<pre>let str1 = 'yang'<span style="color: rgba(0, 0, 0, 1)">
let string </span>= `hello ${str1}`</pre>
</div>
<div>
<div>
<h3 data-id="heading-49">4.3.6 <strong>命名规范</strong></h3>
<ul>
<li>
<p>变量命名:小驼峰命名</p>
</li>
<li>
<p>参数名:小驼峰命名</p>
</li>
<li>
<p>函数名:小驼峰命名</p>
</li>
<li>
<p>方法/属性名:小驼峰命名</p>
</li>
<li>
<p>类名开头大写</p>
</li>
<li>
<p>私有属性、变量和方法以下划线 _ 开头。</p>
</li>
<li>
<p>常量名:全部使用大写+下划线</p>
</li>
<li>
<p>由多个单词组成的缩写词,在命名中,根据当前命名法和出现的位置,所有字母的大小写与首字母的大小写保持一致。</p>
</li>
<li>
<p>语义</p>
<ul>
<li>变量应当使用名词,尽量符合当时语义</li>
<li>boolean类型应当使用 is , has 等开头</li>
<li>点击事件命名方式:tap + onClick()</li>
</ul>
</li>
</ul>
</div>
<div class="cnblogs_code">
<pre>let loadingModules =<span style="color: rgba(0, 0, 0, 1)"> {};
const HTML_ENTITY </span>=<span style="color: rgba(0, 0, 0, 1)"> {};
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> stringFormat(theBells) {}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> insertHTML(element, html) {}
</span><span style="color: rgba(0, 0, 255, 1)">function</span> Engine(options) {}</pre>
</div>
<h3 data-id="heading-50">4.3.7 二元三元操作符</h3>
<ul>
<li>可用于简单的if替代</li>
<li>操作符始终写在前一行,避免产生预想不到的问题</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不推荐 </span>
<span style="color: rgba(0, 0, 255, 1)">var</span> x = a ?<span style="color: rgba(0, 0, 0, 1)"> b : c;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 推荐 </span>
<span style="color: rgba(0, 0, 255, 1)">var</span> y = a ?<span style="color: rgba(0, 0, 0, 1)">
longButSimpleOperandB : longButSimpleOperandC;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> z = a ?<span style="color: rgba(0, 0, 0, 1)">
moreComplicatedB :
moreComplicatedC;</span></pre>
</div>
<h3 data-id="heading-51">4.3.8 && 和 ||</h3>
<p>二元布尔操作符是可短路的, 只有在必要时才会计算到最后一项。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不推荐</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> foo(opt_win) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> win;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (opt_win) {
win </span>=<span style="color: rgba(0, 0, 0, 1)"> opt_win;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
win </span>=<span style="color: rgba(0, 0, 0, 1)"> window;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (node) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (node.kids) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (node.kids) {
foo(node.kids);
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 推荐</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> foo(opt_win) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> win = opt_win ||<span style="color: rgba(0, 0, 0, 1)"> window;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> kid = node && node.kids &&<span style="color: rgba(0, 0, 0, 1)"> node.kids;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (kid) {
foo(kid);
}</span></pre>
</div>
<div>
<div>
<h3 data-id="heading-52">4.3.9 <strong>声明规范</strong></h3>
<ul>
<li>尽量使用 let 声明变量,少用 var 。</li>
</ul>
<h3 data-id="heading-53">4.3.10 <strong>分号</strong></h3>
<p>以下情况需要加分号</p>
<ul>
<li>表达式</li>
<li>return</li>
<li>throw</li>
<li>break</li>
<li>continue</li>
<li>do-while</li>
</ul>
<h3 data-id="heading-54">4.3.11 <strong>注释规范</strong></h3>
<ul>
<li>
<p>单行注释,独占一行,<code>//</code>后跟空格</p>
</li>
<li>
<p>多行注释,<code>/*</code>后跟空格</p>
</li>
<li>
<p>函数/方法注释</p>
<ul>
<li>注释必须包含函数声明,有参数和返回值时必须注释标识</li>
<li>参数和返回类型必须包含类型信息和说明</li>
<li>当函数是内部函数,外部不可访问时,可使用@inner标识</li>
</ul>
</li>
</ul>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注释</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> xxxx
xxxx
xxxxx
/*
/**
* 函数描述
* @param {string} p1 参数说明
* @param {string} p2 参数2的说明,比较长
* 那就换行了.
* @param {number=} p3 参数3的说明(可选)
* @return {Object} 返回值描述
/*
function foo(p1, p2, p3) {
return {
p1: p1,
p2: p2
}
}</span></pre>
</div>
<h1 data-id="heading-27">(五)部署</h1>
</div>
<pre></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<pre></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/magicg/p/16498201.html
頁:
[1]