1 代码风格
1.1 缩进于换行
[强制] 使用4个空格作为一个缩进层级,不允许使用2个空格或者“tab”字符。
示例:
<ul>
<li>first</li>
<li>second</li>
</ul>
[建议] 每行不超过120个字符。
解释:过长的代码不容易阅读与维护。但是考虑HTML的特殊性,不做硬性要求。
1.2 命名
[强制] class
必须全字母小写,单词间以 -
分隔。
[强制] class
必选代表相应模块或部件的内容或功能,不得以样式信息进行命名。
示例:
<!--good-->
<div class="sidebar"></div>
<!--bad-->
<div class=“left”></div>
[强制] 元素‘id’ 必须保证页面唯一。
解释:同一个页面中,不同的元素包含相同的id,不符合id的属性含义。并且使用documen.getElementById 时可能导致难以追查的问题。
[建议] 'id'建议单词全字母小写,单词间以‘-’分隔。同项目必须保持风格一致。
[建议] ‘id’ ‘class’ 命名,在避免冲突并面熟清楚的前提下尽可能短。
示例:
<!--good--->
· <div id="nav"></div>
<!--bad-->
<div id="naviga"> </div>
<!--good-->
<p class="comment"></p>
<!--bad-->
<p class="com"></p>
<!--good-->
<span class="author"></span>
<!--bad-->
<span class="red"></span>
1.3 标签
[强制] 标签名必须使用小写字母。
示例:
<!--good-->
<p> Hello StyleGuide</p>
<!--bad-->
<P>Hello StyleGuide</P>
[强制] 对于无需自闭和的标签,不允许自闭和。
解释:常见的无需自闭和的标签有 input, br,img,hr等。
示例:
<!--good-->
<input type="text" name="title">
<!--bad-->
<input type="type" name="title" />
[强制] 对‘HTML5’中规定允许省略的闭合标签,不允许省略闭合标签。
示例:
<!--good-->
<ul>
<li>first</li>
<li>second</li>
</ul>
<!--bad-->
<ul>
<li> first
<li> second
</ul>
[强制] 标签使用必须符合标签嵌套规则。
解释:
下面是常见的标签语义:
- p - 段落
- h1,h2,h3 - 层级标题
- strong, em - 强调
- ins - 插入
- del - 删除
- addr - 缩写
- code - 代码标识
- cite - 引述来源作品的标题
- q - 引用
- blockquote - 一段或长篇的引用
- ul - 无序列表
- ol - 有序列表
- dl, dt, dd - 定义列表
示例:
<!--good-->
<p>Esprima serves as an important
<strong>building block</strong>
for some JavaScript language tools.</p>
<!-- bad -->
<div>Esprima serves as an important
<span class="strong">building block</span>
for some JavaScript language tools.
</div>
[建议] 标签的使用应尽量简洁,减少不必要的标签。
示例:
<!-- good -->
![](image.png)
<!-- bad -->
<span class="avatar">
![](image.png)
</span>
1.4 属性
[强制] 属性名必须使用小写字母。
示例:
<!--good-->
<tabbe cellspacing=''0''>...</table>
<!--bad-->
<table cellSpaing="0">...</table>
[强制] 属性值必须用双引号包围。
解释:
不允许使用单引号,不允许不使用引号。
示例:
<!-- good -->
<script src="esl.js"></script>
<!-- bad -->
<script src='esl.js'></script>
<script src=esl.js></script>
[建议] 布尔类型的属性,建议不添加属性值。
示例:
<input type="text" disabled>
<input type="checkbox" value="1" checked>
[建议] 自定义属性建议以‘XXX-’为前缀,推荐使用'data-'。
解释:
使用前缀有助于区分自定义属性和标准定义的属性。
示例:
<ol data-ui-type="Select"></ol>
2 通用
2.1 DOCTYPE
[强制] 使用‘HTML5’的‘DOCTYPE’来启动标准模式,建议使用大写的‘DOCTYPE’。
示例:
<!DOCTYPE html>
[建议] 启用IE Edge 模式。
示例:
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
[建议] 在‘HTML’标签上设置正确的‘lang’属性。
解释:有助于提高页面大的可访问性。如:让语音合成工具确定其所应该采用的发音,令翻译工具确定其翻译语言等。
示例:
<html lang="zh-CN">
2.2 编码
[强制] 页面必须使用精简形式,明确指定字符编码。指定字符编码的‘meta’必须是‘head’的第一个直接子元素。
解释:
见HTML5 Charset 能用吗 一文。
示例:
<html>
<head>
<meta charset="UTF-8">
......
</head>
<body>
......
</body>
</html>
[建议] 'HTML'文件使用无'BOM'的‘UTF-8’编码。
解释:
utf-8编码具有更广泛的适应性。BOM在使用程序或工具处理文件时可能造成不必要的干扰。
2.3 CSS 和 JavaScript 引入
[强制] 引入‘css’时必须指明‘rel=stylesheet’。
示例:
<link rel="stylesheet" src="page.css">
[建议] 引入‘css’和‘Javascript’时无须指明‘type’属性。
解释:
‘text/css’和‘text/JavaScript’是type的默认值。
[建议] 展现定义放置于外部‘css’中,行为定义放置于外部‘JavaScript’中。
解释:结构-样式-行为的代码分离,有助于提高代码的可阅读性和维护性都有好处。
[建议] 在‘head’中引入页面需要的所有‘css’资源。
解释:
在页面渲染的过程中,新的css可能导致
元素的样式重新计算和绘制,页面闪烁。
[建议] JavaScript
应该放在页面的末尾,或采用异步加载。
解释:
将script放在页面的中间将阻断页面的渲染。出于性能方面的考虑,如非必要,请遵守此条建议。
示例:
<body>
<!-- a lot of elements -->
<script src="init-behavior.js"></script>
</body>
[建议] 移动环境或只针对现代浏览器设计的 Web 应用,如果引用外部资源的 URL
协议部分与页面相同,建议省略协议前缀。
解释:
使用 protocol-relative URL
引入 CSS,在 IE7/8
下,会发两次请求。是否使用 protocol-relative URL
应充分考虑页面针对的环境。
示例:
<script src="//s1.bdstatic.com/cache/static/jquery-1.10.2.min_f2fb5194.js"></script>
3 head
3.1 title
[强制] 页面必须包含title
标签声明标题。
[强制] title
必须作为head
的直接元素,并紧随charset
声明之后。
解释:
title 中如果包含ASCII之外的字符,浏览器需要知道字符编码类型才能进行编码,否则可能导致乱码。
示例:
<head>
<meta charset="UTF-8">
<tilte>页面标题</title>
</head>
3.2 favicon
[强制] 保证favicon
可访问。
解释:
在未指定favicon时,大多数浏览器会请求web Server根目录下的favicon.ico。为了保证favicon可访问,避免404,必须遵守以下两种方法之一:
1.在Web Server 根目录放置 favicon.ico文件。
2.使用link指定favicon。
示例:
<link rel="shortcut icon" href="path/to/favicon.ico">
3.3 viewport
[建议] 若页面欲对移动设备友好,需设定页面的‘viewport’。
解释:
viewport meta tag 可以设置可视区域的宽度和初始缩放大小,避免在移动设备上出现页面展示不正常。
比如,在页面宽度小于980px时,若需要ios设备友号,应设置viewport的width值来适应你的页面宽度。同样因为不同移动设备分辨率不同,在设置时,应当使用device-width和device-height变量。
另外,为了使 viewport 正常工作,在页面内容样式布局设计上也要做相应调整,如避免绝对定位等。关于 viewport 的更多介绍,可以参见 Safari Web Content Guide的介绍
4 图片
[强制] 禁止img
的src
取值为空。延迟加载图片也要增加默认的src
。
解释:
src取值为,会导致部分浏览器重新加载一次当前页面,参考:https://developer.yahoo.com/performance/rules.html#emptysrc
[建议] 避免为img
添加不必要的title
属性。
解释:
多余的title影响看图体验,并且增加了页面尺寸。
[建议] 为重要图片添加alt
属性。
解释:
可以提高图片加载失败是的用户体验。
[建议] 添加width
和height
属性,以避免页面抖动。
[建议] 有下载需求的图片采用img
标签实现,无需下载的图片采用css
背景图片实现。
解释:
- 产品 logo、用户头像、用户产生的图片等有潜在下载需求的图片,以 img 形式实现,能方便用户下载。
- 无下载需求的图片,比如:icon、背景、代码使用的图片等,尽可能采用 css 背景图实现。
5 表单
5.1控件标题
[强制] 有文本标题的控件必须使用label
标签将其与其相关标题相关联。
解释:
有两种方式:
1、将控件置于 label 内。
2、label的for属性指向控件的id。
推荐使用第一种,减少不必要的id,如果dom架构不允许直接嵌套,则应用第二种。
示例:
<label><input type="checkbox" name="confirm" value="on"> 我已确认上述条款</label>
<label for="username">用户名:</label> <input type="textbox" name="username" id="username">
5.2 按钮
[强制] 使用button
元素时必须指明type
属性值。
解释:
button元素的默认type为submit,如果被置于from元素中,点击后将导致表单提交。为显示区分其作用方便理解,必须给出type属性。
示例:
<button type="submit">提交</button>
<button type="button">取消</button>
[建议] 尽量不要把使用按钮元素的name
属性。
解释:
由于浏览器兼容性的问题,使用按钮的name属性会带来许多难以发现的问题。具体情况可参考此文。
[建议] 在针对移动设备开发的页面,根据内容类型指定输入框的type
属性。
解释:
根据内容类型指定输入框类型,能获得更友好的输入体验。
示例:
<input type="date">
6 模板中的HTML
[建议] 模板中的缩进优先保证HTML
代码的缩进规则。
示例:
<!-- good -->
{if $display == true}
<div>
<ul>
{foreach $item_list as $item}
<li>{$item.name}<li>
{/foreach}
</ul>
</div>
{/if}
<!-- bad -->
{if $display == true}
<div>
<ul>
{foreach $item_list as $item}
<li>{$item.name}<li>
{/foreach}
</ul>
</div>
{/if}
[建议] 模板代码应以保证HTML
单个标签语法的正确性为基本原则。
示例:
<!-- good -->
<li class="{if $item.type_id == $current_type}focus{/if}">{ $item.type_name }</li>
<!-- bad -->
<li {if $item.type_id == $current_type} class="focus"{/if}>{ $item.type_name }</li>
网友评论