一、書寫規範javascript
代碼縮進:空四個空格css
選擇器單獨佔一行,每一個屬性及屬性值佔一行,屬性結束用分號 ; html
{ } 上下不要加空行,} 單獨佔一行,每組屬性之間空一行前端
按組件塊編寫樣式,並添加相應的註釋html5
註釋統一用/**/java
對於屬性值或顏色參數,小於 1 的省略前面的 0jquery
十六進制值應該所有小寫,例如,#fff
。在掃描文檔時,小寫字符易於分辨,由於他們的形式更易於區分。git
避免爲 0 值指定單位,例如,用 margin: 0;
代替margin: 0px;
github
二、聲明順序web
相關的屬性聲明應當歸爲一組,並按照下面的順序排列:
三、媒體查詢的位置
將媒體查詢放在儘量相關規則的附近。不要將他們打包放在一個單同樣式文件中或者放在文檔底部。
四、帶前綴的屬性
當使用特定廠商的帶有前綴的屬性時,經過縮進的方式,讓每一個屬性的值在垂直方向對齊,這樣便於多行編輯
五、屬性簡寫
在須要顯示地設置全部值的狀況下,使用簡寫形式:
padding
margin
font
background
border
border-radius
六、選擇器
[class^="..."]
)。瀏覽器的性能會受到這些因素的影響。
補充說明css 多級class命名及選擇器使用
簡單的說就是最外層作命名空間,子集加前綴,css加惟一父級名(設置專有樣式時能惟一選擇就好了,還得靈活運用),選擇器最好不要超過三層嵌套
七、class命名
.btn
和 .btn-danger
)。.btn
表明 button,可是 .s
不能表達任何意思。(出一套經常使用簡寫).js-*
class 來標識行爲(與樣式相對),而且不要將這些 class 包含到 CSS 文件中。
附加說明,常見縮寫及命名,下載查看:
八、font-family默認設置
font-family: "PingFangSC", "Segoe UI", "Lucida Grande", Helvetica, Arial, "Microsoft YaHei", FreeSans, Arimo, "Droid Sans","wenquanyi micro hei","Hiragino Sans GB", "Hiragino Sans GB W3", Arial, sans-serif;
一、Doctype 用標準H5寫法,並添加語言代碼屬性 默認用en
<!DOCTYPE html>
語言代碼參考: https://www.sitepoint.com/web-foundations/iso-2-letter-language-codes/
二、字符編碼設置
<meta charset="utf-8">
三、嵌套縮進,四個空格 ,代碼結構更清晰些
四、使用語義化標籤,一方面提升代碼的易讀性,另外一方面,對seo比較友好
以下是經常使用H5的一些語義化標籤
header 元素
表明「網頁」或「section」的頁眉。
一般包含h1-h6
元素或hgroup
,做爲整個頁面或者一個內容塊的標題。
也能夠包裹一節的目錄部分,一個搜索框,一個nav
,或者任何相關logo。
footer元素
footer
元素表明「網頁」或「section」的頁腳,一般含有該節的一些基本信息,譬如:做者,相關文檔連接,版權資料。若是footer
元素包含了整個節,那麼它們就表明附錄,索引,提拔,許可協議,標籤,類別等一些其餘相似信息
hgroup元素
hgroup
元素表明「網頁」或「section」的標題,當元素有多個層級時,該元素能夠將h1
到h6
元素放在其內,譬如文章的主標題和副標題的組合
nav元素
nav
元素表明頁面的導航連接區域。用於定義頁面的主要導航部分。
aside元素
aside
元素被包含在article元素中做爲主要內容的附屬信息部分,其中的內容能夠是與當前文章有關的相關資料、標籤、名次解釋等。(特殊的section)
section元素
section
元素表明文檔中的「節」或「段」,「段」能夠是指一篇文章裏按照主題的分段;「節」能夠是指一個頁面裏的分組。
section一般還帶標題,雖然html5中section會自動給標題h1-h6降級,可是最好手動給他們降級
article元素
article
元素最容易跟section
和div
容易混淆,其實article
表明一個在文檔,頁面或者網站中自成一體的內容,其目的是爲了讓開發者獨立開發或重用。
五、標籤屬性使用雙引號,屬性名所有小寫,屬性要按順序書寫
屬性順序參照:
補充說明:
role屬性,加強語義性,一般用於說明一個組件的用途,而aria-*的做用就是描述這個tag在可視化的情境中的具體信息
如: <div role="button" aria-checked="checked">這是一個按鈕</div>
這兩個屬性說明這個是一個按鈕,而且狀態是選中狀態
六、布爾類型的屬性不用賦值 如disable , checked
<input type="text" disabled>
<input type="checkbox" value="1" checked>
<select>
<option value="1" selected>1</option>
</select>
七、儘可能減小標籤嵌套和冗餘的父元素,HTML嵌套層數最好不超過四層。
八、自動閉合標籤結尾處要使用斜線
<img class="avatar" src="imgs/avator.png"/>
九、在引入CSS和JS時不須要指明 type,由於 text/css和 text/javascript 分別是他們的默認值
十、在JS文件中生成標籤讓內容變得更難查找,更難編輯,性能更差。應該儘可能避免這種狀況的出現
一、縮進
使用soft tab(4個空格)。
二、單行長度
不要超過80,但若是編輯器開啓word wrap能夠不考慮單行長度。
三、分號
如下幾種狀況後需加分號:
四、空格
如下幾種狀況不須要空格:
如下幾種狀況須要空格:
else
, while
, catch
, finally
if
, else
, for
, while
, do
, switch
, case
, try
,catch
, finally
, with
, return
, typeof
五、空行
如下幾種狀況須要空行:
六、換行
換行的地方,行末必須有','或者運算符;
如下幾種狀況不須要換行:
else
, catch
, finally
如下幾種狀況須要換行:
七、單行註釋
雙斜線後,必須跟一個空格;
縮進與下一行代碼保持一致;
可位於一個代碼行的末尾,與代碼間隔一個空格。
八、多行註釋
最少三行, '*'後跟一個空格,具體參照右邊的寫法;
建議在如下狀況下使用:
九、文檔註釋
各種標籤@param, @method等請參考usejsdoc和JSDoc Guide;
建議在如下狀況下使用:
十、引號
最外層統一使用單引號。
十一、變量聲明
一個函數做用域中全部的變量聲明儘可能提到函數首部,用一個var聲明,不容許出現兩個連續的var聲明。
function doSomethingWithItems(items) { // use one var var value = 10, result = value + 10, i, len; for (i = 0, len = items.length; i < len; i++) { result += 10; } }
十二、函數
不管是函數聲明仍是函數表達式,'('前不要空格,但'{'前必定要有空格;
函數調用括號前不須要空格;
當即執行函數外必須包一層括號;
不要給inline function命名;
參數之間用', '分隔,注意逗號後有一個空格。
數組、對象
對象屬性名不須要加引號;
對象以縮進的形式書寫,不要寫在一行;
數組、對象最後不要有逗號。
1三、括號
下列關鍵字後必須有大括號(即便代碼塊的內容只有一行):if
, else
,for
, while
, do
, switch
, try
, catch
, finally
, with
。
// not good if (condition) doSomething(); // good if (condition) { doSomething(); }
1四、null
適用場景:
不適用場景:
1五、undefined
永遠不要直接使用undefined進行變量判斷;
使用typeof和字符串'undefined'對變量進行判斷。
// not good
if (person === undefined) {
...
}
// good
if (typeof person === 'undefined') {
...
}
說明:防止對未定義的變量進行undefined判斷出錯
1六、jshint
用'===', '!=='代替'==', '!=';
for-in裏必定要有hasOwnProperty的判斷;
不要在內置對象的原型上添加方法,如Array, Date;
不要在內層做用域的代碼裏聲明瞭變量,以後卻訪問到了外層做用域的同名變量;
變量不要先使用後聲明;
不要在一句代碼中單單使用構造函數,記得將其賦值給某個變量;
不要在同個做用域下聲明同名變量;
不要在一些不須要的地方加括號,例:delete(a.b);
不要使用未聲明的變量(全局變量須要加到.jshintrc文件的globals屬性裏面);
不要聲明瞭變量卻不使用;
不要在應該作比較的地方作賦值;
debugger不要出如今提交的代碼裏;
數組中不要存在空元素;
不要在循環內部聲明函數;
不要像這樣使用構造函數,例:new function () { ... }
, new Object
;
1七、雜項
不要混用tab和space;
不要在一處使用多個tab或space;
換行符統一用'LF';
對上下文this的引用只能使用'_this', 'that', 'self'其中一個來命名;
行尾不要有空白字符;
switch的falling through和no default的狀況必定要有註釋特別說明;
不容許有空的代碼塊。
關於CSS的權重(出自http://www.cnblogs.com/xiaowuzi/p/3726835.html)
計算指定選擇器的優先級:從新認識CSS的權重
使用的規則也很簡單,就是 選擇器的權值加到一塊兒,大的優先;若是權值相同,後定義的優先 。雖然很簡單,但若是書寫的時候沒有注意,很容易就會致使CSS的重複定義,代碼冗餘。
從上面咱們能夠得出兩個關鍵的因素:
總結:
比較同一級別的個數,數量多的優先級高,若是相同即比較下一級別的個數 ,至於各級別的優先級,你們應該已經很清楚了,就是:
important > 內聯 > ID > 類 > 標籤 | 僞類 | 屬性選擇 > 僞對象 > 通配符 > 繼承
這也就解釋了爲何11個標籤的定義會比不上1個類的定義,1個類加11個標籤會比不上2個類的權重高。
關於CSS的執行效率(出自http://www.cnblogs.com/xiaowuzi/p/3726835.html)
不要tag-qualify (永遠不要這樣作 ul#main-navigation { } ID已是惟一的,不須要Tag來標識,這樣作會讓選擇器變慢。)
後代選擇器最糟糕(換句話說,下面這個選擇器是很低效的: html body ul li a { })
CSS3的效率問題(CSS3選擇器(好比 :nth-child)可以漂亮的定位咱們想要的元素,又能保證咱們的CSS整潔易讀。可是這些神奇的選擇器會浪費不少的瀏覽器資源。)
Google 資深web開發工程師Steve Souders對CSS選擇器的效率從高到低作了一個排序:
騰訊前端團隊代碼規範
https://www.kancloud.cn/digest/code-guide/42603
isobar前端代碼規範
https://coderlmn.github.io/code-standards/
關於屬性簡寫的一篇文章
https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties
http://twitter.github.io/recess/
https://www.sitepoint.com/web-foundations/iso-2-letter-language-codes/
http://www.stevesouders.com/blog/2009/04/09/dont-use-import/
一、項目命名
項目名所有小寫,用破折號作鏈接符
例如:super-employer
二、目錄命名
目錄名所有小寫
經常使用目錄名:asset , src ,dist , img , css , js , module , model , data , service ....
三、文件命名
文件名所有小寫,用下劃線作鏈接符
例如:retina_sprites.css
error_report.html
四、class, id 命名
五、js變量命名