Appearance
HTML 与 CSS 编码规范
目的
为了保证所每个项目组编写出的程序都符合相同的规范,便于理解和维护,便于检查、减少出错概率,有助于成员间交流,保证一致性、统一性而建立的 HTML 与 CSS 编码规范。
范围
该规范适用于所有基于前端项目。规范内容主要针对 CDN 模式下的文件,在 NPM 开发环境中 webpack 开发方式存在部分不同(详见 webpack 开发方式内容)。
文件格式
文件统一使用无 BOM 的 UTF-8 编码。
代码格式规范
在编辑器 vscode 中安装 Prettier(代码格式化工具),按照配置的标准格式化文件。以下罗列了规范内容。
- 使用 2 个空格进行缩进。
- 每行不得超过 120 个字符。
- 引入 CSS 时必须指明 rel="stylesheet"。
- 引入 CSS 和 JavaScript 时无须指明 type 属性。
- 引用外部资源的 URL 协议部分与页面相同,建议省略协议前缀。
HTML 编码规范
- 页面必须包含 title 标签声明标题。
- 标签名必须使用小写字母。
- 对于无需自闭合的标签,不允许自闭合。
- 对 HTML5 中规定允许省略的闭合标签,不允许省略闭合标签。
- 标签使用必须符合标签嵌套规则。
CSS 编码规范
- 不要随意使用 id。
- 属性值之后添加分号。
- 多个 selector 共用一个样式集,则多个 selector 必须写成多行形式。
- 使用单引号,不允许使用双引号。
- 每个声明结束都应该带一个分号,不管是不是最后一个声明。
- 除 16 进制颜色和字体设置外,CSS 文件中的所有的代码都应该小写。
- 除了重置浏览器默认样式外,禁止直接为 html tag 添加 css 样式设置。
- 每一条规则应该确保选择器唯一,禁止直接为全局.nav/.header/.body 等类设置属性。
- 0 后面不需要单位,比如 0px 可以省略成 0,0.8px 可以省略成.8px。
- 在保持代码解耦的前提下,尽量合并重复的样式。
- 没有边框时,不要写成 border:0,应该写成 border:none。
命名规范
推荐采用 BEM 原则,及块(block)、元素(element)、修饰符(modifier)。
- B(block):某一块展示/功能区域, 比如:.nav。
- E(element):这块展示/功能区域里的某个元素, 比如: .nav**item。
- M(modifier):某个元素或者某个块的状态, 比如:.nav—hide,.nav**item--active 等。
命名约定
css
/* 块 */
.site-search {
}
/* 元素 */
.site-search__field {
}
/* 修饰符 */
.site-search--full {
}
.person {
}
.person__hand {
}
.person--female {
}
.person--female__hand {
}
.person__hand--left {
}
html
<nav class="nav">
<a href="#" class="nav__item nav__item--active">当前状态</a>
<a href="#" class="nav__item nav__item--hover">鼠标移上时的状态</a>
<a href="#" class="nav__item nav__item--normal">正常状态</a>
</nav>
npm 下 PostCSS 的写法
css
.nav {
& __item {
& --active {
}
& --hover {
}
& --normal {
}
}
}
命名空间
- o-:表示一个对象(Object),如 .o-layout。
- c-:表示一个组件(Component),指一个具体的、特定实现的 UI。如 .c-avatar。
- u-:表示一个通用工具(Utility),如 .u-hidden。
- t-:表示一个主题(Theme),如 .t-light。
- s-:表示一个上下文或作用域(Scope),如 .s-cms-content。
- is-,has-:表示一种状态或条件样式。如 .is-active
- _:表示一个 hack,如 ._important。
- js-:表示一个 JavaScript 钩子。如 .js-modal。
- qa-:表示测试钩子。
和 JavaScript 关联的 CSS 名称
使用 js- 的类名命名方法。用这种方法来表明这个 DOM 元素和 JavaScript 代码的关联。
<div class="site-navigation js-site-navigation"></div>
const nav = document.querySelector('.js-site-navigation')
属性书写顺序
属性值必须用双引号包围。 同一 rule set 下的属性在书写时,应按功能进行分组,并以 Formatting Model(布局方式、位置) > Box Model(尺寸) > Typographic(文本相关) > Visual(视觉效果) 的顺序书写,以提高代码的可读性。
- 布局相关属性包括 position / top / right / bottom / left / float / display / overflow 等
- 尺寸相关属性包括 border / margin / padding / width / height 等
- 文本相关属性包括 font / line-height / text-align / word-wrap 等
- 视觉相关属性包括 background / color / transition / list-style 等
- 如果包含 content 属性,应放在最前面。
css
.sidebar {
/* formatting model: positioning schemes / offsets / z-indexes / display / ... */
position: absolute;
top: 50px;
left: 0;
overflow-x: hidden;
/* box model: sizes / margins / paddings / borders / ... */
width: 200px;
padding: 5px;
border: 1px solid #ddd;
/* typographic: font / aligns / text styles / ... /
font-size: 14px;
line-height: 20px;
/* visual: colors / shadows / gradients / ... */
background: #f5f5f5;
color: #333;
-webkit-transition: color 1s;
-moz-transition: color 1s;
transition: color 1s;
}
注释规范
文件顶部注释
css
/*
* @description: 中文说明
* @author: name
* @update: name (2013-04-13 18:32)
*/
模块注释
css
/* module: module1 by 张三 */
单行注释与多行注释
单行注释可以写在单独一行,也可以写在行尾,注释中的每一行长度不超过 40 个汉字,或者 80 个英文字符。
css
/*
* this is comment line 1.
* this is comment line 2.
*/
多行注释必须写在单独行内
特殊注释
用于标注修改、待办等信息
css
/* TODO: xxxx by name 2013-04-13 18:32 */
/* BUGFIX: xxxx by name 2012-04-13 18:32 */
区块注释
对一个代码区块注释(可选),将样式语句分区块并在新行中对其注释。
css
/* Header */
/* Footer */
/* Gallery */
常用的 CSS 命名规则
1
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subnav 菜单:menu 子菜单:submenu 搜索:search 友情链接:friendlink 页脚:footer 版权:copyright 滚动:scroll 内容:content 标签页:tab 文章列表:list 提示信息:msg 小技巧:tips 栏目标题:title 加入:joinus 指南:guild 服务:service 注册:regsiter 状态:status 投票:vote 合作伙伴:partner
页面结构
容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center
导航
导航:nav 主导航:mainbav 子导航:subnav 顶导航:topnav 边导航:sidebar 左导航:leftsidebar 右导航:rightsidebar 菜单:menu 子菜单:submenu 标题: title 摘要: summary
功能
标志:logo 广告:banner 登陆:login 登录条:loginbar 注册:regsiter 搜索:search 功能区:shop 标题:title 加入:joinus 状态:status 按钮:btn 滚动:scroll 标签页:tab 文章列表:list 提示信息:msg 当前的: current 小技巧:tips 图标: icon 注释:note 指南:guild 服务:service 热点:hot 新闻:news 下载:download 投票:vote 合作伙伴:partner 友情链接:link 版权:copyright
其他
page、wrap、layout、header(head)、footer(foot、ft)、 content(cont)、menu、nav、main、subMain、sidebar(side)、logo、banner、 title(tit)、pop、icon、note、btn、txt、window(win)、tips