前端开发规范化守则
  Web   0 评论

前端开发规范化守则

  Web   0 评论

智慧城市事务部
2019年01月03日 第二版
2018年08月21日 第一版

基本准则

结构样式分离

使用小写字母

省略 http 协议头

缩进使用 soft tab

使用规范化的注释

命名规范

文件夹命名

图片命名

图片命名建议以以下顺序命名:

图片业务(可选) +(mod_)图片功能类别(必选)+ 图片模块名称(可选) + 图片精度(可选)

HTML/CSS 命名

确保文件命名总是以字母开头而不是数字,且字母一律小写,以下划线连接且不带其他标点符号

<!-- HTML -->
jdc.html
jdc_list.html
jdc_detail.html

<!-- SASS -->
jdc.scss
jdc_list.scss
jdc_detail.scss

移动端 CSS/JS 命名

移动端的 CSS 和 JavaScript 文件在功能上几乎与 PC 端一致,但是存在一些特殊情况需要使用不同的样式或方法,采用不同的 CSS/JavaScript 文件书写的时候在文件名后添加 mobile 作为移动端样式或脚本

login.css
// 移动端样式
login_mobile.css

ClassName 命名

基于姓氏命名法(继承 + 外来),祖先模块不能出现 -,除了是全站公用模块,如 mod- 系列的命名

<div class="modulename">
    <div class="modulename-info">
        <div class="modulename-son"></div>
        <div class="modulename-son"></div>
        ...
    </div>
</div>

在子孙模块数量可预测的情况下,严格继承祖先模块的命名前缀

<div class="modulename">
    <div class="modulename-cover"></div>
    <div class="modulename-info"></div>
</div>

当子孙模块超过4级或以上的时候,可以考虑在祖先模块内具有识辨性的独立缩写作为新的子孙模块

<div class="modulename">
    <div class="modulename-cover"></div>
    <div class="modulename-info">
        <div class="modulename-info-user">
            <div class="modulename-info-user-img">
                <img src="" alt="">
                <!-- 这个时候 miui 为 modulename-info-user-img 首字母缩写-->
                <div class="miui-tit"></div>
                <div class="miui-txt"></div>
                ...
            </div>
        </div>
        <div class="modulename-info-list"></div>
    </div>
</div>

全站公共模块:以 mod- 开头

<div class="mod-yours"></div>

业务公共模块:以 业务名-mod- 开头

<div class="paipai-mod-yours"></div>

注意:ad、banner、gg、guanggao 等有机会和广告挂勾的字眼不建议直接用来做 ClassName,因为有些浏览器插件(Chrome的广告拦截插件等)会直接过滤这些类名

下面是一些可能用到的通用class关键词

ClassName 含义
about 关于
account 账户
arrow 箭头图标
article 文章
aside 边栏
audio 音频
avatar 头像
bg,background 背景
bar 栏(工具类)
branding 品牌化
crumb,breadcrumbs 面包屑
btn,button 按钮
caption 标题,说明
category 分类
chart 图表
clearfix 清除浮动
close 关闭
col,column
comment 评论
community 社区
container 容器
content 内容
copyright 版权
current 当前态,选中态
default 默认
description 描述
details 细节
disabled 不可用
entry 文章,博文
error 错误
even 偶数,常用于多行列表或表格中
fail 失败(提示)
feature 专题
fewer 收起
field 用于表单的输入区域
figure
filter 筛选
first 第一个,常用于列表中
footer 页脚
forum 论坛
gallery 画廊
group 模块,清除浮动
header 页头
help 帮助
hide 隐藏
hightlight 高亮
home 主页
icon 图标
info,information 信息
last 最后一个,常用于列表中
links 链接
login 登录
logout 退出
logo 标志
main 主体
menu 菜单
meta 作者、更新时间等信息栏,一般位于标题之下
module 模块
more 更多(展开)
msg,message 消息
nav,navigation 导航
next 下一页
nub 小块
odd 奇数,常用于多行列表或表格中
off 鼠标离开
on 鼠标移过
output 输出
pagination 分页
pop,popup 弹窗
preview 预览
previous 上一页
primary 主要
progress 进度条
promotion 促销
rcommd,recommendations 推荐
reg,register 注册
save 保存
search 搜索
secondary 次要
section 区块
selected 已选
share 分享
show 显示
sidebar 边栏,侧栏
slide 幻灯片,图片切换
sort 排序
sub 次级的,子级的
submit 提交
subscribe 订阅
subtitle 副标题
success 成功(提示)
summary 摘要
tab 标签页
table 表格
txt,text 文本
thumbnail 缩略图
time 时间
tips 提示
title 标题
video 视频
wrap 容器,包,一般用于最外层
wrapper 容器,包,一般用于最外层

统一书写内容的顺序

文件存放要求

HTML 相关

class 与 id 的命名

<div id="j-hook" class="sidebar content-wrapper"></div>

规范化标签内的属性顺序

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

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

禁止使用非法标签嵌套

a不允许嵌套div 这种约束属于语义嵌套约束,与之区别的约束还有严格嵌套约束,比如a不允许嵌套a
严格嵌套约束在所有的浏览器下都不被允许;而语义嵌套约束,浏览器大多会容错处理,生成的文档树可能相互不太一样。

语义嵌套约束

严格嵌套约束

布尔值属性

标签语义化

没有cssHTML是一个语义系统而不是UI系统。 通常情况下,每个标签都是有语义的,所谓语义就是你的衣服分为外套、裤子、裙子、内裤等,各自有对应的功能和含义。所以你总不能把内裤套在脖子上吧。 此外,语义化的HTML结构,有助于机器(搜索引擎)理解,另一方面多人协作时,能迅速了解开发者的意图

标签 语义
<p> 段落
<h1> <h2> <h3> ··· 标题
<ul> 无序列表
<ol> 有序列表
<blockquote> 大段引用
<cite> 一般引用
<b> 为样式加粗而加粗
<strong> 为强调内容而加粗
<i> 为样式倾斜而倾斜
<em> 为强调内容而倾斜
code 代码标识
abbr 缩写

实用高于完美

CSS 相关

使用展开模式书写

选择器的使用

每个属性后面都要加分号

添加空格增加代码的易读性

属性值的引号使用单引号

属性书写顺序规范化

采用合理的属性书写顺序可以大大提高代码的可读性和可维护性,请从下面两种方式中选择其一固定为自己的属性书写顺序

mozilla 官方属性顺序推荐

  1. 布局定位属性:display / position / float / clear / visibility / overflow
  2. 自身属性:width / height / margin / padding / border / background
  3. 文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
  4. 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …

自用属性顺序

  1. 内容:content
  2. 尺寸大小:width / height / padding / max-height …
  3. 文本内容
    1. 文字内容:color / font-size / font- family / font-weight / white-space …
    2. 行内容:line-height / vertical-align …
    3. 文本内容:text-align / text-decoration / text-indent / text-shadow …
  4. 显示效果:border / box-shadow / list-style / background / display …
  5. 位置信息:position / margin / left / right / top / bottom / z-index …
  6. 元素变换:transform …
  7. 过度效果:animation / transition …

CSS3 浏览器私有前缀写法

JavaScript 相关

字符串和变量拼接使用 ES6 语法

每一个可结束代码行后添加分号

变量命名约定使用驼峰式命名

逗号后面加空格

函数调用不要添加空格

去除冗余空行,保留必要空行

运算符使用空格分隔

统一花括号的书写位置

系统级全局变量统一命名

弱化临时变量,使用 let 声明

双引号和单引号的使用场景

使用 for 循环遍历时先定义长度

除了变量的定义外的语句需要封装进函数

标准模板

HTML

PC 端

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="keywords" content="your keywords">
        <meta name="description" content="your description">
        <meta name="author" content="author,email address">
        <meta name="robots" content="index,follow">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <meta name="renderer" content="ie-stand">
        <title>PC端HTML模版</title>

        <!-- External CSS -->
        <link rel="stylesheet" href="code_guide.css">

        <!-- In-document CSS -->
        <style>
            ...
        </style>
    </head>
    <body>
        ...

        <!-- External JS -->
        <script src="code_guide.js"></script>

        <!-- In-document JS -->
        <script>
            ...
        </script>
    </body>
</html>

移动端

!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no" >
        <meta name="format-detection" content="telephone=no" >
        <title>移动端HTML模版</title>

        <!-- External CSS -->
        <link rel="stylesheet" href="code_guide.css">

        <!-- In-document CSS -->
        <style>
            ...
        </style>
    </head>
    <body>
        ...

        <!-- External JS -->
        <script src="code_guide.js"></script>

        <!-- In-document JS -->
        <script>
            ...
        </script>
    </body>
</html>

CSS

@charset "UTF-8";
/**
 * @desc File Info
 * @author Author Name
 * @date 2015-10-10
 */

.foo {

}

重置样式

PC 端

html, body, div, h1, h2, h3, h4, h5, h6, p, dl, dt, dd, ol, ul, li, fieldset, form, label, input, legend, table, caption, tbody, tfoot, thead, tr, th, td, textarea, article, aside, audio, canvas, figure, footer, header, mark, menu, nav, section, time, video { margin: 0; padding: 0; }
h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal }
article, aside, dialog, figure, footer, header, hgroup, nav, section, blockquote { display: block; }
ul, ol { list-style: none; }
img { border: 0 none; vertical-align: top; }
blockquote, q { quotes: none; }
blockquote:before, blockquote:after, q:before, q:after { content: none; }
table { border-collapse: collapse; border-spacing: 0; }
strong, em, i { font-style: normal; font-weight: normal; }
ins { text-decoration: underline; }
del { text-decoration: line-through; }
mark { background: none; }
input::-ms-clear { display: none !important; }
body { font: 12px/1.5 \5FAE\8F6F\96C5\9ED1, \5B8B\4F53, "Hiragino Sans GB", STHeiti, "WenQuanYi Micro Hei", "Droid Sans Fallback", SimSun, sans-serif; background: #fff; }
a { text-decoration: none; color: #333; }
a:hover { text-decoration: underline; }
移动端
* { -webkit-tap-highlight-color: transparent; outline: 0; margin: 0; padding: 0; vertical-align: baseline; }
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 { margin: 0; padding: 0; vertical-align: baseline; }
img { border: 0 none; vertical-align: top; }
i, em { font-style: normal; }
ol, ul { list-style: none; }
input, select, button, h1, h2, h3, h4, h5, h6 { font-size: 100%; font-family: inherit; }
table { border-collapse: collapse; border-spacing: 0; }
a { text-decoration: none; color: #666; }
body { margin: 0 auto; min-width: 320px; max-width: 640px; height: 100%; font-size: 14px; font-family: -apple-system,Helvetica,sans-serif; line-height: 1.5; color: #666; -webkit-text-size-adjust: 100% !important; text-size-adjust: 100% !important; }
input[type="text"], textarea { -webkit-appearance: none; -moz-appearance: none; appearance: none; }

JavaScript

/**
 * @desc File Info
 * @author Author Name
 * @date 2015-10-10
 */

function foo () {

}

内容来源

回复