【轉】Web前端開發規範文檔

規範目的:

  • 使開發流程更加規範化。css

通用規範:

  • TAB鍵用兩個空格代替(WINDOWSTAB鍵佔四個空格,LINUXTAB鍵佔八個空格)。html

  • CSS樣式屬性或者JAVASCRIPT代碼後加「;」方便壓縮工具「斷句」。java

  • 文件內容編碼均統一爲UTF-8jquery

  • CSSJAVASCRIPT中的非註釋類中文字符須轉換成unicode編碼使用, 以免編碼錯誤時亂碼顯示。web

文件規範:

  • 文件名用英文單詞,多個單詞用駝峯命名法。chrome

  • 一些瀏覽器會將含有這些詞的做爲廣告攔截:adadsadvbannersponsorggguanggguanggao等,文件命名、IDCLASS等全部命名避免以上詞彙。express

html書寫規範:

  • 爲每一個HTML頁面的第一行添加標準模式(standard mode)的聲明,確保在每一個瀏覽器中擁有一致的展示。數組

    1. <!DOCTYPE html>
    文檔類型聲明統一爲HTML5聲明類型,編碼統一爲UTF-8
    1. <meta charset="UTF-8">
    <HEAD>中添加信息。
    1. <meta name="author" content="smile@kang.cool">//做者
    2. <meta name="description" content="hello">//網頁描述
    3. <meta name="keywords" content="a,b,c">//關鍵字,「」分隔
    4. <meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT">//設定網頁的到期時間。一旦網頁過時,必須到服務器上從新調閱
    5. <meta http-equiv="Pragma" content="no-cache">//禁止瀏覽器從本地機的緩存中調閱頁面內容
    6. <meta http-equiv="Window-target" content="_top">//用來防止別人在框架裏調用你的頁面
    7. <meta http-equiv="Refresh" content="5;URL=http://kahn1990.com/">//跳轉頁面,5指時間停留5秒 網頁搜索機器人嚮導。用來告訴搜索機器人哪些頁面須要索引,哪些頁面不須要索引
    8. <meta name="robots" content="none">//content的參數有all,none,index,noindex,follow,nofollow,默認是all
    9. <link rel="Shortcut Icon" href="favicon.ico">//收藏圖標
    10. <meta http-equiv="Cache-Control" content="no-cache, must-revalidate">//網頁不會被緩存
    IE支持經過特定<meta>標籤來肯定繪製當前頁面所應該採用的IE版本。除非有強烈的特殊需求,不然最好是設置爲edge mode ,從而通知IE採用其所支持的最新的模式。
    1. <meta http-equiv="X-UA-Compatible" content="IE=Edge">

     

  • 非特殊狀況下CSS樣式文件外鏈至HEAD之間,JAVASCRIPT文件外鏈至頁面底部。瀏覽器

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <link rel="stylesheet" href="css/main.css">
    5. </head>
    6. <body>
    7. <!-- 邏輯代碼 -->
    8. <!-- 邏輯代碼底部 -->
    9. <script src="lib/jquery/jquery-2.1.1.min.js"></script>
    10. </body>
    11. </html>
    引入JAVASCRIPT庫文件,文件名須包含庫名稱及版本號及是否爲壓縮版。
    1. jQuery-1.8.3.min.js
    引入JAVASCRIPT插件, 文件名格式爲庫名稱+.+插件名稱。
    1. jQuery.cookie.js

     

  • HTML屬性應當按照如下給出的順序依次排列,來確保代碼的易讀性。緩存

    1. class
    2. id name
    3. data-*
    4. srcfor type href
    5. titlealt
    6. aria-*、 role
    編碼均遵循XHTML標準, 標籤屬性屬性命名由小寫英文、數字和_組成,且全部標籤必須閉合,屬性值必須用雙引號"", 避免使用中文拼音儘可能簡易並要求語義化。
    1. CLASS --> nHeadTitle --> CLASS遵循小駝峯命名法(little camel-case
    2. ID --> n_head_title --> ID遵循名稱+_
    3. NAME --> N_Head_Title --> NAME屬性命名遵循首個字母大寫+_
    4. <div class="nHeadTitle" id="n_head_title" name="N_Head_Title"></div>
    JAVASCRIPT獲取單個元素時,一般使用document.getElementById來獲取dom元素,document.getElementById兼容全部瀏覽器,但IE瀏覽器會混淆元素的IDNAME屬性,因此要區分IDNAME命名。
    1. <input type="text" name="test">
    2. <div id="test"></div>
    3. <button onclick="alert(document.getElementById('test').tagName)"></button>
    4. <!-- ie6下爲INPUT -->

     

  • 特殊符號應使用轉意符。

    1. < --> &lt;
    2. > --> &gt;
    3. 空格 --> &nbsp;

     

  • 含有描述性表單元素(INPUTTEXTAREA)添加LABEL

    1. <p>
    2. <label for="test">測試</label>
    3. <input type="text" id="test" />
    4. </p>

     

  • 多用無兼容性問題的HTML內置標籤, 好比SPANEMSTRONGOPTGROUPLABEL等,須要自定義HTML標籤屬性時,首先考慮是否存在已有的合適標籤可替換,若是沒有, 可以使用須以「data-」爲前綴來添加自定義屬性,避免使用其餘命名方式。

  • 語義化HTML

  • 儘量減小<DIV>嵌套。

  • 書寫連接地址時避免重定向。

    1. href="http://www.kahn1990.com/" //即在URL地址後面加「/

     

  • HTML中對於屬性的定義,確保所有使用雙引號,毫不要使用單引號

css書寫規範:

  • 爲了欺騙W3C的驗證工具,可將代碼分爲兩個文件,一個是針對全部瀏覽器,一個只針對IE。即將全部符合W3C的代碼寫到一個文件中,而一些IE中必須而又不能經過W3C驗證的代碼(如:cursor:hand;)放到另外一個文件中,再用下面的方法導入。

    1. <!-- 放置全部瀏覽器樣式-->
    2. <link rel="stylesheet" type="text/css" href="">
    3. <!-- 只放置IE必須,而不能經過w3c的-->
    4. <!--[if IE]
    5. <link rel="stylesheet" href="">
    6. <![endif]-->

     

  • CSS樣式新建或修改儘可能遵循如下原則。

    1. 根據新建樣式的適用範圍分爲三級:全站級、產品級、頁面級。
    2. 儘可能經過繼承和層疊重用已有樣式。
    3. 不要輕易改動全站級CSS。改動後,要通過全面測試。

     

  • CSS屬性顯示順序。

    1. 顯示屬性
    2. 元素位置
    3. 元素屬性
    4. 元素內容屬性
    CSS書寫順序。
    1. .header {
    2. /* 顯示屬性 */
    3. display || visibility
    4. list-style
    5. position top || right || bottom || left
    6. z-index
    7. clear
    8. float
    9. /* 自身屬性 */
    10. width max-width || min-width
    11. height max-height || min-height
    12. overflow || clip
    13. margin
    14. padding
    15. outline
    16. border
    17. background
    18. /* 文本屬性 */
    19. color
    20. font
    21. text-overflow
    22. text-align
    23. text-indent
    24. line-height
    25. white-space
    26. vertical-align
    27. cursor
    28. content
    29. };
    兼容多個瀏覽器時,將標準屬性寫在底部。
    1. -moz-border-radius: 15px; /* Firefox */
    2. -webkit-border-radius: 15px; /* SafariChrome */
    3. border-radius: 15px; /* Opera 10.5+, 以及使用了IE-CSS3IE瀏覽器 *//標準屬性

     

  • 使用選擇器時,命名比較短的詞彙或者縮寫的不容許直接定義樣式。

    1. .hd,.bd,.td{};//如這些命名
    可用上級節點進行限定。
    1. .recommend-mod .hd
    多選擇器規則之間換行,即當樣式針對多個選擇器時每一個選擇器佔一行。
    1. button.btn,
    2. input.btn,
    3. input[type="button"] {…};
    優化CSS選擇器。
    1. #header a { color: #444; };/*CSS選擇器是從右邊到左邊進行匹配*/
    瀏覽器將檢查整個文檔中的全部連接和每一個連接的父元素,並遍歷文檔樹去查找IDheader的祖先元素,若是找不到header將追溯到文檔的根節點,解決方法以下。
    1. 避免使用通配規則和相鄰兄弟選擇符、子選擇符,、後代選擇符、屬性選擇符等選擇器
    2. 不要限定id選擇符,如div#header(提權的除外)
    3. 不要限定類選擇器,如ul.recommend(提權的除外)
    4. 不要使用 ul li a 這樣長的選擇符
    5. 避免使用標籤子選擇符,如#header > li > a

     

  • 使用z-index屬性儘可能z-index的值不要超過150(通用組的除外),頁面中的元素內容的z-index不能超過10(提示框等模塊除外但維持在150如下),不容許直接使用(999~9999)之間大值。

  • 儘可能避免使用CSS Hack

    1. property:value; /* 全部瀏覽器 */
    2. +property:value; /* IE7 */
    3. _property:value; /* IE6 */
    4. *property:value; /* IE6/7 */
    5. property:value\9; /* IE6/7/8/9,即全部IE瀏覽器 */
    1. * html selector { }; /* IE6 */
    2. *:first-child+html selector { }; /* IE7 */
    3. html>body selector { }; /* 非IE6 */
    4. @-moz-document url-prefix() { }; /* firefox */
    5. @media all and (-webkit-min-device-pixel-ratio:0) { }; /* saf3+/chrome1+ */
    6. @media all and (-webkit-min-device-pixel-ratio:10000),not all and (-webkit-min-device-pixel-ratio:0) { }; /* opera */
    7. @media screen and (max-device-width: 480px) { }; /* iPhone/mobile webkit */
    避免使用低效的選擇器。
    1. body > * {…};
    2. ul > li > a {…};
    3. #footer > h3 {…};
    4. ul#top_blue_nav {…};
    5. #searbar span.submit a { … }; /* 反面示例 */

     

  • 六個不要三個避免一個使用。

    1. 不要在標籤上直接寫樣式
    2. 不要在CSS中使用expression
    3. 不要在CSS中使用@import
    4. 不要在CSS中使用!important
    5. 不要在CSS中使用「*」選擇符
    6. 不要將CSS樣式寫爲單行
    7. 避免使用filter
    8. 避免使用行內(inline)樣式
    9. 避免使用「*」設置{margin: 0; padding: 0;}
    10. 使用afteroverflow的方式清浮動

     

  • 減小使用影響性能的屬性。

    1. position:absolute;
    2. float:left;//如這些定位或浮動屬性
    減小在CSS中使用濾鏡表達式和圖片repeat, 尤爲在body當中,渲染性能極差, 若是須要用repeat的話, 圖片的寬或高不能少於8px

     

javaScript書寫規範:

  • 命名規範。

    1. 常量名
    2. -->所有大寫並單詞間用下劃線分隔
    3. -->如:CSS_BTN_CLOSETXT_LOADING
    4.  
    5. 對象的屬性或方法名
    6. -->小駝峯式(little camel-case
    7. -->如:initbindEventupdatePosition
    8. -->示例:Dialog.prototype = {
    9. init: function () {},
    10. bindEvent: function () {},
    11. updatePosition: function () {}
    12. };
    13. 類名(構造器)
    14. -->小駝峯式但首字母大寫
    15. -->如:CurrentDefaultConfig
    16. 函數名
    17. -->小駝峯式
    18. -->如:current()defaultConfig()
    19. 變量名
    20. -->小駝峯式
    21. -->如:currentdefaultConfig
    22. 私有變量名
    23. -->小駝峯式但須要用_開頭
    24. -->如:_current_defaultConfig
    25. 變量名的前綴
    26. -->續

     

  • 代碼格式。

    1. "()"先後須要跟空格
    2. "="先後須要跟空格
    3. ","後面須要跟空格
    4. JSON對象需格式化對象參數
    5. ifwhilefordo語句的執行體用"{}"括起來
    "{}"格式以下。
    1. if (a==1) {
    2. //代碼
    3. };
    避免額外的逗號。
    1. var arr = [1,2,3,];
    for-in循環體中必須用hasOwnProperty方法檢查成員是否爲自身成員,避免來自原型鏈上的污染。

     

  • 長語句可考慮斷行。

    1. TEMPL_SONGLIST.replace('{TABLE}', da['results'])
    2. .replace('{PREV_NUM}', prev)
    3. .replace('{NEXT_NUM}', next)
    4. .replace('{CURRENT_NUM}', current)
    5. .replace('{TOTAL_NUM}', da.page_total);
    爲了不和JSLint的檢驗機制衝突,「.」或「+」這類操做符放在行尾。
    1. TEMPL_SONGLIST.replace('{TABLE}', da['results']).
    2. replace('{PREV_NUM}', prev).
    3. replace('{NEXT_NUM}', next).
    4. replace('{CURRENT_NUM}', current).
    5. replace('{TOTAL_NUM}', da.page_total);
    若是模塊代碼中,使用其它全局變量想跳過JSLint的檢查,能夠在該文件中加入/*global*/聲明。
    1. /*global alert: true, console: true, top: true, setTimeout: true */

     

  • 使用嚴格的條件判斷符。用===代替==,用!==代替!=,避免掉入==形成的陷阱 在條件判斷時,這樣的一些值表示false。

    1. null
    2. undefinednull相等
    3. 字符串''
    4. 數字0
    5. NaN
    在==時,則會有一些讓人難以理解的陷阱。
    1. (function () {
    2. var undefined;
    3. undefined == null; // true
    4. 1 == true; //true
    5. 2 == true; // false
    6. 0 == false; // true
    7. 0 == ''; // true
    8. NaN == NaN;// false
    9. [] == false; // true
    10. [] == ![]; // true
    11. })();
    對於不一樣類型的 == 判斷,有這樣一些規則,順序自上而下:
    1. undefinednull相等
    2. 一個是number一個是string時,會嘗試將string轉換爲number
    3. 嘗試將boolean轉換爲number
    4. 01
    5. 嘗試將Object轉換成numberstring
    而這些取決於另一個對比量,即值的類型,因此對於0、空字符串的判斷,建議使用=== 。===會先判斷兩邊的值類型,類型不匹配時爲false

     

  • 下面類型的對象不建議用new構造。

    1. new Number
    2. new String
    3. new Boolean
    4. new Object //用{}代替
    5. new Array //用[]代替
    引用對象成員用obj.prop代替obj["prop"],除非屬性名是變量。

     

  • 從number到string的轉換。

    1. /** 推薦寫法*/
    2. var a = 1;
    3. typeof(a); //"number"
    4. console.log(a); //1
    5. var aa=a+'';
    6. typeof(aa); //"string"
    7. console.log(aa); //'1'
    8. /** 不推薦寫法*/
    9. new String(a)或a.toString()
    從string到number的轉換,使用parseInt,必須顯式指定第二個參數的進制。
    1. /** 推薦寫法*/
    2. var a = '1';
    3. var aa = parseInt(a,10);
    4. typeof(a); //"string"
    5. console.log(a); //'1'
    6. typeof(aa); //"number"
    7. console.log(aa); //1
    從float到integer的轉換。
    1. /** 推薦寫法*/
    2. Math.floor/Math.round/Math.ceil
    3. /** 不推薦寫法*/
    4. parseInt
    字符串拼接應使用數組保存字符串片斷,使用時調用join方法。避免使用++=的方式拼接較長的字符串,每一個字符串都會使用一個小的內存片斷,過多的內存片斷會影響性能。
    1. /**推薦的拼接方式arraypushjoin*/
    2. var str=[],
    3. list=['測試A','測試B'];
    4. for (var i=0 , len=list.length; i < len; i++) {
    5. str.push( '<div>'+ list[i] + '</div>');
    6. };
    7. console.log(str.join('')); //<div>測試A</div><div>測試B</div>
    8. /** 不推薦的拼接方式+=*/
    9. var str = '',
    10. list=['測試A','測試B'];
    11. for (var i = 0, len = list.length; i< len; i++) {
    12. str+='<div>' + list[i] + '</div>';
    13. };
    14. console.log(str); //<div>測試A</div><div>測試B</div>

     

  • 儘可能避免使用存在兼容性及消耗資源的方法或屬性。

    1. 不要使用withvoidevileval_rinnerText

     

  • 注重HTML分離, 減少reflow, 注重性能。

圖片規範:

  • 命名應用小寫英文數字_組合,便於團隊其餘成員理解。

    1. header_btn.gif
    2. header_btn2.gif
  • 頁面元素類圖片均放入img文件夾, 測試用圖片放於img/testimg文件夾,psd源圖放入img/psdimg文件夾。

  • 圖片格式僅限於gifpngjpg等。

  • png圖片作圖片時, 要求圖片格式爲png-8格式,若png-8實在影響圖片質量或其中有半透明效果, 請爲ie-6單獨定義背景,並儘可能避免使用半透明的png圖片。

  • 背景圖片請儘量使用sprite技術, 減少http請求。

註釋規範:

  • JAVASCRIPTCSS文件註釋須要標明做者、文件版本、建立/修改時間、重大版本修改記錄、函數描述、文件版本、建立或者修改時間、功能、做者等信息。

    1. /* * 註釋塊 */
    中間可添加以下信息。
    1. @file 文件名
    2. @addon 把一個函數標記爲另外一個函數的擴張,另外一個函數的定義不在源文件中
    3. @argument 用大括號中的自變量類型描述一個自變量
    4. @author 函數/類做者的姓名
    5. @base 若是類是繼承得來,定義提供的類名稱
    6. @class 用來給一個類提供描述,不能用於構造器的文檔中
    7. @constructor 描述一個類的構造器
    8. @deprecated 表示函數/類已被忽略
    9. @exception 描述函數/類產生的一個錯誤
    10. @exec @extends 表示派生出當前類的另外一個類
    11. @fileoverview 表示文檔塊將用於描述當前文件,這個標籤應該放在其它任何標籤以前
    12. @final 指出函數/類
    13. @ignore jsdoc忽視隨後的代碼
    14. @link 相似於@link標籤,用於鏈接許多其它頁面
    15. @member 定義隨後的函數爲提供的類名稱的一個成員
    16. @param 用大括號中的參數類型描述一個參數
    17. @private 表示函數/類爲私有,不該包含在生成的文檔中
    18. @requires 表示須要另外一個函數/類
    19. @return 描述一個函數的返回值
    20. @see 鏈接到另外一個函數/類
    21. @throws 描述函數/類可能產生的錯誤
    22. @type 指定函數/成員的返回類型
    23. @version 函數/類的版本號

     

開發及測試工具約定:

  • 編碼格式化,三碼統一。

  • 測試工具: 前期開發僅測試FireFox & IE6 & IE7 & IE8 & IE9 & Opera & Chrome & Safari

原文:http://kang.cool/modules/web_develop_standard/index.html

相關文章
相關標籤/搜索