html編碼規範

不久前接到老大下達的任務,要擬定一份公司前端編碼規範的草稿,參考了各大公司的編碼規範,結合如今公司的特色,整理出如下編碼規範:

html規範

1 文件相關

(1) 文件名以英文爲主,可使用下劃線(如active.html),壓縮包以項目名+日期的形式。
(2) 統一使用utf-8編碼。
(3) css、js發佈到線上都須要壓縮。
(4) 在追求高度優化的站點,須要對圖片也進行無損壓縮。javascript

2 代碼風格

2.1 命名

(1) 元素 id 必須保證頁面惟一。(解釋:同一個頁面中,不一樣的元素包含相同的 id,不符合 id 的屬性含義。而且使用 document.getElementById 時可能致使難以追查的問題。)
(2) id建議單詞全字母小寫,單詞間以"_"分隔。同項目必須保持風格一致。
(3) class必須單詞全字母小寫,單詞間以"_"分隔。
(4) class命名最好表明相應模塊或部件的內容或功能。
(5) id、class 命名,在避免衝突並描述清楚的前提下儘量短。
(6) 同一頁面,應避免使用相同的 name 與 id。(解釋:IE 瀏覽器會混淆元素的 id 和 name 屬性, document.getElementById 可能得到不指望的元素。因此在對元素的 id 與 name 屬性的命名須要很是當心。)
示例: css

<input name="foo">
<div id="foo"></div>
<script>
// IE6 將顯示 INPUT
alert(document.getElementById('foo').tagName);
</script>
2.2 標籤

(1) 標籤名必須使用小寫字母。
html

(2) 標籤使用必須符合標籤嵌套規則。(解釋:如<p>裏不能夠嵌套塊級元 素<div>、<h1>~<h6>、<p>、<ul>/<ol> /<li>、<dl>/<dt>/<dd>、<form>;tbody 必須置於 table 中;inline-Level 元素,僅能夠包含文本或其它 inline-Level 元素;<a>裏不能夠嵌套交互式元素<a>、<button>、<select>等。)
(3) HTML 標籤的使用應該遵循標籤的語義。
下面是常見標籤語義:
  p - 段落
  h1,h2,h3,h4,h5,h6 - 層級標題
  strong,em - 強調
  ins - 插入
  del - 刪除
  abbr - 縮寫
  code - 代碼標識
  cite - 引述來源做品的標題
  q - 引用
  blockquote - 一段或長篇引用
  ul - 無序列表
  ol - 有序列表
  dl,dt,dd - 定義列表
(4) 標籤的使用應儘可能簡潔,減小沒必要要的標籤。
示例: 前端

<!-- good -->
<img class="avatar" src="image.png">

<!-- bad -->
<span class="avatar">
    <img src="image.png">
</span>
2.3 屬性

(1) 屬性名必須使用小寫字母。
(2) 屬性值必須用雙引號包圍。
(3) HTML 屬性應當按照如下給出的順序依次排列,確保代碼的易讀性(class,id, name,data-*,src, for, type, href,title, alt,aria-*, role。解釋:class 用於標識高度可複用組件,所以應該排在首位。id 用於標識具體組件,應當謹慎使用(例如,頁面內的書籤),所以排在第二位。)
(4) 布爾類型的屬性(如disabled、checked、selected 等屬性),建議不添加屬性值。
示例: java

<input type="text" disabled>
<input type="checkbox" value="1" checked>
<select>
  <option value="1" selected>1</option>
</select>

(4) 自定義屬性建議以 xxx- 爲前綴,推薦使用 data-(解釋:使用前綴有助於區分自定義屬性和標準定義的屬性。)
瀏覽器

3 通用

3.1 DOCTYPE

(1) 使用 HTML5 的 doctype 來啓用標準模式,建議使用大寫的 DOCTYPE。
示例: 異步

<!DOCTYPE html>

(2) 在 html 標籤上設置正確的 lang 屬性。(解釋:有助於提升頁面的可訪問性,如:讓語音合成工具肯定其所應該採用的發音,令翻譯工具肯定其翻譯語言等。)ide

3.2 編碼

(1) 頁面必須使用精簡形式,明確指定字符編碼。指定字符編碼的 meta 必須是 head 的第一個直接子元素。
示例: 工具

<html>
    <head>
        <meta charset="utf-8">
        ......
    </head>
    <body>
        ......
    </body>
</html>
3.3 CSS 和 JavaScript 引入

(1) 引入 CSS 時必須指明 rel="stylesheet"。
(2) 引入 CSS 和 JavaScript 時無須指明 type 屬性。(解釋:text/css 和 text/javascript 是 type 的默認值。)
(3) 展示定義放置於外部 CSS 中,行爲定義放置於外部 JavaScript 中。(解釋:結構-樣式-行爲的代碼分離,對於提升代碼的可閱讀性和維護性都有好處。)
(4) 在 head 中引入頁面須要的全部 CSS 資源。(解釋:在頁面渲染的過程當中,新的CSS可能致使元素的樣式從新計算和繪製,頁面閃爍。)
(5) JavaScript 應當放在頁面末尾,或採用異步加載。(解釋:將 script 放在頁面中間將阻斷頁面的渲染。出於性能方面的考慮,如非必要,請遵照此條建議。)
post

4 head

4.1 title

(1) 頁面必須包含 title 標籤聲明標題。
(2) title 必須做爲 head 的直接子元素,並緊隨 charset 聲明以後。(解釋:title 中若是包含 ASCII 以外的字符,瀏覽器須要知道字符編碼類型才能進行解碼,不然可能致使亂碼。)
示例:

<head>
    <meta charset="utf-8">
    <title>頁面標題</title>
</head>
4.2 favicon

(1) 保證 favicon 可訪問。
(解釋:在未指定 favicon 時,大多數瀏覽器會請求 Web Server 根目錄下的 favicon.ico 。爲了保證 favicon 可訪問,避免 404,必須遵循如下兩種方法之一:1.在 Web Server 根目錄放置 favicon.ico 文件;2.使用 link 指定 favicon。)
示例:

<link rel="shortcut icon" href="path/to/favicon.ico">
4.3 viewport

若頁面欲對移動設備友好,需指定頁面的 viewport。
(解釋:viewport meta tag 能夠設置可視區域的寬度和初始縮放大小,避免在移動設備上出現頁面展現不正常。好比,在頁面寬度小於 980px 時,若需 iOS 設備友好,應當設置 viewport 的 width 值來適應你的頁面寬度。同時由於不一樣移動設備分辨率不一樣,在設置時,應當使用 device-width 和 device-height 變量。)

5 圖片

(1) 禁止 img 的 src 取值爲空。延遲加載的圖片也要增長默認的 src。(解釋:src 取值爲空,會致使部分瀏覽器從新加載一次當前頁面。)
(2)避免爲 img 添加沒必要要的 title 屬性。(解釋:多餘的 title 影響看圖體驗,而且增長了頁面尺寸。)
(3) 添加 width 和 height 屬性,以免頁面抖動。
(4)有下載需求的圖片採用 img 標籤實現,無下載需求的圖片採用 CSS 背景圖實現。(解釋:1.產品 logo、用戶頭像、用戶產生的圖片等有潛在下載需求的圖片,以 img 形式實現,能方便用戶下載。2.無下載需求的圖片,好比:icon、背景、代碼使用的圖片等,儘量採用 CSS 背景圖實現。)
(5)原則上,img標籤內必須註明 alt 屬性。
(6)當img標籤外嵌套了<a>標籤,則必須註明 title 屬性。

6 表單

6.1 控件標題

(1)有文本標題的控件必須使用 label 標籤將其與其標題相關聯。(解釋:有兩種方式:1.將控件置於 label 內;2.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">

(2)表單外必須嵌套

標籤。

 

6.2 按鈕

(1)使用 button 元素時必須指明 type 屬性值。(解釋:button 元素的默認 type 爲 submit,若是被置於 form 元素中,點擊後將致使表單提交。爲顯示區分其做用方便理解,必須給出 type 屬性。)
示例:

<button type="submit">提交</button>
<button type="button">取消</button>

(2)儘可能不要使用按鈕類元素的 name 屬性。(解釋:因爲瀏覽器兼容性問題,使用按鈕的 name 屬性會帶來許多難以發現的問題。)
示例:

6.3 可訪問性

(1)當使用 JavaScript 進行表單提交時,若是條件容許,應使原生提交功能正常工做。(解釋:當瀏覽器 JS 運行錯誤或關閉 JS 時,提交功能將沒法工做。若是正確指定了 form 元素的 action 屬性和表單控件的 name 屬性時,提交仍可繼續進行。)
示例:

<form action="/login" method="post">
    <p><input name="username" type="text" placeholder="用戶名"></p>
    <p><input name="password" type="password" placeholder="密碼"></p>
</form>

(2)在針對移動設備開發的頁面時,根據內容類型指定輸入框的 type 屬性。(解釋:音頻應儘量覆蓋到以下格式:MP三、WAV、Ogg;視頻應儘量覆蓋到以下格式:MP四、WebM、Ogg。)
示例:

<input type="date">

7 多媒體

(1)當在現代瀏覽器中使用 audio 以及 video 標籤來播放音頻、視頻時,應當注意格式。(解釋:button 元素的默認 type 爲 submit,若是被置於 form 元素中,點擊後將致使表單提交。爲顯示區分其做用方便理解,必須給出 type 屬性。)
(2)在支持 HTML5 的瀏覽器中優先使用 audio 和 video 標籤來定義音視頻元素。
示例:

<audio controls>
    <source src="audio.mp3" type="audio/mpeg">
    <source src="audio.ogg" type="audio/ogg">
    <object width="100" height="50" data="audio.mp3">
        <embed width="100" height="50" src="audio.swf">
    </object>
</audio>

<video width="100" height="50" controls>
    <source src="video.mp4" type="video/mp4">
    <source src="video.ogg" type="video/ogg">
    <object width="100" height="50" data="video.mp4">
        <embed width="100" height="50" src="video.swf">
    </object>
</video>

(4)只在必要的時候開啓音視頻的自動播放。
(5)在 object 標籤內部提供指示瀏覽器不支持該標籤的說明。
示例:

<object width="100" height="50" data="something.swf">DO NOT SUPPORT THIS TAG</object>
相關文章
相關標籤/搜索