Google HTML/CSS代码风格指南(中文版)
看一下没什么印象,那就写一遍吧、
背景
本文档定义了HTML/CSS的编写格式和风格规则。它旨在提高合作和代码质量,并使其支持基础架构。适用于HTML/CSS文件,包括GSS文件。 只要代码质量是可以被维护的,就能很好的被工具混淆、压缩和合并。
样式规则
协议
嵌入式资源书写省略协议头
省略图像、媒体文件、样式表和脚本等URL协议头部声明 ( http: , https: )。如果不是这两个声明的URL则不省略。
省略协议声明,使URL成相对地址,防止内容混淆问题和导致小文件重复下载。
<!-- 不推荐 -->
<script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script>
<!-- 推荐 -->
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
/* 不推荐 */
.example {
background: url(http://www.google.com/images/example);
}
/* 推荐 */
.example {
background: url(//www.google.com/images/example);
}
排版规则
缩进
每次缩进两个空格。
不要用TAB键或多个空格来进行缩进。
<ul>
<li>Fantastic
<li>Great
</ul>
.example {
color: blue;
}
大小写
只用小写字母。
所有的代码都用小写字母:适用于元素名,属性,属性值(除了文本和 CDATA ), 选择器,特性,特性值(除了字符串)。
<!-- 不推荐 -->
<A HREF="/">Home</A>
<!-- 推荐 -->
<img src="google.png" alt="Google">
行尾空格
删除行尾白空格。
行尾空格没必要存在。
<!-- 不推荐 -->
<p>What?_
<!-- 推荐 -->
<p>Yes please.
元数据规则
编码
用不带BOM头的 UTF-8 编码。
让你的编辑器用没有字节顺序标记的 UTF-8 编码格式进行编写。
在HTML模板和文件中指定编码 . 不需要制定样式表的编码,它默认为 UTF-8 .
(更多有关于编码的信息和怎样指定它,请查看 Character Sets & Encodings in XHTML, HTML and CSS。)
注释
尽可能的去解释你写的代码。
用注释来解释代码:它包括什么,它的目的是什么,它能做什么,为什么使用这个解决方案,还是说只是因为偏爱如此呢?
(本规则可选,没必要每份代码都描述的很充分,它会增重HTML和CSS的代码。这取决于该项目的复杂程度。)
活动的条目
用 TODO 标记代办事项和正活动的条目。
只用 TODO 来强调代办事项, 不要用其他的常见格式,例如 @@ 。
附加联系人(用户名或电子邮件列表),用括号括起来,例如 TODO(contact) 。
可在冒号之后附加活动条目说明等,例如 TODO: 活动条目说明 。
{# TODO(cha.jn): 重新置中 #}
<center>Test</center>
<!-- TODO: 删除可选元素 -->
<ul>
<li>Apples</li>
<li>Oranges</li>
</ul>
HTML代码风格规则
文档类型
请使用 HTML5 标准。
HTML5 是目前所有 HTML 文档类型中的首选:
<!DOCTYPE html>
.(推荐用 HTML 文本文档格式,即
text/html
. 不要用 XHTML。 XHTML格式,即 application/xhtml+xml , 有俩浏览器完全不支持,还比 HTML 用更多的存储空间。)HTML 代码有效性
尽量使用有效的 HTML 代码。
编写有效的 HTML 代码,否则很难达到性能上的提升。
用类似这样的工具 W3C HTML validator 来进行测试。
HTML 代码有效性是重要的质量衡量标准,并可确保 HTML 代码可以正确使用。
<!-- 不推荐 -->
<title>Test</title>
<article>This is only a test.
<!-- 推荐 -->
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test</title>
<article>This is only a test.</article>
语义
根据 HTML 各个元素的用途而去使用它们。
使用元素 (有时候错称其为“标签”) 要知道为什么去使用它们和是否正确。 例如,用
heading
元素构造标题,p
元素构造段落,a
元素构造锚点等。根据 HTML 各个元素的用途而去使用是很重要的,它涉及到文档的可访问性、重用和代码效率等问题。
<!-- 不推荐 -->
<div onclick="goToRecommendations();">All recommendations</div>
<!-- 推荐 -->
<a href="recommendations/">All recommendations</a>
多媒体后备方案
为多媒体提供备选内容。
对于多媒体,如图像,视频,通过
canvas
读取的动画元素,确保提供备选方案。 对于图像使用有意义的备选文案(alt
) 对于视频和音频使用有效的副本和文案说明。提供备选内容是很重要的,原因:给盲人用户以一些提示性的文字,用
@alt
告诉他这图像是关于什么的,给可能没理解视频或音频的内容的用户以提示。(图像的
alt
属性会产生冗余,如果使用图像只是为了不能立即用 CSS 而装饰的 ,就不需要用备选文案了,可以写alt=""
。)<!-- 不推荐 -->
<img src="spreadsheet.png">
<!-- 推荐 -->
<img src="spreadsheet.png" alt="电子表格截图">
关注点分离
将表现和行为分开。
严格保持结构(标记),表现(样式),和行为(脚本)分离, 并尽量让这三者之间的交互保持最低限度。
确保文档和模板只包含 HTML 结构, 把所有表现都放到样式表里,把所有行为都放到脚本里。
此外,尽量使脚本和样式表在文档与模板中有最小接触面积,即减少外链。
将表现和行为分开维护是很重要滴,因为更改 HTML 文档结构和模板会比更新样式表和脚本更花费成本。
<!-- 不推荐 -->
<!DOCTYPE html>
<title>HTML sucks</title>
<link rel="stylesheet" href="base.css" media="screen">
<link rel="stylesheet" href="grid.css" media="screen">
<link rel="stylesheet" href="print.css" media="print">
<h1 style="font-size: 1em;">HTML sucks</h1>
<p>I’ve read about this on a few sites but now I’m sure:
<u>HTML is stupid!!1</u>
<center>I can’t believe there’s no way to control the styling of my website without doing everything all over again!</center>
<!-- 推荐 -->
<!DOCTYPE html>
<title>My first CSS-only redesign</title>
<link rel="stylesheet" href="default.css">
<h1>My first CSS-only redesign</h1>
<p>I’ve read about this on a few sites but today I’m actually
doing it: separating concerns and avoiding anything in the HTML of my website that is presentational.
<p>It’s awesome!
实体引用
不要用实体引用。
不需要使用类似
—
、”
和☺
等的实体引用, 假定团队之间所用的文件和编辑器是同一编码(UTF-8)。在 HTML 文档中具有特殊含义的字符(例如
<
和&
)为例外, 噢对了,还有 “不可见” 字符 (例如no-break
空格)。<!-- 不推荐 -->
欧元货币符号是 “&eur;”。
<!-- 推荐 -->
欧元货币符号是 “€”。
可选标签
省略可选标签(可选)。
出于优化文件大小和校验, 可以考虑省略可选标签,哪些是可选标签可以参考 HTML5 specification 。
(这种方法可能需要更精准的规范来制定,众多的开发者对此的观点也都不同。考虑到一致性和简洁的原因,省略所有可选标记是有必要的。)
<!-- 不推荐 -->
<!DOCTYPE html>
<html>
<head>
<title>Spending money, spending bytes</title>
</head>
<body>
<p>Sic.</p>
</body>
</html>
<!-- 推荐 -->
<!DOCTYPE html>
<title>Saving money, saving bytes</title>
<p>Qed.
type 属性
在样式表和脚本的标签中忽略
type
属性.在样式表(除非不用 CSS)和脚本(除非不用 JavaScript)的标签中 不写
type
属性。HTML5 默认
type
为text/css
和text/javascript
类型,所以没必要指定。即便是老浏览器也是支持的。<!-- 不推荐 -->
<link rel="stylesheet" href="//www.google.com/css/maia.css"
type="text/css">
<!-- 推荐 -->
<link rel="stylesheet" href="//www.google.com/css/maia.css">
<!-- 不推荐 -->
<script src="//www.google.com/js/gweb/analytics/autotrack.js"
type="text/javascript"></script>
<!-- 推荐 -->
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
HTML代码格式规则
格式
每个块元素、列表元素或表格元素都独占一行,每个子元素都相对于父元素进行缩进。
独立元素的样式(as CSS allows elements to assume a different role per display property), 将块元素、列表元素或表格元素都放在新行。
另外,需要缩进块元素、列表元素或表格元素的子元素。
(如果出现了列表项左右空文本节点问题,可以试着将所有的 li 元素都放在一行。 A linter is encouraged to throw a warning instead of an error.)
<blockquote>
<p><em>Space</em>, the final frontier.</p>
</blockquote>
<ul>
<li>Moe
<li>Larry
<li>Curly
</ul>
<table>
<thead>
<tr>
<th scope="col">Income
<th scope="col">Taxes
<tbody>
<tr>
<td>$ 5.00
<td>$ 4.50
</table>
CSS 代码风格规则
CSS 代码有效性
尽量使用有效的 CSS 代码。
使用有效的 CSS 代码,除非是处理 CSS 校验器程序错误或者需要专有语法。
用类似 W3C CSS validator 这样的工具来进行有效性的测试。
使用有效的 CSS 是重要的质量衡量标准,如果发现有的 CSS 代码没有任何效果的可以删除,确保 CSS 用法适当.
id 和 class 的命名
为
id
和class
取通用且有意义的名字。应该从
id
和class
的名字上就能看出这元素是干嘛用的,而不是表象或模糊不清的命名。应该优先虑以这元素具体目来进行命名,这样他就最容易理解,减少更新。
通用名称可以加在兄弟元素都不特殊或没有个别意义的元素上,可以起名类似 “helpers” 这样的泛。
使用功能性或通用的名字会减少不必要的文档或模板修改。
/* 不推荐: 无意义 不易理解 */
#yee-1901 {} /* 不推荐: 表达不具体 */
.button-green {}
.clear {}
/* 推荐: 明确详细 */
#gallery {}
#login {}
.video {} /* 推荐: 通用 */
.aux {}
.alt {}
id 和 class 命名风格
非必要的情况下,
id
和class
的名称应尽量简短。简要传达
id
或class
是关于什么的。通过这种方式,似的代码易懂且高效。
/* 不推荐 */
#navigation {}
.atr {}
/* 推荐 */
#nav {}
.author {}
类型选择器
避免使用 CSS 类型选择器。
非必要的情况下不要使用元素标签名和
id
或class
进行组合。出于性能上的考虑避免使用父辈节点做选择器 performance reasons.
/* 不推荐 */
ul#example {}
div.error {}
/* 推荐 */
#example {}
.error {}
属性缩写
写属性值的时候尽量使用缩写。
CSS 很多属性都支持缩写 shorthand (例如
font
) 尽量使用缩写,甚至只设置一个值。使用缩写可以提高代码的效率和方便理解。
/* 不推荐 */
border-top-style: none;
font-family: palatino, georgia, serif;
font-size: 100%;
line-height: 1.6;
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
/* 推荐 */
border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
padding: 0 1em 2em;
0 和单位
省略 0 后面的单位。
非必要的情况下 0 后面不用加单位。
margin: 0;
padding: 0;
0开头的小数
省略 0 开头小数点前面的 0。
值或长度在 -1 与 1 之间的小数,小数前的 0 可以忽略不写。
font-size: .8em;
URL外的引号
省略URL外的引号。
不要在
url()
里用 ( "" , '' ) 。@import url(//www.google.com/css/go.css);
十六进制
十六进制尽可能使用 3 个字符。
加颜色值时候会用到它,使用 3 个字符的十六进制更短与简洁。
/* 不推荐 */
color: #eebbcc;
/* 推荐 */
color: #ebc;
前缀
选择器前面加上特殊应用标识的前缀(可选)。
大型项目中最好在
id
或class
名字前加上这种标识性前缀(命名空间),使用短破折号链接。使用命名空间可以防止命名冲突,方便维护,比如在搜索和替换操作上。
.adw-help {} /* AdWords */
#maia-note {} /* Maia */
id 和 class 命名的定界符
id
和class
名字有多单词组合的用短破折号 “-” 分开。别在选择器名字里用短破折号 “-” 以外的连接词(包括啥也没有), 以增进对名字的理解和查找。
/* 不推荐:“demo” 和 “image” 中间没加 “-” */
.demoimage {} /* 不推荐:用下划线“_”是屌丝的风格 */
.error_status {}
/* 推荐 */
#video-id {}
.ads-sample {}
Hacks
最好避免使用该死的CSS “hacks” —— 请先尝试使用其他的解决方法。
虽然它很有诱惑力,可以当作用户代理检测或特殊的 CSS 过滤器,但它的行为太过于频繁,会长期伤害项目的效率和代码管理,所以能用其他的解决方案就找其他的。
CSS代码格式规则
声明顺序
依字母顺序进行声明。
都按字母顺序声明,很容易记住和维护。
忽略浏览器的特定前缀排序,但多浏览器特定的某个 CSS 属性前缀应相对保持排序(例如
-moz
前缀在-webkit
前面)。background: fuchsia;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
text-indent: 2em;
代码块内容缩进
缩进所有代码块(“{ }”之间)内容。
缩进所有代码块的内容,它能够提高层次结构的清晰度。
@media screen, projection { html {
background: #fff;
color: #444;
} }
声明完结
所有声明都要用“;”结尾。
考虑到一致性和拓展性,请在每个声明尾部都加上分号。
/* 不推荐 */
.test {
display: block;
height: 100px
}
/* 推荐 */
.test {
display: block;
height: 100px;
}
属性名完结
在属性名冒号结束后加一个空字符。
出于一致性的原因,在属性名和值之间加一个空格(可不是属性名和冒号之间噢)。
/* 不推荐 */
h3 {
font-weight:bold;
}
/* 推荐 */
h3 {
font-weight: bold;
}
选择器和声明分行
将选择器和声明隔行。
每个选择器和声明都要独立新行。
/* 不推荐 */
a:focus, a:active {
position: relative; top: 1px;
}
/* 推荐 */
h1,
h2,
h3 {
font-weight: normal;
line-height: 1.2;
}
规则分行
每个规则独立一行。
两个规则之间隔行。
html {
background: #fff;
} body {
margin: auto;
width: 50%;
}
CSS元数据规则
注释部分
按组写注释。(可选)
如果可以,按照功能的类别来对一组样式表写统一注释。独立成行。
/* Header */ #adw-header {} /* Footer */ #adw-footer {} /* Gallery */ .adw-gallery {}
后续
我喜欢看规范,因为我是初学者,我坚信,从规范学起,养成习惯,就如同练习打字时,强迫用标准指法一样。
我删掉了原作者吐槽部分,
Google HTML/CSS代码风格指南(中文版)的更多相关文章
- Google HTML/CSS/JS代码风格指南
JS版本参见:http://www.zhangxinxu.com/wordpress/2012/07/google-html-css-javascript-style-guides/ HTML/CSS ...
- Google C++编程风格指南 - 中文版
Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...
- 《Google 代码风格指南》
<Google 代码风格指南> https://github.com/google/styleguide
- Google JavaScript代码风格指南
Google JavaScript代码风格指南 修正版本 2.28 Aaron Whyte Bob Jervis Dan Pupius Eric Arvidsson Fritz Schneider R ...
- Google 开源项目的风格指南
谷歌C++代码风格指南.农业所需的代码.更难得的是不FQ,决定性的最爱!! . http://zh-google-styleguide.readthedocs.org/en/latest/google ...
- C++代码风格指南总结
C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...
- 读 Angular 代码风格指南
读 Angular 代码风格指南 本文写于 2021 年 1 月 17 日 原文地址:Angular 文档 该文章拥有完整的代码风格指南--大到如何编排文件夹,小到如何进行变量命名都涉及.但是与 ng ...
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- Python PEP-8编码风格指南中文版
#PEP 8 – Python编码风格指南 PEP: 8 Title: Style Guide for Python Code Author: Guido van Rossum , Barry War ...
随机推荐
- Hadoop入门进阶课程5--MapReduce原理及操作
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- [Node.js] Cluster,把多核用起来
原文地址: http://www.moye.me/?p=496 引子 众所周知,虽然Node的底层有一个IO线程池,但其应用层默认是单线程运行的,对于多核CPU环境来说,是一种资源的浪费. 所幸Nod ...
- CSS3的变形transform、过渡transition、动画animation学习
学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.- ...
- 常用的android弹出对话框
我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...
- JS 函数--Date()函数
1.JavaScript没有基本的日期数据类型,所以只能显式的创建Date对象.例如:var myDate=new Date(); 2.为了创建一个存储了特定日期的,或者时间的Date对象,可以简单的 ...
- .net中WebService的使用实例
一.创建一个Webwebservice 1.新建一个项目WebserverDemo 2.在项目处添加新建项,添加一个web服务 3.编辑TestServer.asmx文件 3.1 TestServer ...
- Javascript小笔记
1.315360000000 毫秒 = 10年 2.Javascript 取时间截: JavaScript 获取当前时间戳: 第一种方法: var timestamp = Date.parse(new ...
- Python基础:函数式编程
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
- jquery实现网页选项卡
这个功能在现在的网站中使用较为普遍,就是以选项卡的形式来对一些内容做了分类.,比如下面的天猫商城. 下面的源码是仿照天猫写的一个选项卡,实现起来的效果如下. 主要是利用我们在点击相应板块是触发它的单击 ...
- C#的Raw Socket实现网络封包监视
同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本 ...