前端代碼風(fēng)格規(guī)范

說(shuō)明

  • 版本:1.0.0
  • 上次修改時(shí)間:2020 年 4 月 29 日

寫(xiě)在前面

  • 本文檔適用于原生前端代碼的風(fēng)格樣式及 Vue 的風(fēng)格樣式揩魂,會(huì)在內(nèi)容中做具體的說(shuō)明
  • 部分內(nèi)容會(huì)與 HTML 規(guī)范蘸嘶、CSS 規(guī)范密浑、JavaScript 規(guī)范回梧、Vue 規(guī)范等規(guī)范有重復(fù)部分
  • 配套使用開(kāi)發(fā)工具VsCode中的Prettier - Code formatter插件作為工具
  • Vue 規(guī)范采用開(kāi)發(fā)工具VsCode中的Vetur
    插件作為工具
  • CSS 命名規(guī)范可參考BEM
  • 等級(jí)分為: - 【強(qiáng)制】:必須遵循的規(guī)則丁溅,會(huì)通過(guò) eslint 和 gitlab 等持續(xù)集成方式進(jìn)行檢查和限制 - 【強(qiáng)烈推薦】:有部分代碼編輯工具或插件工具來(lái)協(xié)助完成的標(biāo)準(zhǔn)快毛,如【prettier】【vscode】等 - 【推薦】:更好的協(xié)助開(kāi)發(fā)人員寫(xiě)出可讀性和可維護(hù)性高的代碼 - 【建議】:同【推薦】

HTML 代碼風(fēng)格

強(qiáng)制規(guī)則

1.使用正確的文檔類型【強(qiáng)制】

<!DOCTYPE html>

啟用 viewport 模式

<meta name="viewport" content="width=device-width, initial-scale=1">

啟用最新渲染模式

<meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">

啟用 UTF-8 編碼方式

<meta charset="UTF-8">

html 文檔使用中文

<html lang="zh-CN">

一個(gè)標(biāo)準(zhǔn)的 html 的初始文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">
  <title>Document</title>
</head>
<body>

</body>
</html>

2.使用小寫(xiě)元素名【強(qiáng)制】

// bad
<SECTION>
  <p>This is a paragraph.</p>
</SECTION>

// bad
<Section>
  <p>This is a paragraph.</p>
</SECTION>

// good
<section>
  <p>This is a paragraph.</p>
</section>

3.使用小寫(xiě)屬性名【強(qiáng)制】

// bad
<div CLASS="menu">

// good
<div class="menu">

4.空行和縮進(jìn)【強(qiáng)制】

請(qǐng)勿毫無(wú)理由地增加空行晤斩。

為了提高可讀性,請(qǐng)?jiān)黾涌招衼?lái)分隔大型或邏輯代碼塊宴霸。

為了提高可讀性囱晴,請(qǐng)?jiān)黾?code>兩個(gè)空格的縮進(jìn)膏蚓。(如果是 jQuery 為主體依賴的項(xiàng)目則采用四個(gè)空格,例如:SGS9.0 之前的客戶端站點(diǎn)開(kāi)發(fā))

請(qǐng)勿使用沒(méi)有必要的空行和縮進(jìn)畸写。沒(méi)有必要在短的和相關(guān)項(xiàng)目之間使用空行驮瞧,也沒(méi)有必要縮進(jìn)每個(gè)元素

此規(guī)則同樣適用于 CSS、JavaScript艺糜、Vue 腳本等

<!-- bad -->
<body>

  <h1>Famous Cities</1>

  <h2>Tokyo</h2>

  <p>
    Tokyo is the capital of Japan, the center of the Greater Tokyo Area,
    and the most populous metropolitan area in the world.
    It is the seat of the Japanese government and the Imperial Palace,
    and the home of the Japanese Imperial Family.
  </p>

</body>

<!-- 表格示例 good -->
<table>
  <tr>
    <th>Name</th>
    <th>Description</th>
  <tr>
  <tr>
    <td>A</td>
    <td>Description of A</td>
  <tr>
  <tr>
    <td>B</td>
    <td>Description of B</td>
  <tr>
</table>

<!-- 列表示例 good -->
<ol>
  <li>LondonA</li>
  <li>Paris</li>
  <li>Tokyo</li>
</ol>

5.對(duì)于無(wú)需自閉合的標(biāo)簽剧董,必須閉合【強(qiáng)制】

<!-- bad -->
<input type="text" name="title">

<!-- good -->
<input type="text" name="title" />

6.文件擴(kuò)展名【強(qiáng)制】

HTML 文件名應(yīng)該使用擴(kuò)展名 .html(而不是 .htm)

強(qiáng)烈推薦規(guī)則

1.必需的屬性【強(qiáng)烈推薦】

請(qǐng)始終對(duì)圖像使用 alt 屬性幢尚。當(dāng)圖像無(wú)法顯示時(shí)該屬性很重要破停。

<img src="html5.gif" alt="HTML5" />

2.避免長(zhǎng)代碼行【強(qiáng)烈推薦】

當(dāng)使用 HTML 編輯器時(shí),通過(guò)左右滾動(dòng)來(lái)閱讀 HTML 代碼很不方便尉剩。

請(qǐng)盡量避免代碼行超過(guò) 80 個(gè)字符真慢。(CSS、JavaScript理茎、Vue 腳本同樣推薦)

3.標(biāo)簽的使用應(yīng)盡量簡(jiǎn)潔黑界,減少不必要的標(biāo)簽【強(qiáng)烈推薦】

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

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

4.建議不要在標(biāo)簽上直接使用 style 樣式【強(qiáng)烈推薦】

<!-- bad -->
<div style="width:300px;height:200px;font-size:14px;"></div>

推薦及建議規(guī)則

1.樣式表【推薦】

請(qǐng)使用簡(jiǎn)單的語(yǔ)法來(lái)鏈接樣式表(type 屬性不是必需的)

<link rel="stylesheet" href="styles.css">

2.在 HTML 中加載 JavaScript【推薦】

請(qǐng)使用簡(jiǎn)單的語(yǔ)法來(lái)加載外部腳本(type 屬性不是必需的)

<script src="myscript.js">

CSS/SASS/SCSS 代碼風(fēng)格

強(qiáng)制規(guī)則

1.規(guī)則默認(rèn)換行【強(qiáng)制】

/* bad */
p.into {font-family:"Verdana"; font-size:16em;}

/* good */
body {
  background-color: lightgrey;
  font-family: "Arial Black", Helvetica, sans-serif;
  font-size: 16em;
  color: black;
}

2.每條樣式聲明后面都加上那個(gè)分號(hào)【強(qiáng)制】

3.禁止使用 @import 引入 CSS 文件【強(qiáng)制】

4.類名中的字母一律小寫(xiě),不使用駝峰皂林,只使用字母朗鸠、數(shù)字以及“-”【強(qiáng)制】

駝峰寫(xiě)法或下劃線分割單詞的寫(xiě)法都存在一個(gè)問(wèn)題,我們的主觀無(wú)法判斷單詞的分割础倍。比如yellowgreen這個(gè)單詞烛占,如果使用分單詞的寫(xiě)法可能被寫(xiě)成yellowGreenyello_green,造成風(fēng)格不統(tǒng)一

/* bad */
.mapContainer {}
.MAPCONTAINER {}

/* good */
.map-container {}
.map-container1 {}

5.類名使用完整英文單詞或抽掉空格的英文詞組【強(qiáng)制】

/* bad */
.konnichiwa {} /* 非英文單詞會(huì)導(dǎo)致大家無(wú)法正常閱讀 */
.modl {} /* 每個(gè)人的縮寫(xiě)未必一致沟启,會(huì)造成不統(tǒng)一 */
.hello-world {} /* 類名請(qǐng)只使用一個(gè)沒(méi)有分隔[-_]的詞 */

/* good */
.module {}
.helloworld {}

強(qiáng)烈推薦規(guī)則

1.大括號(hào)與選擇器之間留空忆家,冒號(hào)后面留空,注釋內(nèi)外前后留空【強(qiáng)烈推薦】

/* 我是注釋 */
div { /* 我是注釋 */ }
span {
  color: red; /* 我是注釋 */
}

2.多個(gè)選擇器使用逗號(hào)隔開(kāi)時(shí)寫(xiě)在不同的行德迹,大括號(hào)不要另起一行【強(qiáng)烈推薦】

div,
span {
  color: red;
  font-size: 12px;
}

3.用逗號(hào)分隔的多個(gè)樣式值寫(xiě)成多行【強(qiáng)烈推薦】

.block {
  box-shadow: 0 0 0 rgba(#000, 0.1),
              1px 1px 0 rgba(#000, 0.2),
              2px 2px 0 rgba(#000, 0.3),
              3px 3px 0 rgba(#000, 0.4),
              4px 4px 0 rgba(#000, 0.5);
}

4.16 進(jìn)制顏色值中的字母統(tǒng)一小寫(xiě)【強(qiáng)烈推薦】

/* bad */
color: "#FFFFFF";

/* good */
color: "#ffffff";

5.有且僅當(dāng)有層級(jí)關(guān)系時(shí)使用“-”連接芽卿,比如組件內(nèi)的元素類名采用組件名“-”子類名的形式【強(qiáng)烈推薦】

<div class="uploader">
  <input type="text" class="uploader-text" />
  <input type="button" class="uploader-button" />
</div>

選擇器在 CSS 中應(yīng)該平行地定義,以便降低優(yōu)先級(jí)胳搞,便于覆寫(xiě)

.uploader {}
.uploader-text {}
.uploader-button {}

6.書(shū)寫(xiě)順序【強(qiáng)烈推薦】

定位屬性:position display float left top right bottom overflow clear z-index

自身屬性:width height margin padding border background

文字樣式:font-family font-size font-style font-weight font-varient color

文本屬性:text-align vertical-align text-wrap text-transform text-indent text-decoration letter-spacing word-spacing white-space text-overflow

css3 中新增屬性:content box-shadow border-radius transform

7.盡量使用縮寫(xiě)屬性【強(qiáng)烈推薦】

/* bad */
.list-box {
  padding-bottom: 10px;
  padding-top: 20px;
  padding-left: 30px;
  padding-right: 40px;
}

/* good */
.list-box {
  padding: 20px 40px 30px 10px;
}

推薦及建議規(guī)則

1.避免使用 ID 選擇器【推薦】

權(quán)重太高卸例,不易維護(hù)

2.保持結(jié)構(gòu)靈活性【推薦】

我們的設(shè)計(jì)應(yīng)該盡可能地讓樣式可以用于更多標(biāo)簽

<style>
.section {}
.section-head {}
.section-body {}
</style>
<div class="section">
  <div class="section-head"></div>
  <div class="section-body"></div>
</div>
<dl class="section">
  <dt class="section-head"></dt>
  <dd class="section-body"></dd>
</dl>

甚至可以任意調(diào)整結(jié)構(gòu)

<style>
.article {}
.article-main {}
.article-title {}
</style>
<div class="article">
  <div class="article-main">
    <div class="article-title">
      <!-- ... -->
    </div>
    <!-- ... -->
  </div>
</div>
<div class="article">
  <div class="article-title">
    <!-- ... -->
  </div>
  <div class="article-main">
    <!-- ... -->
  </div>
</div>

參考鏈接

Vue 風(fēng)格指南

HTML(5) 樣式指南和代碼約定

餓了么前端風(fēng)格指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肌毅,隨后出現(xiàn)的幾起案子筷转,更是在濱河造成了極大的恐慌,老刑警劉巖芽腾,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旦装,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡摊滔,警方通過(guò)查閱死者的電腦和手機(jī)阴绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)店乐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呻袭,你說(shuō)我怎么就攤上這事眨八。” “怎么了左电?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵廉侧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我篓足,道長(zhǎng)段誊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任栈拖,我火速辦了婚禮连舍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涩哟。我一直安慰自己索赏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布贴彼。 她就那樣靜靜地躺著潜腻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪器仗。 梳的紋絲不亂的頭發(fā)上融涣,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音青灼,去河邊找鬼暴心。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杂拨,可吹牛的內(nèi)容都是我干的专普。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弹沽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼檀夹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起策橘,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炸渡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后丽已,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚌堵,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吼畏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片督赤。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泻蚊,靈堂內(nèi)的尸體忽然破棺而出躲舌,到底是詐尸還是另有隱情,我是刑警寧澤性雄,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布没卸,位于F島的核電站,受9級(jí)特大地震影響秒旋,放射性物質(zhì)發(fā)生泄漏约计。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一滩褥、第九天 我趴在偏房一處隱蔽的房頂上張望病蛉。 院中可真熱鬧炫加,春花似錦瑰煎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赋铝,卻和暖如春插勤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背革骨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工农尖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人良哲。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像筑凫,于是被迫代替她去往敵國(guó)和親滑沧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 更新時(shí)間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范巍实,適用于主要的Python發(fā)行版中組成標(biāo)準(zhǔn)庫(kù)的Pytho...
    超net閱讀 5,862評(píng)論 0 15
  • JavaScript編碼規(guī)范 1 前言 2 代碼風(fēng)格 2.1 文件 2.2 結(jié)構(gòu) 2.2.1 縮進(jìn) 2.2.2 空...
    江湖相望知冷暖閱讀 449評(píng)論 0 0
  • JavaScript編碼規(guī)范 1 前言 [2 代碼風(fēng)格] [2.1 文件] [2.2 結(jié)構(gòu)] [2.2.1 縮進(jìn)]...
    憶飛閱讀 1,158評(píng)論 1 2
  • 介紹 愚蠢的使用一致性是無(wú)知的怪物(A Foolish Consistency is the Hobgoblin ...
    slords閱讀 1,976評(píng)論 0 2
  • 2017.12.18 佳哥說(shuō): 感情這東西滓技,感覺(jué)上來(lái)時(shí),連幼兒園的都不放過(guò)棚潦。 2018年5月22日 佳哥: 我擦令漂,...
    一度佳閱讀 142評(píng)論 0 0