前端編碼規范之CSS


  "字是門面書是屋",我們不會去手寫代碼,但是敲出來的代碼要好看、有條理,這還必須得有一點約束~

  團隊開發中,每個人的編碼風格都不盡相同,有時候可能存在很大的差異,為了便於壓縮組件對代碼進行壓縮以及書寫樣式的規范統一和美觀,很有必要大家一起來研究一套基本規范(模板)!

  我先拋磚引玉。(禁止)、(必須)等字眼,在這里只是表示強調,未嚴格要求

 

前端規范之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. 禁止)向 后添加單位, 如:

.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樣式

推薦網站:http://www.cssreset.com/

 

16.(禁止)使用"*"來選擇元素

/*別這樣寫*/
* {
    margin: 0;
    padding: 0;
}

這樣寫是沒有必要的,一些元素在瀏覽器中默認有margin或padding值,但是只是部分元素,沒有必要將所有元素的margin、padding值都置為0。

 

17. 鏈接的樣式,(務必)按照這個順序來書寫

a:link -> a:visited -> a:hover -> a:active

 

18. 你補充... 

 

應該說在前面的話

  • 對於不同的團隊、不同的需求,編碼規范上有一些差異,這個很正常。
  • 最后上線的代碼肯定不是上述遵從規范的,上線的代碼都會經過打包和壓縮。
  • 不同的人有不同的編碼風格,當你是一個人作戰的時候,你可以不用考慮這些,但是如果是團隊開發,有一個規范還是很有指導價值的~

 

  這些規范是在團隊開發過程中,集思廣益總結出來的,不是很全面,如果你有好的建議,請提出來,我們一起打造一個良好的前端生態環境!

  后面我會陸續把HTML、JavaScript和LESS等規范羅列出來,大家共同進步!!!

 

相關閱讀:前端編碼規范之JavaScript

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM