推荐示例:
给所有的关键元素定义元素的 id 和 class,便于和 CSS、JavaScript 交互。因为 id 名称和 class 名称有可能作为检索值用在 JavaScript 代码中,所以命名一定
…
推荐示例:
…
如果 class 名称仅作为 JavaScript 调用的“钩子”,则可在名称中添加“ js”前缀。
HTML 代码的层级缩进为 4 个空格。如果元素包含子元素,则此元素对应的起始标签和闭合标签分别单独占用一行。
- item1
- item2
- item3
- item4
推荐示例:
- item1
- item2
- item3
- item4
给 HTML 代码添加必要的注释。页面 HTML 代码的注释不宜过多,添加的原则是在保证代码维护性的基础上尽量让 HTML 代码简洁。基于这样的原则,可以在页面的公共部分(如页面的头部、尾部以及侧边栏等)、页面经常变化的部分(如广告栏)以及需要后端代码注入的部分添加注释。注释添加的位置在要注释的代码上部并单独占用一行,不要在代码行的后面直接添加。
...
...
.reader-content-title {
...
}
为了避免 class 命名的重复,命名时取父元素的 class 名作为前缀。
/* 父元素的样式声明 */
.reader-content {
...
}
/* 子元素的 class 名称以父元素中的 class 名称作为前缀 */
.reader-content-body {
...
}
在 CSS 样式定义中,左大括号放置在选择器的同一行,并和选择器之间添加一个空格分隔,在保证可读性的基础上缩短代码的行数;在样式声明中,属性名称和值之间用一个空格分隔,提高代码可读性。
不推荐示例:
/* 不推荐示例:CSS 样式定义中的左大括号单独占一行;样式声明没有缩进或缩进混乱;属性名
称和值之间没有用空格分隔 */
.reader-content-title
{
background:#FFF;
...
}
推荐示例:
/* CSS 样式定义中的左大括号放置在选择器的同一行;样式声明中属性名称和值之间用一个空格
分隔 */
.reader-content-title {
background: #FFF;
...
}
多个选择器具有相同的样式声明时,每个选择器应该单独占一行,便于阅读和维护。
/* 不推荐示例:多个选择器具有相同的样式声明时,所有选择器放置于同一行 */
h1,h2,h3 {
font-weight: normal;
line-height: 1.2;
}
推荐示例:
/* 推荐示例:多个选择器具有相同的样式声明时,每个选择器应该单独占一行 */
h1,
h2,
h3 {
font-weight: normal;
line-height: 1.2;
}
样式声明的顺序按字母顺序排列,不考虑浏览器前缀。单纯靠手写代码并保证样式声明按照一定的顺序是不现实的。建议使用一些 CSS 美化工具做样式声明排序的工作。
/* 样式声明的顺序以字母序排列 */
.reader-content-title {
background: #FFF;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
}
样式定义按照模块来分组,相同模块的样式定义放在一起,不同模块的定义之间用一个空行分割。
/* reader header*/
.reader-header-title {
...
}
.reader-header-introduce {
...
}
/*reader footer*/
.reader-footer-copyright{
...
}
.reader-footer-links {
...
}
CSS 中的注释非常重要,能对 CSS 样式起到解释和说明的作用,提高了 CSS代码的可读性。有些开发者可能担心添加过多的注释会让 CSS 文件行数增多,其实不用担心,可以在发布网站的时候对 CSS 文件进行压缩,这个过程中会去掉所有的注释。在 CSS 样式文件中添加注释主要有两种类型:文件头部的文件信息注释和正文中的解释说明性注释。文件信息一般包括文件版本、版权信息以及作者等;解释说明性的注释有给模块的注释和单独给选择器的注释,模块的注释则需要添加注释表明模块样式定义的开始和结束,CSS 选择器的注释需要添加在选择器的上一行,而不是和选择器相同一行。
/* 注释规范说明:文件头部的文件信息注释 */
/*!
* reader content v1.0
*
* Copyright 2012
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Designed and built by dangjian
*/
/* 注释规范说明:模块样式定义的开始和结束 */
/* Content containers start */
/* 注释规范说明:注释需要添加在选择器的上一行,而不是和选择器相同一行 */
/* content title */
.reader-content-title {
...
}
...
/* Content containers end */
// 不推荐示例:变量命名首字母大写
var ReaderBookmark = 'bookmark';
// 不推荐示例:变量命名意义不明确
var object = {};
// 不推荐示例:变量命名以类型作为前缀
var strName = 'Note';
// 不推荐示例:变量命名使用语义不明确的缩写
var newNT = function(){
…
}
// 推荐示例:变量命名语义明确
var bookmarkDefaultTitle = 'Untitled Bookmark';
Reader.Content = function(){
// 私有变量
var info, title;
// 私有方法
var getContent = function(){
...
};
return {
// 公有方法
SetTitle: function(contentTitle){
title = contentTitle;
},
// 公有属性
ContentInfo: info
}
}();
jQuery 框架在项目中使用广泛,推荐给 jQuery 类型变量添加“$”作为前缀。
var $tocTitle = $('.reader-toc-title');
左大括号应该在行的结束位置,而不应该单独一行,因为这样增加了不必要的行数。应该一直使用大括号括起逻辑块,
// 左大括号应该在行的结束位置,而不应该单独一行
for (var i=0; i<100; i++) {
doSomething(i);
}
// 应该一直使用大括号括起逻辑块,即使逻辑只有一行
var isFound = false;
if (statement) {
isFound = true;
}
var content = '…';
doSomething(myChar, 0, 1);
while (x === y){
...
}
return
{
a + b
}
// return 后面会添加一个分号
return ;
{
a + b
}
var b = function(){
return function(){return 1}
}
var a = b
(function(){
...
})()
var b = function(){
return function(){return 1}
}
var a = b(function(){
...
})()
/* 文件头部的文件信息注释 */
/*!
* reader content v1.0
*
* Copyright 2012
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Designed and built by dangjian
*/
Reader.Content = (function(){
return {
// reader 初始化
Init: function(){
...
};
};
})();