CSS規則javascript
---------------------------------------------css
1 前言html
2 代碼風格html5
2.1 文件java
2.2 縮進jquery
2.3 空格git
2.4 行長度github
2.5 選擇器web
2.6 屬性express
CSS 做爲網頁樣式的描述語言,在百度一直有着普遍的應用。本文檔的目標是使 CSS 代碼風格保持一致,容易被理解和被維護。
CSS
文件使用無 BOM
的 UTF-8
編碼。解釋:
UTF-8 編碼具備更普遍的適應性。BOM 在使用程序或工具處理文件時可能形成沒必要要的干擾。
4
個空格作爲一個縮進層級,不容許使用 2
個空格 或 tab
字符。示例:
.selector {
margin: 0;
padding: 0;
}
120
個字符,除非單行不可分割。解釋:
常見不可分割的場景爲URL超長。
空格
處或 ,
後換行,建議按邏輯分組。示例:
/* 不一樣屬性值按邏輯分組 */
background:
transparent url(aVeryVeryVeryLongUrlIsPlacedHere)
no-repeat 0 0;
/* 可重複屢次的屬性,每次重複一行 */background-image:
url(aVeryVeryVeryLongUrlIsPlacedHere)
url(anotherVeryVeryVeryLongUrlIsPlacedHere);
/* 相似函數的屬性值能夠根據函數調用的縮進進行 */background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.04, rgb(88,94,124)),
color-stop(0.52, rgb(115,123,162))
);
示例:
/* good */.post,.page,.comment {
line-height: 1.5;
}
/* bad */.post, .page, .comment {
line-height: 1.5;
}
>
、+
、~
選擇器的兩邊各保留一個空格。示例:
/* good */main > nav {
padding: 10px;
}
label + input {
margin-left: 5px;
}
input:checked ~ button {
background-color: #69C;
}
/* bad */main>nav {
padding: 10px;
}
label+input {
margin-left: 5px;
}
input:checked~button {
background-color: #69C;
}
解釋:
不容許使用單引號,不容許不使用引號。
示例:
/* good */article[character="juliet"] {
voice-family: "Vivien Leigh", victoria, female;
}
/* bad */article[character='juliet'] {
voice-family: "Vivien Leigh", victoria, female;
}
示例:
/* good */.selector {
margin: 0;
padding: 0;
}
/* bad */.selector { margin: 0; padding: 0; }
示例:
/* good */.selector {
margin: 0;
}
/* bad */.selector {
margin: 0
}
id
、class
選擇器添加類型選擇器進行限定。解釋:
在性能和維護性上,都有必定的影響。
示例:
/* good */#error,.danger-message {
font-color: #c00;
}
/* bad */dialog#error,p.danger-message {
font-color: #c00;
}
3
級,位置靠後的限定條件應儘量精確。示例:
/* good */#username input {}.comment .avatar {}
/* bad */.page .header .login #username input {}.comment div * {}
示例:
/* good */.post {
font: 12px/1.5 arial, sans-serif;
}
/* bad */.post {
font-family: arial, sans-serif;
font-size: 12px;
line-height: 1.5;
}
border
/ margin
/ padding
等縮寫時,應注意隱含值對實際數值的影響,確實須要設置多個方向的值時才使用縮寫。解釋:
border
/ margin
/ padding
等縮寫會同時設置多個屬性的值,容易覆蓋不須要覆蓋的設定。如某些方向須要繼承其餘聲明的值,則應該分開設置。
示例:
/* centering <article class="page"> horizontally and highlight featured ones */article {
margin: 5px;
border: 1px solid #999;
}
/* good */.page {
margin-right: auto;
margin-left: auto;
}
.featured {
border-color: #69c;
}
/* bad */.page {
margin: 5px auto; /* introducing redundancy */
}
.featured {
border: 1px solid #69c; /* introducing redundancy */
}
解釋:
position
/ top
/ right
/ bottom
/ left
/ float
/ display
/ overflow
等border
/ margin
/ padding
/ width
/ height
等font
/ line-height
/ text-align
/ word-wrap
等background
/ color
/ transition
/ list-style
等另外,若是包含 content
屬性,應放在最前面。
示例:
.sidebar {
/* formatting model: positioning schemes / offsets / z-indexes / display / ... */
position: absolute;
top: 50px;
left: 0;
overflow-x: hidden;
/* box model: sizes / margins / paddings / borders / ... */
width: 200px;
padding: 5px;
border: 1px solid #ddd;
/* typographic: font / aligns / text styles / ... */
font-size: 14px;
line-height: 20px;
/* visual: colors / shadows / gradients / ... */
background: #f5f5f5;
color: #333;
-webkit-transition: color 1s;
-moz-transition: color 1s;
transition: color 1s;
}
!important
聲明。!important
定義樣式。解釋:
必須注意的是,僅在設計上 確實不容許任何其它場景覆蓋樣式
時,才使用內聯的 !important
樣式。一般在第三方環境的應用中使用這種方案。下面的 z-index
章節是其中一個特殊場景的典型樣例。
z-index
進行分層,對文檔流外絕對定位元素的視覺層級關係進行管理。解釋:
同層的多個元素,如多個由用戶輸入觸發的 Dialog,在該層級內使用相同的 z-index
或遞增 z-index
。
建議每層包含100個 z-index
來容納足夠的元素,若是每層元素較多,能夠調整這個數值。
z-index
指定爲 999
。0
。示例:
/* good */
panel {
opacity: .8;
}
/* bad */
panel {
opacity: 0.8;
}
url()
函數中的路徑不加引號。示例:
body {
background: url(bg.png);
}
url()
函數中的絕對路徑可省去協議名。示例:
body {
background: url(//baidu.com/img/bg.png) no-repeat 0 0;
}
0
時須省略單位。 (也只有長度單位可省)示例:
/* good */body {
padding: 0 5px;
}
/* bad */body {
padding: 0px 5px;
}
示例:
/* good */.success {
background-color: #aca;
}
/* bad */.success {
background-color: #aaccaa;
}
示例:
/* good */.success {
color: #90ee90;
}
/* bad */.success {
color: lightgreen;
}
示例:
/* good */.success {
background-color: #aca;
color: #90ee90;
}
/* good */.success {
background-color: #ACA;
color: #90EE90;
}
/* bad */.success {
background-color: #ACA;
color: #90ee90;
}
解釋:
2D 位置初始值爲 0% 0%
,但在只有一個方向的值時,另外一個方向的值會被解析爲 center。爲避免理解上的困擾,應同時給出兩個方向的值。background-position屬性值的定義
示例:
/* good */body {
background-position: center top; /* 50% 0% */
}
/* bad */body {
background-position: top; /* 50% 0% */
}
font-family
屬性中的字體族名稱應使用字體的英文 Family Name
,其中若有空格,須放置在引號中。解釋:
所謂英文 Family Name,爲字體文件的一個元數據,常見名稱以下:
字體 |
操做系統 |
Family Name |
宋體 (中易宋體) |
Windows |
SimSun |
黑體 (中易黑體) |
Windows |
SimHei |
微軟雅黑 |
Windows |
Microsoft YaHei |
微軟正黑 |
Windows |
Microsoft JhengHei |
華文黑體 |
Mac/iOS |
STHeiti |
冬青黑體 |
Mac/iOS |
Hiragino Sans GB |
文泉驛正黑 |
Linux |
WenQuanYi Zen Hei |
文泉驛微米黑 |
Linux |
WenQuanYi Micro Hei |
示例:
h1 {
font-family: "Microsoft YaHei";
}
font-family
按「西文字體在前、中文字體在後」、「效果佳 (質量高/更能知足需求) 的字體在前、效果通常的字體在後」的順序編寫,最後必須指定一個通用字體族( serif
/ sans-serif
)。解釋:
更詳細說明可參考本文。
示例:
/* Display according to platform */.article {
font-family: Arial, sans-serif;
}
/* Specific for most platforms */h1 {
font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft YaHei", sans-serif;
}
font-family
不區分大小寫,但在同一個項目中,一樣的 Family Name
大小寫必須統一。示例:
/* good */body {
font-family: Arial, sans-serif;
}
h1 {
font-family: Arial, "Microsoft YaHei", sans-serif;
}
/* bad */body {
font-family: arial, sans-serif;
}
h1 {
font-family: Arial, "Microsoft YaHei", sans-serif;
}
12px
。解釋:
因爲 Windows 的字體渲染機制,小於 12px
的文字顯示效果極差、難以辨認。
normal
外的 font-style
。其餘平臺也應慎用。解釋:
因爲中文字體沒有 italic
風格的實現,全部瀏覽器下都會 fallback 到 obilique
實現 (自動擬合爲斜體),小字號下 (特別是 Windows 下會在小字號下使用點陣字體的狀況下) 顯示效果差,形成閱讀困難。
line-height
在定義文本段落時,應使用數值。解釋:
將 line-height
設置爲數值,瀏覽器會基於當前元素設置的 font-size
進行再次計算。在不一樣字號的文本段落組合中,能達到較爲溫馨的行間間隔效果,避免在每一個設置了 font-size
都須要設置 line-height
。
當 line-height
用於控制垂直居中時,仍是應該設置成與容器高度一致。
示例:
.container {
line-height: 1.5;
}
transition
時應指定 transition-property
。示例:
/* good */.box {
transition: color 1s, border-color 1s;
}
/* bad */.box {
transition: all 1s;
}
解釋:
見本文,在可能的狀況下應選擇這樣四種變換:
transform: translate(npx, npx);
transform: scale(n);
transform: rotate(ndeg);
opacity: 0..1;
典型的,可使用 translate
來代替 left
做爲動畫屬性。
示例:
/* good */.box {
transition: transform 1s;
}.box:hover {
transform: translate(20px); /* move right for 20px */
}
/* bad */.box {
left: 0;
transition: left 1s;
}.box:hover {
left: 20px; /* move right for 20px */
}
解釋:
標準屬性放在最後,按冒號對齊方便閱讀,也便於在編輯器內進行多行編輯。
示例:
.box {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
hack
時應儘量考慮是否能夠採用其餘方式解決。解釋:
若是能經過合理的 HTML 結構或使用其餘的 CSS 定義達到理想的樣式,則不該該使用 hack 手段解決問題。一般 hack 會致使維護成本的增長。
選擇器 hack
處理兼容性,而非 屬性 hack
。解釋:
儘可能使用符合 CSS 語法的 selector hack,能夠避免一些第三方庫沒法識別 hack 語法的問題。
示例:
/* IE 7 */*:first-child + html #header {
margin-top: 3px;
padding: 5px;
}
/* IE 6 */* html #header {
margin-top: 5px;
padding: 4px;
}
屬性 hack
。示例:
.box {
_display: inline; /* fix double margin */
float: left;
margin-left: 20px;
}
.container {
overflow: hidden;
*zoom: 1; /* triggering hasLayout */
}
Expression
。
HTML 做爲描述網頁結構的超文本標記語言,在百度一直有着普遍的應用。本文檔的目標是使 HTML 代碼風格保持一致,容易被理解和被維護。
4
個空格作爲一個縮進層級,不容許使用 2
個空格 或 tab
字符。解釋: 對於非 HTML 標籤之間的縮進,好比 script 或 style 標籤內容縮進,與 script 或 style 標籤的縮進同級。
示例:
<style>/* 樣式內容的第一級縮進與所屬的 style 標籤對齊 */ul { padding: 0;}</style>
<ul>
<li>first</li>
<li>second</li>
</ul><script>// 腳本代碼的第一級縮進與所屬的 script 標籤對齊require(['app'], function (app) { app.init();});</script>
120
個字符。解釋:
過長的代碼不容易閱讀與維護。可是考慮到 HTML 的特殊性,不作硬性要求。
class
必須單詞全字母小寫,單詞間以 -
分隔。class
必須表明相應模塊或部件的內容或功能,不得以樣式信息進行命名。示例:
<!-- good -->
<div class="sidebar"></div>
<!-- bad -->
<div class="left"></div>
<!-- good -->
foo').tagName);</script>
示例:
<!-- good -->
<p>Hello StyleGuide!</p>
<!-- bad -->
<P>Hello StyleGuide!</P>
解釋:
常見無需自閉合標籤有 input
、br
、img
、hr
等。
示例:
<!-- good -->
<input type="text" name="title">
<!-- bad -->
<input type="text" name="title" />
HTML5
中規定容許省略的閉合標籤,不容許省略閉合標籤。解釋:
對代碼體積要求很是嚴苛的場景,能夠例外。好比:第三方頁面使用的投放系統。
示例:
<!-- good -->
<ul>
<li>first</li>
<li>second</li>
</ul>
<!-- bad -->
<ul>
<li>first
<li>second
</ul>
解釋:
好比 div
不得置於 p
中,tbody
必須置於 table
中。
詳細的標籤嵌套規則參見HTML DTD中的 Elements
定義部分。
解釋:
下面是常見標籤語義
示例:
<!-- 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 -->
<img class="avatar" src="image.png">
<!-- bad -->
<span class="avatar">
<img src="image.png">
</span>
HTML5
的 doctype
來啓用標準模式,建議使用大寫的 DOCTYPE
。示例:
<!DOCTYPE html>
html
標籤上設置正確的 lang
屬性。解釋:
有助於提升頁面的可訪問性,如:讓語音合成工具肯定其所應該採用的發音,令翻譯工具肯定其翻譯語言等。
示例:
<html lang="zh-CN">
meta
必須是 head
的第一個直接子元素。解釋:
見 HTML5 Charset能用嗎 一文。
示例:
<html>
<head>
<meta charset="UTF-8">
......
</head>
<body>
......
</body>
</html>
HTML
文件使用無 BOM
的 UTF-8
編碼。解釋:
UTF-8
編碼具備更普遍的適應性。BOM
在使用程序或工具處理文件時可能形成沒必要要的干擾。
CSS
時必須指明 rel="stylesheet"
。示例:
<link rel="stylesheet" href="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>
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>
title
標籤聲明標題。title
必須做爲 head
的直接子元素,並緊隨 charset
聲明以後。解釋:
title
中若是包含 ASCII 以外的字符,瀏覽器須要知道字符編碼類型才能進行解碼,不然可能致使亂碼。
示例:
<head>
<meta charset="UTF-8">
<title>頁面標題</title>
</head>
favicon
可訪問。解釋:
在未指定 favicon 時,大多數瀏覽器會請求 Web Server 根目錄下的 favicon.ico
。爲了保證 favicon 可訪問,避免 404,必須遵循如下兩種方法之一:
favicon.ico
文件。link
指定 favicon。示例:
<link rel="shortcut icon" href="path/to/favicon.ico">
viewport
。解釋:
viewport meta tag 能夠設置可視區域的寬度和初始縮放大小,避免在移動設備上出現頁面展現不正常。
好比,在頁面寬度小於 980px
時,若需 iOS 設備友好,應當設置 viewport 的 width
值來適應你的頁面寬度。同時由於不一樣移動設備分辨率不一樣,在設置時,應當使用 device-width
和 device-height
變量。
另外,爲了使 viewport 正常工做,在頁面內容樣式佈局設計上也要作相應調整,如避免絕對定位等。關於 viewport 的更多介紹,能夠參見 Safari Web Content Guide的介紹
img
的 src
取值爲空。延遲加載的圖片也要增長默認的 src
。解釋:
src
取值爲空,會致使部分瀏覽器從新加載一次當前頁面,參考:https://developer.yahoo.com/performance/rules.html#emptysrc
img
添加沒必要要的 title
屬性。解釋:
多餘的 title
影響看圖體驗,而且增長了頁面尺寸。
alt
屬性。解釋:
能夠提升圖片加載失敗時的用戶體驗。
width
和 height
屬性,以免頁面抖動。img
標籤實現,無下載需求的圖片採用 CSS 背景圖實現。解釋:
img
形式實現,能方便用戶下載。label
標籤將其與其標題相關聯。解釋:
有兩種方式:
label
內。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">
button
元素時必須指明 type
屬性值。解釋:
button
元素的默認 type
爲 submit
,若是被置於 form
元素中,點擊後將致使表單提交。爲顯示區分其做用方便理解,必須給出 type
屬性。
示例:
<button type="submit">提交</button>
<button type="button">取消</button>
HTML5
的瀏覽器中優先使用 audio
和 video
標籤來定義音視頻元素。object
標籤內部提供指示瀏覽器不支持該標籤的說明。示例:
<object width="100" height="50" data="something.swf">DO NOT SUPPORT THIS TAG</object>