前端开发规范(W3C笔记)

基本原则


结构、样式、行为分离

尽量确保文档和模板只包含HTML结构,样式都放到样式表里,行为都放到脚本里。

缩进

统一两个空格缩进(总之就是缩进统一即可),不要使用Tab或者Tab、空格混搭

文件编码

使用不带BOM的UTF-8编码。

  • 在HTML中指定编码
<meta charset="utf-8">
  • 无需使用@charset指定样式表的编码,它默认为UTF-8

一律使用小写字母

<!-- Recommended -->
![](google.png)

<!-- Not Recommended -->
<A HREF="/">HOME</A>
/* Recommended */
color: #e5e5e5;

/* Not Recommended */
color: #E5E5E5;

省略外链资源URL协议部分

省略外链资源(图片及其它媒体资源)URL中的http/https协议,使URL成为相对地址,避免Mixed Content问题,减小文件字节数。
其它协议(ftp等)的URL不省略。

<!-- Recommended -->
<script src="//www.w3cschool.cn/statics/js/autotrack.js"></script>

<!-- Not recommended -->
<script src="http://www.w3cschool.cn/statics/js/autotrack.js"></script>
/* Recommended */
.example {
  background: url(//www.google.com/images/example);
}

/* Not recommended */
.example {
  background: url(http://www.google.com/images/example);
}

统一注释

HTML注释

  • 模块注释
<!-- 文章列表列表模块 -->
<div class="article-list">
...
</div>
  • 区块注释
<!--
@name: Drop Down Menu
@description: Style of top bar drop down menu.
@author: Ashu(Aaaaaashu@gmail.com)
-->

CSS注释
组件块和子组件块以及声明块之间使用一空行分隔,子组件块之间三空行分隔

/* ==========================================================================
   组件块
 ============================================================================ */

/* 子组件块
 ============================================================================ */

.selector {
  padding: 15px;
  margin-bottom: 15px;
}

/* 子组件块
 ============================================================================ */

.selector-secondary {
  display: block; /* 注释*/
}

.selector-three {
  display: span;
}

Javascript注释

  • 单行注释
    必须独占一行//后跟一个空格,缩进与下一行被注释说明的代码一致
  • 多行注释
    避免使用/*...*/这样的多行注释。有多行注释内容时,使用多个单行注释
  • 函数/方法注释
  • 函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识;
  • 参数和返回值注释必须包含类型信息和说明
  • 当函数是内部函数,外部不可访问时,可以使用 @inner 标识
/**
 * 函数描述
 *
 * @param {string} p1 参数1的说明
 * @param {string} p2 参数2的说明,比较长
 *     那就换行了.
 * @param {number=} p3 参数3的说明(可选)
 * @return {Object} 返回值描述
 */functionfoo(p1, p2, p3){
    var p3 = p3 || 10;
    return {
        p1: p1,
        p2: p2,
        p3: p3
    };
}

文件注释

文件注释用于告诉不熟悉这段代码的读者这个文件中包含哪些东西。 应该提供文件的大体内容, 它的作者, 依赖关系兼容性信息。如下:

/**
 * @fileoverview Description of file, its uses and information
 * about its dependencies.
 * @author user@meizu.com (Firstname Lastname)
 * Copyright 2015 Meizu Inc. All Rights Reserved.
 */

代码验证

  • 使用W3C HTML Validator来验证你的HTML代码的有效性;
  • 使用W3C CSS Validator来验证你的CSS代码有效性;

代码验证不是最终目的,真的目的在于让开发者在经过多次的这种验证过程后,能够深刻理解到怎样的语法或写法是非标准和不推荐的,即使在某些场景下被迫要使用非标准写法,也可以做到心中有数。

通用约定


标签

  • 自闭合(self-closing)标签,无需闭合(例如:img input br hr 等);
  • 可选的闭合标签(closing tag),需闭合(例如:</li></body>);
  • 尽量减少标签数量
![](//img.w3cschool.cn/attachments/image/cimg/google.png)
<input type="text" name="title">

<ul>
  <li>Style</li>
  <li>Guide</li>
</ul>

<!-- Not recommended -->
<span class="avatar">
  ![](...)
</span>

<!-- Recommended -->
![](...)

Class与ID

  • class应以功能或内容命名,不以表现形式命名;
  • class与id单词字母小写,多个单词组成时,采用中划线-分隔;
  • 使用唯一的id作为Javascript hook,同时避免创建无样式信息的class;
<!-- Not recommended -->
<div class="j-hook left contentWrapper"></div>

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

属性顺序

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

  • id
  • class
  • name
  • data-xx
  • src, for, type, href
  • title, alt
  • aria-xxx, role
<a id="..." class="..." data-modal="toggle" href="###"></a>

<input class="form-control" type="text">

![](...)

引号

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

<!-- Not recommended -->
<span id='j-hook' class=text>Google</span>

<!-- Recommended -->
<span id="j-hook" class="text">Google</span>

嵌套

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

语义嵌套约束

  • <li>用于<ul><ol>下;
  • <dd>,<dt>用于<dl>之下;
  • <thead> , <tbody>, <tfoot>, <tr>, <td>用于<table>下;

严格嵌套约束

  • inline-Level元素,仅可以包含文本或其他inline-Level元素;
  • <a>里不可以嵌套交互式元素<a><button><select>等;
  • <p>里不可以嵌套块级元素<div><h1>~<h6><p><ul>/<ol>/<li><dl>/<dt>/<dd><form>等。

布尔值属性

HTML5规范中disabledcheckedselected等属性不用设置值。

<input type="text" disabled>

<input type="checkbox" value="1" checked>

<select>
  <option value="1" selected>1</option>
</select>

语义化


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

常见标签语义

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

示例

将你构建的页面当作一本书,将标签的语义对应的其功能和含义;

  • 书的名称: <h1>
  • 书的每个章节标题: <h2>
  • 章节内的文章标题: <h3>
  • 小标题/副标题: <h4> <h5> <h6>
  • 章节的段落: <p>

HEAD


文档类型

为每个HTML页面的第一行添加标准模式(standard mode)的声明,这样能够确保在每个浏览器中拥有一致的表现

<!DOCTYPE html>

语言属性

为什么使用lang="zh-cmn=Hans"而不是我们通常写的lang="zh-CN"呢?请参考:https://www.zhihu.com/question/20797118

<!-- 中文 -->
<html lang="zh-Hans">

<!-- 简体中文 -->
<html lang="zh-cmn-Hans">

<!-- 繁体中文 -->
<html lang="zh-cmn-Hnat">

<!-- Enlish -->
<html lang="en">

字符编码

  • 以无BOM的utf-8编码作为文件格式;
  • 指定字符编码的meta必须是head的第一个直接子元素;
<html>
  <head>
    <meta charset-"utf-8">
    ···
  </head>
  <body>
    ···
  </body>
</html>

IE兼容模式

优先使用最新版本的IE和Chrome内核

<meta http-equiv="X-UA-Cimpatible" content="IE=edge,chrome=1">

SEO优化

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

推荐阅读更多精彩内容

  • 此手册主要实现的目标:代码一致性和最佳实践。通过代码风格的一致性,降低维护代码的成本以及改善多人协作的效率。同时遵...
    _blow阅读 367评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 什么是html? html是一种网页标记语言,叫超文本标记语言,我们平时上网所看到的所有网页均来自于html,英文...
    波段顶底阅读 8,335评论 2 7
  • 1 前言 HTML 作为描述网页结构的超文本标记语言,一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持...
    山豆山豆阅读 1,159评论 2 6
  • 最佳原则 坚持制定好的代码规范。无论团队人数多少,代码应该同出一门。如果你想要为这个规范做贡献或觉得有不合理的地方...
    Tiny_ae3d阅读 1,619评论 0 1