編碼規(guī)范 by @littleyu

編寫靈活、穩(wěn)定、高質(zhì)量的 HTML 和 CSS 代碼的規(guī)范。


------HTML------

語法

  • 用兩個空格來代替制表符(tab) -- 這是唯一能保證在所有環(huán)境下獲得一致展現(xiàn)的方法(不過現(xiàn)在的編輯器都可以改tab為兩個空格)。
  • 嵌套元素應(yīng)當(dāng)縮進(jìn)一次(即兩個空格)。
  • 對于屬性的定義,確保全部使用雙引號,絕不要使用單引號。
  • 不要在自閉合(self-closing)元素的尾部添加斜線 -- HTML5 規(guī)范中明確說明這是可選的。
  • 不要省略可選的結(jié)束標(biāo)簽(closing tag)(例如,</li></body>)。
<!DOCTYPE html>
<html>
  <head>
    <title>Page title</title>
  </head>
  <body>
    <img src="images/company-logo.png" alt="Company">
    <h1 class="hello-world">Hello, world!</h1>
  </body>
</html>

語言屬性

根據(jù) HTML5 規(guī)范:

強烈建議為 html 根元素指定 lang 屬性,從而為文檔設(shè)置正確的語言。這將有助于語音合成工具確定其所應(yīng)該采用的發(fā)音,有助于翻譯工具確定其翻譯時所應(yīng)遵守的規(guī)則等等。

更多關(guān)于 lang 屬性的知識可以從 此規(guī)范 中了解。

這里列出了語言代碼表。

//推薦使用屬性值 cmn-Hans-CN(簡體, 中國大陸),但是考慮瀏覽器和操作系統(tǒng)的兼容性,目前仍然使用 zh-CN 屬性值
<html lang="zh-CN">
  <!-- ... -->
</html>
更多關(guān)于 Languages Tags :

W3C Language tags in HTML and XML
網(wǎng)頁頭部的聲明應(yīng)該是用 lang=”zh” 還是 lang=”zh-cn”?

HTML代碼大小寫

HTML標(biāo)簽名、類名、標(biāo)簽屬性和大部分屬性值統(tǒng)一用小寫

/* Bad */
<div class="DEMO"></div>
<DIV CLASS="DEMO"></DIV>

/* Good*/
<div class="demo"></div>

特殊字符引用

文本可以和字符引用混合出現(xiàn)。這種方法可以用來轉(zhuǎn)義在文本中不能合法出現(xiàn)的字符。

在 HTML 中不能使用小于號 “<” 和大于號 “>”特殊字符,瀏覽器會將它們作為標(biāo)簽解析,若要正確顯示,在 HTML 源代碼中使用字符實體

/* Bad */
<a href="#">more>></a>

/* Good*/
<a href="#">more&gt;&gt;</a>

更多關(guān)于符號引用:#Character references

純數(shù)字輸入框

使用 type="tel" 而不是 type="number"

<input type="tel">

IE 兼容模式

IE 支持通過特定的 <meta> 標(biāo)簽來確定繪制當(dāng)前頁面所應(yīng)該采用的 IE 版本。除非有強烈的特殊需求,否則最好是設(shè)置為 edge mode,從而通知 IE 采用其所支持的最新的模式。

閱讀這篇 stack overflow 上的文章可以獲得更多有用的信息。

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

字符編碼(一般編輯器都能自動生成~)

通過明確聲明字符編碼,能夠確保瀏覽器快速并容易的判斷頁面內(nèi)容的渲染方式。這樣做的好處是,可以避免在 HTML 中使用字符實體標(biāo)記(character entity),從而全部與文檔編碼一致(一般采用 UTF-8 編碼)。

<head>
  <meta charset="UTF-8">
</head>

單行注釋

一般用于簡單的描述,如某些狀態(tài)描述、屬性描述等

注釋內(nèi)容前后各一個空格字符,注釋位于要注釋代碼的上面,單獨占一行

/* Bad */
<div>...</div><!-- Comment Text --> 
    
<div><!-- Comment Text -->
    ...
</div>


/* Good*/
<!-- Comment Text -->
<div>...</div>

模塊注釋

一般用于描述模塊的名稱以及模塊開始與結(jié)束的位置

注釋內(nèi)容前后各一個空格字符, 表示模塊開始, 表示模塊結(jié)束,模塊與模塊之間相隔一行

/* Bad */
<!-- S Comment Text A -->
<div class="mod_a">
    ...
</div>
<!-- E Comment Text A -->
<!-- S Comment Text B -->   
<div class="mod_b">
    ...
</div>
<!-- E Comment Text B -->


/* Good*/
<!-- S Comment Text A -->   
<div class="mod_a">
    ...
</div>
<!-- E Comment Text A -->
    
<!-- S Comment Text B -->   
<div class="mod_b">
    ...
</div>
<!-- E Comment Text B -->

嵌套模塊注釋

當(dāng)模塊注釋內(nèi)再出現(xiàn)模塊注釋的時候,為了突出主要模塊,嵌套模塊不再使用

<!-- S Comment Text -->
<!-- E Comment Text -->
而改用
<!-- /Comment Text -->
注釋寫在模塊結(jié)尾標(biāo)簽底部,單獨一行。
<!-- S Comment Text A -->
<div class="mod_a">
        
    <div class="mod_b">
        ...
    </div>
    <!-- /mod_b -->
        
    <div class="mod_c">
        ...
    </div>
    <!-- /mod_c -->
        
</div>
<!-- E Comment Text A -->

引入 CSS 和 JavaScript 文件

根據(jù) HTML5 規(guī)范,在引入 CSS 和 JavaScript 文件時一般不需要指定 type 屬性,因為 text/csstext/javascript 分別是它們的默認(rèn)值。

HTML5 spec links
<!-- External CSS -->
<link rel="stylesheet" href="code-guide.css">

<!-- In-document CSS -->
<style>
  /* ... */
</style>

<!-- JavaScript -->
<script src="code-guide.js"></script>

實用為王

盡量遵循 HTML 標(biāo)準(zhǔn)和語義,但是不要以犧牲實用性為代價。任何時候都要盡量使用最少的標(biāo)簽并保持最小的復(fù)雜度。
屬性順序
HTML 屬性應(yīng)當(dāng)按照以下給出的順序依次排列,確保代碼的易讀性。

  • class
  • id, name
  • data-*
  • src, for, type, href, value
  • title, alt
  • role, aria-*

class 用于標(biāo)識高度可復(fù)用組件,因此應(yīng)該排在首位。id 用于標(biāo)識具體組件,應(yīng)當(dāng)謹(jǐn)慎使用(例如,頁面內(nèi)的書簽),因此排在第二位。

<a class="..." id="..." data-toggle="modal" href="#">
  Example link
</a>

<input class="form-control" type="text">

<img src="..." alt="...">

布爾(boolean)型屬性

布爾型屬性可以在聲明時不賦值。XHTML 規(guī)范要求為其賦值,但是 HTML5 規(guī)范不需要。

更多信息請參考 WhatWG section on boolean attributes

元素的布爾型屬性如果有值,就是 true,如果沒有值,就是 false。

如果一定要為其賦值的話,請參考 WhatWG 規(guī)范:

如果屬性存在,其值必須是空字符串或 [...] 屬性的規(guī)范名稱,并且不要在首尾添加空白符。

簡單來說,就是不用賦值。

<input type="text" disabled>

<input type="checkbox" value="1" checked>

<select>
  <option value="1" selected>1</option>
</select>

JavaScript 生成的標(biāo)簽

通過 JavaScript 生成的標(biāo)簽讓內(nèi)容變得不易查找、編輯,并且降低性能。能避免時盡量避免。


------圖片------

常見的圖片格式有 GIF、PNG8、PNG24、JPEG、WEBP,根據(jù)圖片格式的特性和場景需要選取適合的圖片格式。

內(nèi)容圖

內(nèi)容圖多以商品圖等照片類圖片形式存在,顏色較為豐富,文件體積較大

  • 優(yōu)先考慮 JPEG 格式,條件允許的話優(yōu)先考慮 WebP 格式
  • 盡量不使用PNG格式,PNG8 色位太低,PNG24 壓縮率低,文件體積大

背景圖

背景圖多為圖標(biāo)等顏色比較簡單、文件體積不大、起修飾作用的圖片

  • PNG 與 GIF 格式,優(yōu)先考慮使用 PNG 格式,PNG格式允許更多的顏色并提供更好的壓縮率
  • 圖像顏色比較簡單的,如純色塊線條圖標(biāo),優(yōu)先考慮使用 PNG8 格式,避免不使用 JPEG 格式
  • 圖像顏色豐富而且圖片文件不太大的(40KB 以下)或有半透明效果的優(yōu)先考慮 PNG24 格式
  • 圖像顏色豐富而且文件比較大的(40KB - 200KB)優(yōu)先考慮 JPEG 格式
  • 條件允許的,優(yōu)先考慮 WebP 代替 PNG 和 JPEG 格式

圖片大小

中國普通家庭的寬帶基本能達(dá)到8Mbps,實際速率大約為500—900KB/s,全國3G/4G用戶占有比超過了50%,為了保證圖片能更好地加載展示給用戶看,團(tuán)隊約定:

PC平臺單張的圖片的大小不應(yīng)大于 200KB。
移動平臺單張的圖片的大小不應(yīng)大于 100KB。
(圖片的大小約定標(biāo)準(zhǔn)隨全國網(wǎng)速的改變而改變)

圖片質(zhì)量

  • 上線的圖片都應(yīng)該經(jīng)過壓縮處理,壓縮后的圖片不應(yīng)該出現(xiàn)肉眼可感知的失真區(qū)域
  • 60質(zhì)量的JPEG格式圖片與質(zhì)量大于60的相比,肉眼已看不出明顯的區(qū)別,因此保存 JPEG 圖的時候,質(zhì)量一般控制在60,若保真度要求高的圖片可適量提高到 80,圖片大小控制在 200KB 以內(nèi)

圖片引入

HTML 中圖片引入不需添加 width、height 屬性,alt 屬性應(yīng)該寫上
CSS 中圖片引入不需要引號

/* Bad */
<img src="" width="" height="" >
// CSS 中圖片引入不需要引號
.jdc {
    background-image: url(icon.png);
}

/* Good*/
<img src="" alt="" >

CSS Sprites 使用建議

  • 適合使用頻率高更新頻率低的小圖標(biāo)
  • 盡量不留太多的空白
  • 體積較大的圖片不合并
  • 確保要合并的小圖坐標(biāo)數(shù)值和合并后的 Sprites 圖尺寸均為偶數(shù)

Data URIs(base64編碼)使用建議

  • 適合更新頻率高的小圖片,如某些具備自定義功能的標(biāo)題icon等
  • 轉(zhuǎn)換成 Base64 編碼的圖片應(yīng)小于 2KB
  • 移動端不使用 Base64 編碼
  • 要兼容 IE6/IE7 的不使用

------CSS------

語法

  • 用兩個空格來代替制表符(tab) -- 這是唯一能保證在所有環(huán)境下獲得一致展現(xiàn)的方法。
  • 為選擇器分組時,將單獨的選擇器單獨放在一行。
  • 為了代碼的易讀性,在每個聲明塊的左花括號前添加一個空格。
  • 聲明塊的右花括號應(yīng)當(dāng)單獨成行。
  • 每條聲明語句的 : 后應(yīng)該插入一個空格。
  • 為了獲得更準(zhǔn)確的錯誤報告,每條聲明都應(yīng)該獨占一行。
  • 所有聲明語句都應(yīng)當(dāng)以分號結(jié)尾。最后一條聲明語句后面的分號是可選的,但是,如果省略這個分號,你的代碼可能更易出錯。
  • 對于以逗號分隔的屬性值,每個逗號后面都應(yīng)該插入一個空格(例如,box-shadow)。
  • 不要在 rgb()、rgba()、hsl()、hsla()rect() 值的內(nèi)部的逗號后面插入空格。這樣利于從多個屬性值(既加逗號也加空格)中區(qū)分多個顏色值(只加逗號,不加空格)。
  • 對于屬性值或顏色參數(shù),省略小于 1 的小數(shù)前面的 0 (例如,.5 代替 0.5;-.5px 代替 -0.5px)。
  • 十六進(jìn)制值應(yīng)該全部小寫,例如,#fff。在掃描文檔時,小寫字符易于分辨,因為他們的形式更易于區(qū)分。
  • 盡量使用簡寫形式的十六進(jìn)制值,例如,用 #fff 代替 #ffffff。
  • 為選擇器中的屬性添加雙引號,例如,input[type="text"]只有在某些情況下是可選的,但是,為了代碼的一致性,建議都加上雙引號。
  • 避免為 0 值指定單位,例如,用 margin: 0; 代替 margin: 0px;。

對于這里用到的術(shù)語有疑問嗎?請參考 Wikipedia 上的 syntax section of the Cascading Style Sheets article。

/* Bad CSS */
.selector, .selector-secondary, .selector[type=text] {
  padding:15px;
  margin:0px 0px 15px;
  background-color:rgba(0, 0, 0, 0.5);
  box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF
}

/* Good CSS */
.selector,
.selector-secondary,
.selector[type="text"] {
  padding: 15px;
  margin-bottom: 15px;
  background-color: rgba(0,0,0,.5);
  box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;
}

聲明順序

相關(guān)的屬性聲明應(yīng)當(dāng)歸為一組,并按照下面的順序排列:

    1. Positioning
    1. Box model
    1. Typographic
    1. Visual

由于定位(positioning)可以從正常的文檔流中移除元素,并且還能覆蓋盒模型(box model)相關(guān)的樣式,因此排在首位。盒模型排在第二位,因為它決定了組件的尺寸和位置。

其他屬性只是影響組件的內(nèi)部(inside)或者是不影響前兩組屬性,因此排在后面。

完整的屬性列表及其排列順序請參考 Recess

.declaration-order {
  /* Positioning */
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;

  /* Box-model */
  display: block;
  float: right;
  width: 100px;
  height: 100px;

  /* Typography */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  color: #333;
  text-align: center;

  /* Visual */
  background-color: #f5f5f5;
  border: 1px solid #e5e5e5;
  border-radius: 3px;

  /* Misc */
  opacity: 1;
}

不要使用 @import

<link> 標(biāo)簽相比,@import 指令要慢很多,不光增加了額外的請求次數(shù),還會導(dǎo)致不可預(yù)料的問題。替代辦法有以下幾種:

  • 使用多個 <link> 元素
  • 通過 Sass 或 Less 類似的 CSS 預(yù)處理器將多個 CSS 文件編譯為一個文件
  • 通過 Rails、Jekyll 或其他系統(tǒng)中提供過 CSS 文件合并功能

請參考 Steve Souders 的文章了解更多知識。

<!-- Use link elements -->
<link rel="stylesheet" href="core.css">

<!-- Avoid @imports -->
<style>
  @import url("more.css");
</style>

媒體查詢(Media query)的位置

將媒體查詢放在盡可能相關(guān)規(guī)則的附近。不要將他們打包放在一個單一樣式文件中或者放在文檔底部。如果你把他們分開了,將來只會被大家遺忘。下面給出一個典型的實例。

.element { ... }
.element-avatar { ... }
.element-selected { ... }

@media (min-width: 480px) {
  .element { ...}
  .element-avatar { ... }
  .element-selected { ... }
}

帶前綴的屬性

當(dāng)使用特定廠商的帶有前綴的屬性時,通過縮進(jìn)的方式,讓每個屬性的值在垂直方向?qū)R,這樣便于多行編輯。

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

單行規(guī)則聲明

對于只包含一條聲明的樣式,為了易讀性和便于快速編輯,建議將語句放在同一行。對于帶有多條聲明的樣式,還是應(yīng)當(dāng)將聲明分為多行。

這樣做的關(guān)鍵因素是為了錯誤檢測 -- 例如,CSS 校驗器指出在 183 行有語法錯誤。如果是單行單條聲明,你就不會忽略這個錯誤;如果是單行多條聲明的話,你就要仔細(xì)分析避免漏掉錯誤了。

/* Single declarations on one line */
.span1 { width: 60px; }
.span2 { width: 140px; }
.span3 { width: 220px; }

/* Multiple declarations, one per line */
.sprite {
  display: inline-block;
  width: 16px;
  height: 15px;
  background-image: url(../img/sprite.png);
}
.icon           { background-position: 0 0; }
.icon-home      { background-position: 0 -20px; }
.icon-account   { background-position: 0 -40px; }

簡寫形式的屬性聲明

在需要顯示地設(shè)置所有值的情況下,應(yīng)當(dāng)盡量限制使用簡寫形式的屬性聲明。常見的濫用簡寫屬性聲明的情況如下:

  • padding
  • margin
  • font
  • background
  • border
  • border-radius

大部分情況下,我們不需要為簡寫形式的屬性聲明指定所有值。例如,HTML 的 heading 元素只需要設(shè)置上、下邊距(margin)的值,因此,在必要的時候,只需覆蓋這兩個值就可以。過度使用簡寫形式的屬性聲明會導(dǎo)致代碼混亂,并且會對屬性值帶來不必要的覆蓋從而引起意外的副作用。

在 MDN(Mozilla Developer Network)上一篇非常好的關(guān)于shorthand properties 的文章,對于不太熟悉簡寫屬性聲明及其行為的用戶很有用。

/* Bad example */
.element {
  margin: 0 0 10px;
  background: red;
  background: url("image.jpg");
  border-radius: 3px 3px 0 0;
}

/* Good example */
.element {
  margin-bottom: 10px;
  background-color: red;
  background-image: url("image.jpg");
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}

Less 和 Sass 中的嵌套

避免不必要的嵌套。這是因為雖然你可以使用嵌套,但是并不意味著應(yīng)該使用嵌套。只有在必須將樣式限制在父元素內(nèi)(也就是后代選擇器),并且存在多個需要嵌套的元素時才使用嵌套。

擴展閱讀:

// Without nesting
.table > thead > tr > th { … }
.table > thead > tr > td { … }

// With nesting
.table > thead > tr {
  > th { … }
  > td { … }
}

Less 和 Sass 中的操作符

為了提高可讀性,在圓括號中的數(shù)學(xué)計算表達(dá)式的數(shù)值、變量和操作符之間均添加一個空格。

// Bad example
.element {
  margin: 10px 0 @variable*2 10px;
}

// Good example
.element {
  margin: 10px 0 (@variable * 2) 10px;
}

class 命名

class 名稱中只能出現(xiàn)小寫字符和破折號(dashe)(不是下劃線,也不是駝峰命名法)。破折號應(yīng)當(dāng)用于相關(guān) class 的命名(類似于命名空間)(例如,.btn.btn-danger)。
避免過度任意的簡寫。.btn 代表 button,但是 .s 不能表達(dá)任何意思。
class 名稱應(yīng)當(dāng)盡可能短,并且意義明確。
使用有意義的名稱。使用有組織的或目的明確的名稱,不要使用表現(xiàn)形式(presentational)的名稱。
基于最近的父 class 或基本(base) class 作為新 class 的前綴。
使用 .js-* class 來標(biāo)識行為(與樣式相對),并且不要將這些 class 包含到 CSS 文件中。
在為 Sass 和 Less 變量命名時也可以參考上面列出的各項規(guī)范。

/* Bad example */
.t { ... }
.red { ... }
.header { ... }

/* Good example */
.tweet { ... }
.important { ... }
.tweet-header { ... }

選擇器

  • 對于通用元素使用 class ,這樣利于渲染性能的優(yōu)化。
  • 對于經(jīng)常出現(xiàn)的組件,避免使用屬性選擇器(例如,[class^="..."])。瀏覽器的性能會受到這些因素的影響。
  • 選擇器要盡可能短,并且盡量限制組成選擇器的元素個數(shù),建議不要超過 3 。
  • 只有在必要的時候才將 class 限制在最近的父元素內(nèi)(也就是后代選擇器)(例如,不使用帶前綴的 class 時 -- 前綴類似于命名空間)。

擴展閱讀:

/* Bad example */
span { ... }
.page-container #stream .stream-item .tweet .tweet-header .username { ... }
.avatar { ... }

/* Good example */
.avatar { ... }
.tweet-header .username { ... }
.tweet .avatar { ... }

代碼組織

  • 以組件為單位組織代碼段。
  • 制定一致的注釋規(guī)范。
  • 使用一致的空白符將代碼分隔成塊,這樣利于掃描較大的文檔。
  • 如果使用了多個 CSS 文件,將其按照組件而非頁面的形式分拆,因為頁面會被重組,而組件只會被移動。
/*
 * Component section heading
 */

.element { ... }


/*
 * Component section heading
 *
 * Sometimes you need to include optional context for the entire component. Do that up here if it's important enough.
 */

.element { ... }

/* Contextual sub-component or modifer */
.element-heading { ... }

命名規(guī)范

圖片命名

圖片命名建議以以下順序命名:
圖片業(yè)務(wù)(可選) +(mod_)圖片功能類別(必選)+ 圖片模塊名稱(可選) + 圖片精度(可選)

  • 圖片業(yè)務(wù):
    pp_:拍拍
    wx_:微信
    sq_:手Q
    jd_:京東商城

  • 圖片功能類別:
    mod_:是否公共,可選
    icon:模塊類固化的圖標(biāo)
    logo:LOGO類
    spr:單頁面各種元素合并集合
    btn:按鈕
    bg:可平鋪或者大背景

  • 圖片模塊名稱:
    goodslist:商品列表
    goodsinfo:商品信息
    userava tar:用戶頭像

  • 圖片精度:
    普清:@1x
    Retina:@2x | @3x

如下面例子:

公共模塊:
wx_mod_btn_goodlist@2x.png
wx_mod_btn_goodlist.png
mod_btn_goodlist.png

非公共模塊:
wx_btn_goodlist@2x.png
wx_btn_goodlist.png
btn_goodlist.png

HTML/CSS文件命名

確保文件命名總是以字母開頭而不是數(shù)字,且字母一律小寫,以下劃線連接且不帶其他標(biāo)點符號,如:

<!-- HTML -->
jdc.html
jdc_list.html
jdc_detail.html

<!-- SASS -->
jdc.scss
jdc_list.scss
jdc_detail.scss

ClassName命名

祖先模塊不能出現(xiàn)下劃線,除了是全站公用模塊,如 mod_ 系列的命名

/* Bad */
<div class="modulename_info">
    <div class="modulename_info_son"></div>
    <div class="modulename_info_son"></div>
    ...     
</div>


/* Good*/
<div class="modulename">
    <div class="modulename_info">
        <div class="modulename_son"></div>
        <div class="modulename_son"></div>
        ...
    </div>
</div>
<!-- 這個是全站公用模塊,祖先模塊允許直接出現(xiàn)下劃線 -->
<div class="mod_info">
    <div class="mod_info_son"></div>
    <div class="mod_info_son"></div>
    ...     
</div>

在子孫模塊數(shù)量可預(yù)測的情況下,嚴(yán)格繼承祖先模塊的命名前綴

<div class="modulename">
  <div class="modulename_cover"></div>
  <div class="modulename_info"></div>
</div>

當(dāng)子孫模塊超過4級或以上的時候,可以考慮在祖先模塊內(nèi)具有識辨性的獨立縮寫作為新的子孫模塊

/* Bad */
<div class="modulename">
    <div class="modulename_cover"></div>
    <div class="modulename_info">
        <div class="modulename_info_user">
            <div class="modulename_info_user_img">
                <img src="" alt="">
                <div class="modulename_info_user_img_tit"></div>
                <div class="modulename_info_user_img_txt"></div>
                ...
            </div>
        </div>
        <div class="modulename_info_list"></div>
    </div>
</div>


/* Good*/
<div class="modulename">
    <div class="modulename_cover"></div>
    <div class="modulename_info">
        <div class="modulename_info_user">
            <div class="modulename_info_user_img">
                <img src="" alt="">
                <!-- 這個時候 miui 為 modulename_info_user_img 首字母縮寫-->
                <div class="miui_tit"></div>
                <div class="miui_txt"></div>
                ...
            </div>
        </div>
        <div class="modulename_info_list"></div>
    </div>
</div>
模塊命名

全站公共模塊:以 mod_ 開頭

<div class="mod_yours"></div>

業(yè)務(wù)公共模塊:以 業(yè)務(wù)名mod 開頭

<div class="paipai_mod_yours"></div>
常用命名推薦

注意:ad、banner、gg、guanggao 等有機會和廣告掛勾的字眠不建議直接用來做ClassName,因為有些瀏覽器插件(Chrome的廣告攔截插件等)會直接過濾這些類名,因此

<div class="ad"></div>   // 這種廣告的英文或拼音類名不應(yīng)該出現(xiàn)

栗子??

ClassName 含義
about 關(guān)于
account 賬戶
arrow 箭頭圖標(biāo)
article 文章
aside 邊欄
audio 音頻
avatar 頭像
bg,background 背景
bar 欄(工具類)
branding 品牌化
crumb,breadcrumbs 面包屑
btn,button 按鈕
caption 標(biāo)題,說明
category 分類
chart 圖表
clearfix 清除浮動
close 關(guān)閉
col,column
comment 評論
community 社區(qū)
container 容器
content 內(nèi)容
copyright 版權(quán)
current 當(dāng)前態(tài),選中態(tài)
default 默認(rèn)
description 描述
details 細(xì)節(jié)
disabled 不可用
entry 文章,博文
error 錯誤
even 偶數(shù),常用于多行列表或表格中
fail 失敗(提示)
feature 專題
fewer 收起
field 用于表單的輸入?yún)^(qū)域
figure
filter 篩選
first 第一個,常用于列表中
footer 頁腳
forum 論壇
gallery 畫廊
group 模塊,清除浮動
header 頁頭
help 幫助
hide 隱藏
hightlight 高亮
home 主頁
icon 圖標(biāo)
info,information 信息
last 最后一個,常用于列表中
links 鏈接
login 登錄
logout 退出
logo 標(biāo)志
main 主體
menu 菜單
meta 作者、更新時間等信息欄,一般位于標(biāo)題之下
module 模塊
more 更多(展開)
msg,message 消息
nav,navigation 導(dǎo)航
next 下一頁
nub 小塊
odd 奇數(shù),常用于多行列表或表格中
off 鼠標(biāo)離開
on 鼠標(biāo)移過
output 輸出
pagination 分頁
pop,popup 彈窗
preview 預(yù)覽
previous 上一頁
primary 主要
progress 進(jìn)度條
promotion 促銷
rcommd,recommendations 推薦
reg,register 注冊
save 保存
search 搜索
secondary 次要
section 區(qū)塊
selected 已選
share 分享
show 顯示
sidebar 邊欄,側(cè)欄
slide 幻燈片,圖片切換
sort 排序
sub 次級的,子級的
submit 提交
subscribe 訂閱
subtitle 副標(biāo)題
success 成功(提示)
summary 摘要
tab 標(biāo)簽頁
table 表格
txt,text 文本
thumbnail 縮略圖
time 時間
tips 提示
title 標(biāo)題
video 視頻
wrap 容器,包,一般用于最外層
wrapper 容器,包,一般用于最外層

JS

編碼規(guī)范

單行代碼塊

在單行代碼塊中使用空格

/* Bad */
function foo () {return true}
if (foo) {bar = 0}


/* Good*/
function foo () { return true }
if (foo) { bar = 0 }

大括號風(fēng)格

在編程過程中,大括號風(fēng)格與縮進(jìn)風(fēng)格緊密聯(lián)系,用來描述大括號相對代碼塊位置的方法有很多。在 JavaScript 中,主要有三種風(fēng)格,如下:

  • One True Brace Style
if (foo) {
  bar()
} else {
  baz()
}
  • Stroustrup
if (foo) {
  bar()
}
else {
  baz()
}
  • Allman
if (foo)
{
  bar()
}
else
{
  baz()
}

個人喜歡使用 One True Brace Style風(fēng)格

變量命名

當(dāng)命名變量時,主流分為駝峰式命名(variableName)和下劃線命名(variable_name)兩大陣營。

個人喜歡使用下劃線命名 =。=

拖尾逗號

在 ECMAScript5 里面,對象字面量中的拖尾逗號是合法的,但在 IE8(非 IE8 文檔模式)下,當(dāng)出現(xiàn)拖尾逗號,則會拋出錯誤。

拖尾逗號的例子:

var foo = {
  name: 'foo',
  age: '22',
}

拖尾逗號的好處是,簡化了對象和數(shù)組添加或刪除元素,我們只需要修改新增的行即可,并不會增加差異化的代碼行數(shù)。

因為拖尾逗號有好也有不好,所以團(tuán)隊約定允許在最后一個元素或?qū)傩耘c閉括號 ] 或 } 在不同行時,可以(但不要求)使用拖尾逗號。當(dāng)在同一行時,禁止使用拖尾逗號。

逗號空格

逗號前后的空格可以提高代碼的可讀性,團(tuán)隊約定在逗號后面使用空格,逗號前面不加空格.

/* Bad */
var foo = 1,bar = 2
var foo = 1 , bar = 2
var foo = 1 ,bar = 2


/* Good*/
var foo = 1, bar = 2

逗號風(fēng)格

逗號分隔列表時,在 JavaScript 中主要有兩種逗號風(fēng)格:

  • 標(biāo)準(zhǔn)風(fēng)格,逗號放置在當(dāng)前行的末尾
  • 逗號前置風(fēng)格,逗號放置在下一行的開始位置
/* Bad */
var foo = 1
,
bar = 2

var foo = 1
, bar = 2

var foo = ['name'
          , 'age']


/* Good*/
var foo = 1,
    bar = 2

var foo = ['name',
            'age']

emmmmmm,還是使用標(biāo)準(zhǔn)風(fēng)格看起來順眼~

計算屬性的空格

團(tuán)隊約定在對象的計算屬性內(nèi),禁止使用空格

/* Bad */
obj['foo' ]
obj[ 'foo']
obj[ 'foo' ]


/* Good*/
obj['foo']

函數(shù)調(diào)用

為了避免語法錯誤,團(tuán)隊約定在函數(shù)調(diào)用時,禁止使用空格

/* Bad */
fn ()
fn
()


/* Good*/
fn()

對象字面量的鍵值縮進(jìn)

團(tuán)隊約定對象字面量的鍵和值之間不能存在空格,且要求對象字面量的冒號和值之間存在一個空格

/* Bad */
var obj = { 'foo' : 'haha' }


/* Good*/
var obj = { 'foo': 'haha' }

構(gòu)造函數(shù)首字母大寫

在 JavaScript 中 new 操作符用來創(chuàng)建某個特定類型的對象的一個實例,該類型的對象是由一個構(gòu)造函數(shù)表示的。由于構(gòu)造函數(shù)只是常規(guī)函數(shù),唯一區(qū)別是使用 new 來調(diào)用。所以我們團(tuán)隊約定構(gòu)造函數(shù)的首字母要大小,以此來區(qū)分構(gòu)造函數(shù)和普通函數(shù)。

/* Bad */
var fooItem = new foo()


/* Good*/
var fooItem = new Foo()

構(gòu)造函數(shù)的參數(shù)

在 JavaScript 中,通過 new 調(diào)用構(gòu)造函數(shù)時,如果不帶參數(shù),可以省略后面的圓括號。但這樣會造成與整體的代碼風(fēng)格不一致,所以團(tuán)隊約定使用圓括號

/* Bad */
var person = new Person


/* Good*/
var person = new Person()

鏈?zhǔn)秸{(diào)用

鏈?zhǔn)秸{(diào)用如果放在同一行,往往會造成代碼的可讀性差,但有些時候,短的鏈?zhǔn)秸{(diào)用并不會影響美觀。所以本規(guī)范約定一行最多只能有四個鏈?zhǔn)秸{(diào)用,超過就要求換行。

空行

空白行對于分離代碼邏輯有幫助,但過多的空行會占據(jù)屏幕的空間,影響可讀性。團(tuán)隊約定最大連續(xù)空行數(shù)為 2

/* Bad */
var a = 1



var b = 2


/* Good*/
var a = 1

var b = 2

函數(shù)聲明的空格

當(dāng)格式化一個函數(shù),函數(shù)名或 function 關(guān)鍵字與左括號之間允許有空白。命名函數(shù)要求函數(shù)名和 function 關(guān)鍵字之間有空格,但是匿名函數(shù)要求不加空格。

團(tuán)隊約定函數(shù)括號前要加空格

/* Bad */
function func(x) {
  // ...
}


/* Good*/
function func (x) {
  // ...
}

操作符的空格

團(tuán)隊約定操作符前后都需要添加空格

/* Bad */
var sum = 1+2



/* Good*/
var sum = 1 + 2

編輯器配置

將你的編輯器按照下面的配置進(jìn)行設(shè)置,以避免常見的代碼不一致和差異:

  • 用兩個空格代替制表符(soft-tab 即用空格代表 tab 符)。
  • 保存文件時,刪除尾部的空白符。
  • 設(shè)置文件編碼為 UTF-8。
  • 在文件結(jié)尾添加一個空白行。

參照文檔并將這些配置信息添加到項目的 .editorconfig 文件中。例如:Bootstrap 中的 .editorconfig 實例。更多信息請參考 about EditorConfig。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,828評論 1 45
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,213評論 25 708
  • 立志用功,如種樹然. 立志向"道",不被紛紛擾擾的表相而迷失自己的(道).紛紛擾擾中念念不忘守護(hù)自己的"道"心. ...
    小風(fēng)發(fā)美道閱讀 3,916評論 0 0
  • 半夜,你醒了,想哭 窗外的風(fēng)在巷子口說話 你感覺自己被印在 一本古典名著里 一支筆讓你放棄愛情 你屈從而痛苦地放棄...
    劉培強閱讀 516評論 0 0
  • 朋友多么熟悉的詞匯 人人需要朋友 人人都有朋友 人人都有朋友的標(biāo)準(zhǔn) 什么才是真正的朋友? 平等是朋友的前提條件 坦...
    道形圖閱讀 435評論 4 10

友情鏈接更多精彩內(nèi)容