本文翻译自Google HTML/CSS Style Guide
通用风格规则
协议
嵌入资源时省略协议。嵌入的图像或其他媒体资源、样式表、脚本的url地址是“http:”、“https:”可省略协议部分。可使URL变成相对地址,避免混合内容问题并略微减少文件大小。1
<!-- 不推荐 -->
<script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script>
.example {
background: url(http://www.google.com/images/example);
}
<!-- 推荐 -->
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
.example {
background: url(//www.google.com/images/example);
}
通用格式话规则
缩进
使用2个空格缩进。不要使用tab或tab混合空格。
大小写
只使用小写。所有代码使用小写,包括HTML标签、属性、属性值(不包括text/CDATA)、CSS选择器、CSS属性、CSS属性值。当然字符串仍可以使用大写。1
<!-- 不推荐 -->
<A HREF="/">Home</A>
color: #E5E5E5;
<!-- 推荐 -->
<img src="google.png" alt="Google">
color: #e5e5e5;
末尾空格
移除所有末尾空格。它们是不必要并可能带来麻烦。1
<!-- 不推荐 -->
<p>What?_
<!-- 推荐 -->
<p>Yes please.
通用元数据规则
编码
使用“UTF-8(No BOM)”。在HTML文件中通过<meta charset="utf-8">来指定编码,样式表文件默认为UTF-8因而不需要指定。(更多编码信息参考Handling character encodings in HTML and CSS
【注:“NO BOM”即文件开头无字节顺序(大头、小头)标记,延伸阅读字符编码笔记:ASCII,Unicode和UTF-8】
注释
在必要的地方添加注释。视项目复杂度而定,因为过多注释会导致HTML、CSS文件过于臃肿。
执行项目
使用TODO标记todos和执行项目。在括号内添加联系方式,格式为TODO(contact),在冒号后添加执行项目,格式为TODO: action item。1
{# TODO(john.doe): revisit centering #}
<center>Test</center>
<!-- TODO: remove optional tags -->
<ul>
<li>Apples</li>
<li>Oranges</li>
</ul>
HTML风格规则
文档格式
使用HTML文档格式,<!DOCTYPE html>。不要使用XHTML,不要关闭空元素,如<br>而不是<br />。
HTML合规性
尽可能使用合法的HTML代码。除非是为了缩小文件大小,但保证HTML有效性是底线。使用工具校验HTML,如:W3C HTML validator 。
语义化
根据用途使用合适HTML元素。如标题使用h1~h6,段落用p,链接用a等。这很重要,涉及到可访问性、重用以及代码效率的问题。1
<!-- 不推荐 -->
<div onclick="goToRecommendations();">All recommendations</div>
<!-- 推荐 -->
<a href="recommendations/">All recommendations</a>
多媒体替代文本
给多媒体提供替代文本。对于图片、音频、视频、画布,确保提供替代文本,如对图片使用有意义的alt属性值。这很重要,让那些使用屏幕阅读器的盲人用户也能更好地浏览网页。如果图片过多造成负担,或者图片只是在样式渲染之前起一个临时作用,那么可以写成alt=""。1
<!-- 不推荐 -->
<img src="spreadsheet.png">
<!-- 推荐 -->
<img src="spreadsheet.png" alt="Spreadsheet screenshot.">
结构分离
结构、表现、行为分离。严格分离结构(标记)、表现(样式)和行为(脚本),并确保这三者的交互最小化。也就是说HTML文档和模板只包含HTML结构性内容,将表现性的东西放进样式表文件,将行为性的东西放进脚本文件。另也要尽量减少外部样式表和脚本文件的数量。这点对维护很重要,一般上维护样式表或脚本文件比维护HTML文档更容易。1
<!-- 不推荐 -->
<!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!
实体引用
不要使用—,”,☺等实体引用,当然前提是要保证团队内的编码格式统一。可以使用实体的情况有下面几种:对于在HTML中具有特殊意义的字符(如<和&),控制字符,和不可见的字符如 (no-break space)。1
<!-- 不推荐 -->
The currency symbol for the Euro is “&eur;”.
<!-- 推荐 -->
The currency symbol for the Euro is “€”.
可选标签(本规则可选)
省略可选标签。出于减小文件体积等目的,HTML5规范规定了一些可以省略的标签。(这一点可能需要更多的时间去适应,因为目前的众多开发者都还不习惯这么做。但是出于一致性和简洁性的原因,把可选标签全都省略掉是最好的做法。)
type属性
省略样式表和脚本的type属性,除非不是CSS和Javascript。因为HTML5中text/css和text/javascript为默认。1
<!-- 不推荐 -->
<link rel="stylesheet" href="//www.google.com/css/maia.css"
type="text/css">
<script src="//www.google.com/js/gweb/analytics/autotrack.js"
type="text/javascript"></script>
<!-- 推荐 -->
<link rel="stylesheet" href="//www.google.com/css/maia.css">
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
HTML格式化规则
通用格式化
每一块、列表、表格另起新行,其子元素使用缩进。如果不想让列表项之间出现空文本节点,可以把所有的li放在一行。1
<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>
HTML引号
HTML属性值一律使用双引号。1
<!-- 不推荐 -->
<a class='maia-button maia-button-secondary'>Sign in</a>
<!-- 推荐 -->
<a class="maia-button maia-button-secondary">Sign in</a>
CSS风格规则
CSS样式合规性
使用合法的css,除非使用浏览器的私有属性。用W3C CSS validator校验css样式文件。
ID和class命名
使用有意义或通用的ID和class。使用能表达元素功能或通用的,且最容易理解不易改变的命名,而不是表现层或具有隐喻的命名。使用结构化的命名以减少不必要的文档更新。1
/* 不推荐: meaningless */
#yee-1901 {}
/* 不推荐: presentational */
.button-green {}
.clear {}
/* 推荐: specific */
#gallery {}
#login {}
.video {}
/* 推荐: generic */
.aux {}
.alt {}
ID和class命名风格
使用简洁明了的命名。这样有助于代码可读性和代码效率。1
/* 不推荐 */
#navigation {}
.atr {}
/* 推荐 */
#nav {}
.author {}
类型选择器
不要在ID和class前加元素,除非有必要。1
/* 不推荐 */
ul#example {}
div.error {}
/* 推荐 */
#example {}
.error {}
属性缩写
尽可能使用属性缩写。CSS提供了许多缩写的属性,如font,即使只设置一个属性值。这有助于代码可读性和代码效率。1
/* 不推荐 */
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。1
margin: 0;
padding: 0;
0开头
省略0若值以0开头。1
font-size: .8em;
Hex 颜色值
可缩写的16进制颜色使用3个字符。这样更简洁。1
/* 不推荐 */
color: #eebbcc;
/* 推荐 */
color: #ebc;
前缀(本规则可选)
给选择器加上应用特有的前缀。在大的项目中可避免命名冲突。1
.adw-help {} /* AdWords */
#maia-note {} /* Maia */
ID和class分隔符
使用连词符分隔ID和class。不要使用除了连词符外任何字符作为分隔符。1
/* 不推荐: 没有分隔 “demo” 和 “image” */
.demoimage {}
/* 不推荐: 使用了下划线分隔 */
.error_status {}
/* 推荐 */
#video-id {}
.ads-sample {}
CSS hacks
不要首选UA探测和CSS hacks。基于代码效率和可维护性的考虑,UA探测和hacks应最后的手段考虑。
CSS格式化规则
声明顺序
按字母书序声明。方便维护,排列时可以不考虑私有属性前缀,但-moz应当排在-webkit前。1
background: fuchsia;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
text-indent: 2em;
代码块缩进
所有代码块都缩进。结构清晰,可读性高。1
@media screen, projection {
html {
background: #fff;
color: #444;
}
}
声明结束
每条声明使用分号结束。保持声明一致性和可扩展性。1
/* 不推荐 */
.test {
display: block;
height: 100px
}
/* 推荐 */
.test {
display: block;
height: 100px;
}
属性名结尾
在属性名冒号后加一个空格。属性名和冒号间没有空格。1
/* 不推荐 */
h3 {
font-weight:bold;
}
/* 推荐 */
h3 {
font-weight: bold;
}
声明块分隔
在最后一个选择器和声明块加一个空格。在最后一个选择器和左大括号间加一个空格,且在同一行。1
/* 不推荐: 缺少空格 */
#video{
margin-top: 1em;
}
/* 不推荐: 不必要的换行 */
#video
{
margin-top: 1em;
}
/* 推荐 */
#video {
margin-top: 1em;
}
选择器和声明分隔
每个选择器和声明都使用新行。1
/* 不推荐 */
a:focus, a:active {
position: relative; top: 1px;
}
/* 推荐 */
h1,
h2,
h3 {
font-weight: normal;
line-height: 1.2;
}
规则分隔
规则间用空行分隔。1
html {
background: #fff;
}
body {
margin: auto;
width: 50%;
}
CSS引号
属性选择器和属性值使用单引号。url值不适用引号,使用charset时用双引号。1
/* 不推荐 */
@import url("//www.google.com/css/maia.css");
html {
font-family: "open sans", arial, sans-serif;
}
/* 推荐 */
@import url(//www.google.com/css/maia.css);
html {
font-family: 'open sans', arial, sans-serif;
}
CSS元规则(本规则可选)
使用注释为样式分组。组间用空行分隔。1
/* Header */
#adw-header {}
/* Footer */
#adw-footer {}
/* Gallery */
.adw-gallery {}