"字是門面書是屋",我們不會去手寫代碼,但是敲出來的代碼要好看、有條理,這還必須得有一點約束~
團隊開發中,每個人的編碼風格都不盡相同,有時候可能存在很大的差異,為了便於壓縮組件對代碼進行壓縮以及書寫樣式的規范統一和美觀,很有必要大家一起來研究一套基本規范(模板)!
我先拋磚引玉。(禁止)、(必須)等字眼,在這里只是表示強調,未嚴格要求。
前端規范之CSS
1. tab鍵用(必須)四個空格代替
因為在不同系統的編輯工具對tab解析不一樣,windows下的tab鍵是占四個空格的位置,而在linux下會變成占八個空格的位置(除非你自己設定了tab鍵所占的位置長度)。
一些童鞋可能會有疑問,tab鍵換成四個空格,多麻煩啊~
其實不然,我平時用sublime text比較多,在這個工具中可以對tab鍵進行設置。
選擇Indent Using Spaces,Tab Width:4兩項即可。
2. 每個樣式屬性后(必須)加 ";"
方便壓縮工具"斷句"。
3. Class命名中(禁止)出現大寫字母,(必須)采用” - “對class中的字母分隔,如:
/* 正確的寫法 */ .hotel-title { font-weight: bold; } /* 不推薦的寫法 */ .hotelTitle { font-weight: bold; }
- 用"-"隔開比使用駝峰是更加清晰。
- 產品線-產品-模塊-子模塊,命名的時候也可以使用這種方式(@Artwl)
4. 空格的使用,以下規則(必須)執行:
.hotel-content { font-weight: bold; }
- 選擇器與
{
之前(必須)
要有空格 - 屬性名的
:
后(必須)
要有空格 - 屬性名的
:
前(禁止)
加空格
一個原因是美觀,其次IE 6存在一個bug, 戳bug
5.多選擇器規則之間(必須)
換行
當樣式針對多個選擇器時每個選擇器占一行
/* 推薦的寫法 */ a.btn, input.btn, input[type="button"] { ...... }
6. (禁止)
將樣式寫為單行, 如
.hotel-content {margin: 10px; background-color: #efefef;}
單行顯示不好注釋,不好備注,這應該是壓縮工具的活兒~
7. (禁止)
向 0
后添加單位, 如:
.obj { left: 0px; }
只是為了統一。記住,綠色字表強調,不表強制!
8. (禁止)
使用css原生import
使用css原生import有很多弊端,比如會增加請求數等....
推薦文章:Don't use @import
9. (推薦)
屬性的書寫順序, 舉個例子:
.hotel-content { /* 定位 */ display: block; position: absolute; left: 0; top: 0; /* 盒模型 */ width: 50px; height: 50px; margin: 10px; border: 1px solid black; / *其他* / color: #efefef; }
- 定位相關, 常見的有:
display
position
left
top
float
等 - 盒模型相關, 常見的有:
width
height
margin
padding
border
等 - 其他屬性
按照這樣的順序書寫可見提升瀏覽器渲染dom的性能
簡單舉個例子,網頁中的圖片,如果沒有設置width和height,在圖片載入之前,他所占的空間為0,但是當他加載完畢之后,那塊為0的空間突然被撐開了,這樣會導致,他下面的元素重新排列和渲染,造成重繪(repaint)和回流(reflow)。我們在寫css的時候,把元素的定位放在前頭,首先讓瀏覽器知道該元素是在文本流內還是外,具體在頁面的哪個部位,接着讓瀏覽器知道他們的寬度和高度,border等這些占用空間的屬性,其他的屬性都是在這個固定的區域內渲染的,差不多就是這個意思吧~(@frec)
推薦文章:Poll Results: How do you order your CSS properties?
http://www.mozilla.org/css/base/content.css
10. 小圖片(必須)sprite 合並
推薦文章:NodeJs智能合並CSS精靈圖工具iSpriter
11. (推薦)
當編寫針對特定html結構的樣式時,使用元素名
+ 類名
/* 所有的nav都是針對ul編寫的 */ ul.nav { ...... }
".a div"和".a div.b",為什么后者好?如果需求有所變化,在".a"下有多加了一個div,試問,開始的樣式是不是會影響后來的div啊~
12. (推薦)IE Hack List
/* 針對ie的hack */ selector { property: value; /* 所有瀏覽器 */ property: value\9; /* 所有IE瀏覽器 */ property: value\0; /* IE8 */ +property: value; /* IE7 */ _property: value; /* IE6 */ *property: value; /* IE6-7 */ }
當使用hack的時候想想能不能用更好的樣式代替
13. (不推薦)
ie使用filter
,( 禁止)
使用expression
這里主要是效率問題,應該當格外注意,咱們要少用燒CPU的東西~
14. (禁止)使用行內(inline)樣式
<p style="font-size: 12px; color: #FFFFFF">靖鳴君</p>
像這樣的行內樣式,最好用一個class代替。又如要隱藏某個元素,可以給他加一個class
.hide { display: none; }
盡量做到樣式和結構分離~
15. (推薦)reset.css樣式
16.(禁止)使用"*"來選擇元素
/*別這樣寫*/ * { margin: 0; padding: 0; }
這樣寫是沒有必要的,一些元素在瀏覽器中默認有margin或padding值,但是只是部分元素,沒有必要將所有元素的margin、padding值都置為0。
17. 鏈接的樣式,(務必)按照這個順序來書寫
a:link -> a:visited -> a:hover -> a:active
18. 等你補充...
應該說在前面的話
- 對於不同的團隊、不同的需求,編碼規范上有一些差異,這個很正常。
- 最后上線的代碼肯定不是上述遵從規范的,上線的代碼都會經過打包和壓縮。
- 不同的人有不同的編碼風格,當你是一個人作戰的時候,你可以不用考慮這些,但是如果是團隊開發,有一個規范還是很有指導價值的~
這些規范是在團隊開發過程中,集思廣益總結出來的,不是很全面,如果你有好的建議,請提出來,我們一起打造一個良好的前端生態環境!
后面我會陸續把HTML、JavaScript和LESS等規范羅列出來,大家共同進步!!!
相關閱讀:前端編碼規范之JavaScript