HTML 编码规范

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 图片

[强制] 禁止imgsrc取值为空。延迟加载图片也要增加默认的src

解释:
src取值为,会导致部分浏览器重新加载一次当前页面,参考:https://developer.yahoo.com/performance/rules.html#emptysrc

[建议] 避免为img添加不必要的title属性。

解释:
多余的title影响看图体验,并且增加了页面尺寸。

[建议] 为重要图片添加alt 属性。

解释:
可以提高图片加载失败是的用户体验。

[建议] 添加widthheight 属性,以避免页面抖动。

[建议] 有下载需求的图片采用img标签实现,无需下载的图片采用css背景图片实现。

解释:

  1. 产品 logo、用户头像、用户产生的图片等有潜在下载需求的图片,以 img 形式实现,能方便用户下载。
  2. 无下载需求的图片,比如: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>

[建议] 在循环处理模板数据数据结构造表格时,若要求每行输出固定的个数,建议先将数据分组,之后再循环输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,270评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,489评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,630评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,906评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,928评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,718评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,442评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,345评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,802评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,984评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,117评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,810评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,462评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,011评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,139评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,377评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,060评论 2 355

推荐阅读更多精彩内容

  • 语法 用四个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法。不允许使用 2 个空格...
    我是大师兄啊阅读 892评论 0 0
  • HTML编码规范 1 前言 HTML作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用。本文档的目标是使H...
    春木橙云阅读 999评论 0 1
  • HTML编码规范 1 代码风格 1.1 缩进与换行 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个...
    东东丶酱阅读 579评论 0 3
  • 1 前言 HTML 作为描述网页结构的超文本标记语言,一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持...
    山豆山豆阅读 1,185评论 2 6
  • 什么是任务?什么是结果?做任务和做结果最大的区别在于,做任务的人会认为如果这件事情做不好是别人的原因,做结果的...
    蓝色梦想xcy阅读 1,002评论 0 1