基本規范
語義
使用符合語義的標簽書寫 HTML 文檔, 選擇恰當的元素表達所需的含義;
<!-- 不推薦 --> <div onclick="goToRecommendations();">All recommendations</div>
<!-- 推薦 --> <a href="recommendations/">All recommendations</a>
大小寫
元素的標簽和屬性名必須小寫, 屬性值必須加雙引號; 例如
<!-- 不推薦 --> <A HREF='/'>Home</A>
<!-- 推薦 --> <a href="/">Home</a>
縮進
- 使用四個空格來表示縮進,不要使用 tab 鍵;
- 在塊狀元素,列表,表格元素后面使用新行,并且對它的子元素進行縮進.
例如
<ul> <li> 1 </li> </ul>
空格
去除比不必要的空格; 例如
<!-- 不推薦 --> <p>test </p>
<!-- 推薦 --> <p>test</p>
嵌套
- 元素嵌套遵循 (X)HTML Strict 嵌套規則, 推薦使用Firefox插件 HTML Validator 進行檢查;
- 正確區分自閉合元素和非自閉合元素. 非法閉合包括:<br>..</br>、<script />、<iframe />, 非法閉合會導致頁面嵌套錯誤問題;
<!-- 不推薦 --> <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 的屬性; 例如
<!-- 不推薦 --> <a class='maia-button maia-button-secondary'>Sign in</a>
<!-- 推薦 --> <a class="maia-button maia-button-secondary">Sign in</a>
自定義屬性
通過給元素設置自定義屬性來存放與 JavaScript 交互的數據, 屬性名格式為 data-xx (例如:data-lazyload-url)
DOCTYPE
頁面文檔類型統一使用HTML5 DOCTYPE. 代碼如下:
<!doctype html>
編碼
聲明方法遵循HTML5的規范.推薦使用 utf-8 編碼.
<meta charset="utf-8" />
注釋
建議對超過10行的頁面模塊進行注釋, 以降低開發人員的嵌套成本和后期的維護成本. 例如:
<div id="sample"> ... </div> <!-- #sample END -->
<div class="sample"> ... </div> <!-- .sample END -->
協議
如果鏈接和當前頁面一致則忽略鏈接的協議部分,例如
<!-- 不推薦 --> <script src="http://www.taobao.com/fp.js"></script>
<!-- 推薦 --> <script src="http://www.taobao.com/fp.js"></script>
/* 不推薦 */ .example { background: url(http://www.taobao.com/fp.css); }
/* 推薦 */ .example { background: url(//www.taobao.com/fp.css); }
TODO
- 使用 TODO 來標記待做事情,便于后期搜索.
- 在 TODO 后添加 (姓名或郵件) 來表示分類.
例如
<!-- TODO(yiminghe): remove duplicate tag --> <p><span>2</span></p>
焦點分離
- 將表現,行為和結構分離:不要在 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!
元素
結構性元素
- p 表示段落. 只能包含內聯元素, 不能包含塊級元素;
- div 本身無特殊含義, 可用于布局. 幾乎可以包含任何元素;
- br 表示換行符;
- hr 表示水平分割線;
- h1-h6 表示標題. 其中 h1 用于表示當前頁面最重要的內容的標題;
- blockquote 表示引用, 可以包含多個段落. 請勿純粹為了縮進而使用 blockquote, 大部分瀏覽器默認將 blockquote 渲染為帶有左右縮進;
- pre 表示一段格式化好的文本;
頭部元素
- title 每個頁面必須有且僅有一個 title 元素;
- base 可用場景:首頁、頻道等大部分鏈接都為新窗口打開的頁面;
- link link 用于引入 css 資源時, 可省去 media(默認為all) 和 type(默認為text/css) 屬性;
- style type 默認為 text/css, 可以省去;
- script type 屬性可以省去; 不贊成使用lang屬性; 不要使用古老的<!– //–>這種hack腳本, 它用于阻止第一代瀏覽器(Netscape 1和Mosaic)將腳本顯示成文字;
<!-- 不推薦 --> <link rel="stylesheet" href="http://www.google.com/css/maia.css" type="text/css"> <!-- 不推薦 --> <script src="http://www.google.com/js/gweb/analytics/autotrack.js" type="text/javascript"></script>
<!-- 推薦 --> <link rel="stylesheet" href="http://www.google.com/css/maia.css"> <!-- 推薦 --> <script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script>
- noscript 在用戶代理不支持 JavaScript 的情況下提供說明;
文本元素
- a a 存在 href 屬性時表示鏈接, 無 href 屬性但有 name 屬性表示錨點;
- em,strong em 表示句意強調, 加與不加會引起語義變化, 可用于表示不同的心情或語調; strong 表示重要性強調, 可用于局部或全局, strong強調的是重要性, 不會改變句意;
- abbr 表示縮寫;
- sub,sup 主要用于數學和化學公式, sup還可用于腳注;
- span 本身無特殊含義;
- ins,del 分別表示從文檔中增加(插入)和刪除
媒體元素
- img 請勿將img元素作為定位布局的工具, 不要用他顯示空白圖片; 給img元素增加alt屬性;例如
<!-- 不推薦 --> <img src="spreadsheet.png">
<!-- 推薦 --> <img src="spreadsheet.png" alt="Spreadsheet screenshot.">
- object 可以用來插入Flash;
列表元素
- dl 表示關聯列表, dd是對dt的解釋; dt和dd的對應關系比較隨意: 一個dt對應多個dd、多個dt對應一個dd、多個dt對應多個dd, 都合法; 可用于名詞/單詞解釋、日程列表、站點目錄;
- ul 表示無序列表;
- ol 表示有序列表, 可用于排行榜等;
- li 表示列表項, 必須是ul/ol的子元素;
表單元素
- 推薦使用 button 代替 input, 但必須聲明 type;
- 推薦使用 fieldset, legend 組織表單
- 表單元素的 name 不能設定為 action, enctype, method, novalidate, target, submit 會導致表單提交混亂
文檔模板
<!doctype html> <html> <head> <meta charset="utf-8" /> <title>Sample page</title> <link rel="stylesheet" href="css_example_url" /> </head> <body> <div id="page"> <div id="header"> 頁頭 </div> <div id="content"> 主體 </div> <div id="footer"> 頁尾 </div> </div> <script src="js_example_url"></script> <script> // 你的代碼 </script> </body> </html>