標籤:
不管有多少人共同參與同一項目,一定要確保每一行代碼都像是同一個人編寫的。
HTML 部分文法
- 對於屬性的定義,確保全部使用雙引號,絕不要使用單引號。
- 為每個 HTML 頁面的第一行添加標準模式(standard mode)的聲明,這樣能夠確保在每個瀏覽器中擁有一致的展現。
<!DOCTYPE html><html> <head> </head></html>
語言屬性
- 根據 HTML5 規範:
強烈建議為 html 根項目指定 lang 屬性,從而為文檔設定正確的語言。這將有助於語音合成工具確定其所應該採用的發音,有助於翻譯工具確定其翻譯時所應遵守的規則等等。
<html lang="zh-CN"> <!-- ... --></html>
IE 相容模式
- IE 支援通過特定的 標籤來確定繪製當前頁面所應該採用的 IE 版本。除非有強烈的特殊需求,否則最好是設定為 edge mode,從而通知 IE 採用其所支援的最新的模式。
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
字元編碼
- 通過明確聲明字元編碼,能夠確保瀏覽器快速並容易的判斷頁面內容的渲染方式。這樣做的好處是,可以避免在 HTML 中使用字元實體標記(character entity),從而全部與文檔編碼一致(一般採用 UTF-8 編碼)。
<head> <meta charset="UTF-8"></head>
引入 CSS 和 JavaScript 檔案
- 根據 HTML5 規範,在引入 CSS 和 JavaScript 檔案時一般不需要指定 type 屬性,因為 text/css 和 text/javascript 分別是它們的預設值。
<!-- External CSS --><link rel="stylesheet" href="code-guide.css"><!-- In-document CSS --><style> /* ... */</style><!-- JavaScript --><script src="code-guide.js"></script>
屬性順序
<a class="..." id="..." data-modal="toggle" href="#"> Example link</a><input class="form-control" type="text"><img src="..." alt="...">
布爾(boolean)型屬性
- 布爾型屬性可以在聲明時不賦值。XHTML 規範要求為其賦值,但是 HTML5 規範不需要。
元素的布爾型屬性如果有值,就是 true,如果沒有值,就是 false。
<input type="text" disabled><input type="checkbox" value="1" checked><select> <option value="1" selected>1</option></select>
減少標籤的數量
- 編寫 HTML 程式碼時,盡量避免多餘的父元素。很多時候,這需要迭代和重構來實現。
<!-- Not so great --><span class="avatar"> <img src="..."></span><!-- Better --><img class="avatar" src="...">
CSS文法
- 為選取器分組時,將單獨的選取器單獨放在一行。
- 為了代碼的易讀性,在每個聲明塊的左花括弧前添加一個空格。
- 聲明塊的右花括弧應當單獨成行。
- 每條聲明語句的 : 後應該插入一個空格。
- 為了獲得更準確的錯誤報表,每條聲明都應該獨佔一行。
- 所有聲明語句都應當以分號結尾。最後一條聲明語句後面的分號是可選的,但是,如果省略這個分號,你的代碼可能更易出錯。
- 對於以逗號分隔的屬性值,每個逗號後面都應該插入一個空格(例如,box-shadow)。
- 十六進位值應該全部小寫,例如,#fff。在掃描文檔時,小寫字元易於分辨,因為他們的形式更易於區分。
- 盡量使用簡寫形式的十六進位值,例如,用 #fff 代替 #ffffff。
- 為選取器中的屬性添加雙引號,例如,input[type="text"]。
- 避免為 0 值指定單位,例如,用 margin: 0; 代替 margin: 0px;。
/* Bad CSS */.selector, .selector-secondary, .selector[type=text] { padding:15px; margin:0px 0px 15px; background-color:rgba(0, 0, 0, 0.5); box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF}/* Good CSS */.selector,.selector-secondary,.selector[type="text"] { padding: 15px; margin-bottom: 15px; background-color: rgba(0,0,0,.5); box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;}
聲明順序
- Box model
- Typographic
- Visual
.declaration-order { /* Positioning */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 100; /* Box-model */ display: block; float: right; width: 100px; height: 100px; /* Typography */ font: normal 13px "Helvetica Neue", sans-serif; line-height: 1.5; color: #333; text-align: center; /* Visual */ background-color: #f5f5f5; border: 1px solid #e5e5e5; border-radius: 3px; /* Misc */ opacity: 1;}
媒體查詢(Media query)的位置
- 將媒體查詢放在儘可能相關規則的附近。不要將他們打包放在一個單一樣式檔案中或者放在文檔底部。如果你把他們分開了,將來只會被大家遺忘。下面給出一個典型的執行個體。
.element { ... }.element-avatar { ... }.element-selected { ... }@media (min-width: 480px) { .element { ...} .element-avatar { ... } .element-selected { ... }}
單行規則聲明
- 對於只包含一條聲明的樣式,為了易讀性和便於快速編輯,建議將語句放在同一行。對於帶有多條聲明的樣式,還是應當將聲明分為多行。
這樣做的關鍵因素是為了錯誤偵測 -- 例如,CSS 校正器指出在 183 行有語法錯誤。如果是單行單條聲明,你就不會忽略這個錯誤;如果是單行多條聲明的話,你就要仔細分析避免漏掉錯誤了。
/* Single declarations on one line */.span1 { width: 60px; }.span2 { width: 140px; }.span3 { width: 220px; }/* Multiple declarations, one per line */.sprite { display: inline-block; width: 16px; height: 15px; background-image: url(../img/sprite.png);}.icon { background-position: 0 0; }.icon-home { background-position: 0 -20px; }.icon-account { background-position: 0 -40px; }
簡寫形式的屬性聲明
/* Bad example */.element { margin: 0 0 10px; background: red; background: url("image.jpg"); border-radius: 3px 3px 0 0;}/* Good example */.element { margin-bottom: 10px; background-color: red; background-image: url("image.jpg"); border-top-left-radius: 3px; border-top-right-radius: 3px;}
class 命名
- class 名稱中只能出現小寫字元和破折號(dashe)(不是底線,也不是駝峰命名法)。破折號應當用於相關 class 的命名(類似於命名空間)(例如,.btn 和 .btn-danger)。
- 避免過度任意的簡寫。.btn 代表 button,但是 .s 不能表達任何意思。
- class 名稱應當儘可能短,並且意義明確。
使用有意義的名稱。使用有組織的或目的明確的名稱,不要使用表現形式(presentational)的名稱。
- 基於最近的父 class 或基本(base) class 作為新 class 的首碼。
使用 .js-* class 來標識行為(與樣式相對),並且不要將這些 class 包含到 CSS 檔案中。
/* Bad example */.t { ... }.red { ... }.header { ... }/* Good example */.tweet { ... }.important { ... }.tweet-header { ... }
程式碼群組織
- 以組件為單位組織程式碼片段。
- 制定一致的注釋規範。
- 使用一致的空白符將代碼分隔成塊,這樣利於掃描較大的文檔。
- 如果使用了多個 CSS 檔案,將其按照組件而非頁面的形式分拆,因為頁面會被重組,而組件只會被移動。
編程規範 html部分