前端編碼規(guī)范

很久沒有更新文章了没咙。。千劈。實在是比較忙啊祭刚。。墙牌。從本身一個iOS開發(fā)涡驮,現(xiàn)在要兼顧前端、產(chǎn)品喜滨、維護等捉捅,每天都有不同的事,雖然學(xué)到了很多虽风,但是頭發(fā)也是越來越少了棒口。。辜膝。陌凳。
今天一個搞前端的哥們問我,有沒有前端編碼規(guī)范内舟,他們公司的太亂了合敦,很尷尬,于是就把我這篇拿出來分享一下验游,這些也是總結(jié)了前輩們的經(jīng)驗教訓(xùn)充岛,和一些大公司的開發(fā)規(guī)范修改出來的保檐,我們公司三個前端(我是半吊子,不算)崔梗,用起來感覺還是非常不錯的夜只。

如果有什么問題請大家留言指正,我會不斷的修正蒜魄,爭取拿出來一份合格的前端編碼規(guī)范懈玻。


1.本規(guī)范為前端開發(fā)人員編碼遵守寸莫,方便閱讀和后續(xù)交接人員快速入手。如有不當(dāng)請及時向管理人員指出修改。
2.本規(guī)范會不斷修訂毅人,如有好的建議請聯(lián)系制定人員育特,評估合理后即做修改戏售;
----2016.12.24 王克


基本準則

符合web標(biāo)準, 語義化html, 結(jié)構(gòu)霸旗、樣式、表現(xiàn)行為分離, 兼容性優(yōu)良. 頁面性能方面, 代碼要求簡潔明了有序, 盡可能的減小服務(wù)器負載, 保證最快的解析速度.


通用規(guī)范

1.所有頁面按照統(tǒng)一的格式來寫秕脓;
2.對所有后臺請求的返回結(jié)果做判斷空處理(保證在后臺請求失敗的情況下柒瓣,瀏覽器控制臺不會報錯);
3.所有功能模塊寫注釋吠架,詳見下面注釋規(guī)范芙贫;
4.處理邏輯一定要盡量簡化,抽取公共框架傍药,減少后期維護成本磺平;
5.tab鍵用兩個空格代替或用兩個空格縮進(務(wù)必);
6.代碼行之間盡量不要有空行怔檩,重大邏輯轉(zhuǎn)折、語法意義轉(zhuǎn)折蓄诽,方法分割除外薛训,適當(dāng)空行增強可讀性;
7.可使用 W3C HTML/CSS Validator 來驗證你的 HTML/CSS 代碼有效性;


文件仑氛、資源和目錄命名約定(適用于所有前端維護的內(nèi)容和相關(guān)目錄乙埃,(html, css, js, png, gif, jpg, ico)等)

1.字母一律小寫,必須是英文單詞或者漢語拼音锯岖,以英語單詞優(yōu)先介袜,多個單詞以連字符 - 連接。 只能出現(xiàn)小寫引文字母出吹,數(shù)字和連字符遇伞;
2.瀏覽器廣告攔截插件會將含有這些詞的作為廣告攔截: ad、ads捶牢、adv鸠珠、banner巍耗、sponsor、gg渐排、guangg炬太、guanggao等,頁面中盡量避免采用以上詞匯來命名驯耻;
3.文件命名總是以字母開頭而不是數(shù)字亲族,以特殊字符開頭命名的文件,一般都有特殊的含義與用處可缚,慎用霎迫。
4.需要對文件增加前后綴或特定的擴展名(比如 .min.js, .min.css),抑或一串前綴(比如 asdasd.main.min.css)城看。這種情況下女气,建議使用點分隔符來區(qū)分這些在文件名中帶有清晰意義的元數(shù)據(jù)。


HTML 規(guī)范

1.為每個HTML頁面的第一行添加標(biāo)準模式聲明(HTML5 doctype)测柠,確保在每個瀏覽器中擁有一致的展現(xiàn)炼鞠;

    <!DOCTYPE html>
    <html>
      <head>
      </head>
    </html>

2.明確聲明字符編碼,確保瀏覽器快速判斷頁面內(nèi)容的渲染方式轰胁,約定一致采用UTF-8編碼谒主。
3.IE 兼容模式。除非特殊需求赃阀,否則約定設(shè)置為edge霎肯,從而通知 IE 采用其所支持的最新的模式。

    <meta http-equiv="X-UA-Compatible" content="IE=Edge">

4.元素屬性順序榛斯。
HTML 屬性統(tǒng)一使用雙引號观游,且應(yīng)當(dāng)按照以下給出的順序依次排列,確保代碼的易讀性:

```
    - class
    - id 驮俗、 name
    - data-*
    - src懂缕、for、 type王凑、 href
    - title搪柑、alt
    - aria-*、 role
```

5.嵌套元素應(yīng)當(dāng)縮進一次索烹,即兩個空格工碾;
6.確保全部使用雙引號,不要使用單引號百姓;
7.不要省略可選的結(jié)束標(biāo)簽渊额,如:</li>,</body>,省略標(biāo)簽可能會導(dǎo)致一些問題;自閉合標(biāo)簽則無需閉合(如:img input br hr 等)。
8.腳本引用寫在 body 結(jié)束標(biāo)簽之前端圈;
9.盡量保證結(jié)構(gòu)焦读、表現(xiàn)、行為三者分離舱权,并盡量使三者之間沒有太多的交互和聯(lián)系矗晃。盡量在文檔和模板中只包含結(jié)構(gòu)性的 HTML;而將所有表現(xiàn)代碼宴倍,移入樣式表中张症;將所有動作行為,JS腳本之中鸵贬。
10.盡量不使用行內(nèi)樣式俗他;

    <style>.no-good {}</style>;

11.在每一個塊狀元素,列表元素和表格元素后阔逼,加上一新空白行兆衅,并對其子孫元素進行縮進。內(nèi)聯(lián)元素寫在一行內(nèi)嗜浮,塊狀元素還有列表和表格要另起一行羡亩。
12.任何時候都要盡量使用最少的標(biāo)簽并保持最小的復(fù)雜度,盡量避免多余的父元素危融。
13.盡量避免通過 JavaScript 生成的標(biāo)簽畏铆,它讓內(nèi)容變得不易查找、編輯吉殃,并且降低性能辞居。
14.重要圖片一定要加上alt屬性; 給重要的元素和截斷的元素加上title;

  1. heade 模板
    <!DOCTYPE html>
    <html lang="zh-cmn-Hans">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>Style Guide</title>
        <!-- 為搜索引擎提供搜索關(guān)鍵字 -->
        <meta name="keywords" content="150字符以內(nèi)">
        <!-- 為移動設(shè)備添加 viewport -->
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- iOS 圖標(biāo) -->
        <link rel="apple-touch-icon-precomposed" href="/apple-icon.png">
        <link rel="shortcut icon" href="path/to/favicon.ico">
    </head>

css規(guī)范

為了便于閱讀,css屬性書寫要遵循本規(guī)范蛋勺。
1.為了保證一致性和可擴展性瓦灶,每個聲明應(yīng)該用分號結(jié)束,每個聲明換行抱完;
2.當(dāng)使用特定瀏覽器帶有前綴的屬性時贼陶,通過縮進的方式,讓每個屬性的值在垂直方向?qū)R乾蛤,這樣便于多行編輯每界。

.selector {
  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
          box-shadow: 0 1px 2px rgba(0,0,0,.15);
}

3.屬性名的冒號后使用一個空格捅僵。出于一致性的原因家卖,
屬性和值(但屬性和冒號之間沒有空格)的之間始終使用一個空格。
4.每個規(guī)則之間始終有一個空行分隔庙楚。
5屬性選擇器或?qū)傩灾涤秒p引號(””)上荡,而不是單引號(”)括起來。
URI值(url())不要使用引號。
6.為了代碼的易讀性酪捡,在每個聲明塊的左花括號前添加一個空格叁征;右花括號要單獨成行。
7.不要在 rgb()逛薇、rgba()捺疼、hsl()、hsla() 或 rect() 值的內(nèi)部的逗號后面插入空格永罚。這樣利于從多個屬性值(既加逗號也加空格)中區(qū)分多個顏色值(只加逗號啤呼,不加空格)。
8.對于屬性值或顏色參數(shù)呢袱,省略小于 1 的小數(shù)前面的 0 (例如官扣,.5 代替 0.5;-.5px 代替 -0.5px)羞福。
9.與 <link> 標(biāo)簽相比惕蹄,@import 指令要慢很多,不光增加了額外的請求次數(shù)治专,還會導(dǎo)致不可預(yù)料的問題卖陵。所以要盡量使用<link>標(biāo)簽引入樣式;

css屬性順序

1.結(jié)構(gòu)性屬性:
display
position, left, top, right etc.
overflow, float, clear etc.
margin, padding
2.表現(xiàn)性屬性:
background, border etc.
font, text

例子:
    .header {
     /* 顯示屬性 */
     display || visibility
     list-style
     position
     top || right || bottom || left
     z-index
     clear
     float
    
     /* 自身屬性 */
     width
     max-width || min-width
     height
     max-height || min-height
     overflow || clip
     margin 
     padding
     outline
     border
     background
    
     /* 文本屬性 */
     color
     font
     text-overflow
     text-align
     text-indent
     line-height
     white-space
     vertical-align
     cursor
     content
    }

JavaScript規(guī)范

1.文件命名可讀性強看靠。文件夾赶促、文件的命名與命名空間應(yīng)能代表代碼功能,增強可讀性挟炬。
2.函數(shù)命名按照駝峰命名法鸥滨。

    function funName() {}

3.常量要全部大寫,變量駝峰命名:

     var VARIABLENAME  //常量
     var variableName    //變量

4.排版縮進采用統(tǒng)一的縮進方式排版代碼“妫縮進為2個空格婿滓。

    If(condition1 || condition2) {
      action1;
    } else if (condition3 && condition4) {
     action2;
    } else if (condition5
           && condition6
           && condition7
           && condition8) {
     action2;
    } else {
     default action;
    }

5.關(guān)鍵詞、條件括弧后面使用空格粥喜;運算操作符號兩側(cè)使用空格凸主;語句分割符‘,’后面使用空格;

    var name[空格]=[空格]value;
    if[空格](a,[空格]b) {
    }

6.左大括號"{"可以居行尾,右大括號"}"單獨占一行,居行首

    if (a && b) {
     }
  1. 句末必須使用分好結(jié)尾额湘;
    var fn = function () {
    };//這里沒有分號的話卿吐,腳本解析器會報錯!7婊嗡官!
    (function () {
       alert(1);
    })();

8.if、while毯焕、for衍腥、do語句的執(zhí)行體總是用"{"和"}"括起來

  1. 總是使用 var 來聲明變量。如不指定 var,變量將被隱式地聲明為全局變量婆咸,這將對變量難以控制竹捉。如果沒有聲明,變量處于什么定義域就變得不清(可以是在 Document 或 Window 中尚骄,也可以很容易地進入本地定義域)块差;
  2. 變量聲明可以只用一個 var 關(guān)鍵字聲明,多個變量用逗號隔開倔丈;賦值盡量寫在變量聲明當(dāng)中憾儒。
  3. 使用 === 精確的比較操作符,避免在判斷的過程中乃沙,由 JavaScript 的強制類型轉(zhuǎn)換所造成的錯誤(比較的雙方必須是同一類型才會有效)起趾;
  4. 在用if作判斷的時候。下列表達式統(tǒng)統(tǒng)返回 false:false, 0, undefined, null, NaN, ''(空字符串).
  5. 統(tǒng)一使用單引號(‘)警儒,不使用雙引號(“)。這在創(chuàng)建 HTML 字符串非常容易辨別蜀铲;

注釋規(guī)范

代碼注釋,永遠也不嫌多记劝,特別是在寫一些看似瑣碎的無關(guān)緊要的代碼時,由于記憶點不深刻厌丑,注釋就變得尤為重要了定欧。避免發(fā)生過一段時間回頭看自己的代碼不能立即明白作用;

1.文件注釋要標(biāo)明作者砍鸠、文件版本、創(chuàng)建/修改時間爷辱、重大版本修改記錄;
2.函數(shù)或者類等都要添加頭描述朦肘;
3.注釋的時候不止寫代碼都干了些什么饭弓,還要加上代碼為什么要這么寫,背后的考量是什么媒抠。當(dāng)然也可以加入所思考問題或是解決方案的鏈接地址。
4.代碼注釋中英文都可以夫嗓。

    /**
     * 簡述
     * 功能詳細描述
     *
     * @param <String> arg1 參數(shù)1
     * @param <Number> arg2 參數(shù)2冲秽,默認為0
     * @return <Boolean> 看xxx是否成功
     */
     function fooFunction (arg1, arg2) {
     }
  1. 單行注釋,寫在代碼上面;多行注釋應(yīng)有描述;
    /*
    * 注釋操作說明
    */
    for( var i = 0; i < 100; i++) {
    }

4.為了便于CSS 閱讀锉桑, css 大模塊時間使用區(qū)塊分割標(biāo)記;
/****** 注釋描述 ********/


制定參考:

  • 極客學(xué)院前端規(guī)范民轴;
  • 淘寶團隊前端規(guī)范;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瑰钮,一起剝皮案震驚了整個濱河市微驶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苟耻,老刑警劉巖扶檐,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異款筑,居然都是意外死亡,警方通過查閱死者的電腦和手機寻咒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門颈嚼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毛秘,“玉大人阻课,你說我怎么就攤上這事∧遥” “怎么了署驻?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵健霹,是天一觀的道長瓶蚂。 經(jīng)常有香客問我,道長瞳别,這世上最難降的妖魔是什么杭攻? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮兆解,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叼架。我一直安慰自己衣撬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布乍构。 她就那樣靜靜地躺著扛点,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陵究。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天仪召,我揣著相機與錄音松蒜,去河邊找鬼。 笑死秸苗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玖瘸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼璃诀,長吁一口氣:“原來是場噩夢啊……” “哼屯断!你這毒婦竟也來了侣诺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤趴久,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彼棍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳算,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年华匾,在試婚紗的時候發(fā)現(xiàn)自己被綠了机隙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡旭旭,死狀恐怖葱跋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娱俺,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布仲闽,位于F島的核電站僵朗,受9級特大地震影響屑彻,放射性物質(zhì)發(fā)生泄漏顶吮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一搏恤、第九天 我趴在偏房一處隱蔽的房頂上張望湃交。 院中可真熱鬧,春花似錦搞莺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岁歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刨裆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工瞬女, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留努潘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓报慕,卻偏偏與公主長得像压怠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菌瘫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 基本原則 結(jié)構(gòu)、樣式雇盖、行為分離 統(tǒng)一縮進(建議 兩個空格) 文件編碼統(tǒng)一 不帶BOM的UTF-8 一律使用小寫字母...
    KeKeMars閱讀 3,100評論 12 144
  • 為了編寫出更高可讀性崔挖,結(jié)構(gòu)更加清晰且冗余較少的代碼,前端工程師們總結(jié)出了一些前端的編碼規(guī)范狸相,它們涵蓋了前端的所有部...
    大春春閱讀 458評論 0 2
  • 作者:李靖原文地址:http://www.cnblogs.com/hustskyking/p/css-spec.h...
    IT程序獅閱讀 767評論 4 17
  • "字是門面書是屋"卷哩,我們不會去手寫代碼属拾,但是敲出來的代碼要好看将谊、有條理渐白,這還必須得有一點約束~ 團隊開發(fā)中,每個人...
    郝特么冷閱讀 262評論 0 1
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,375評論 2 36