CSS代碼規范


1. tab鍵用(必須)四個空格代替

  因為在不同系統的編輯工具對tab解析不一樣,windows下的tab鍵是占四個空格的位置,而在linux下會變成占八個空格的位置(除非你自己設定了tab鍵所占的位置長度)。

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; }

單行顯示不好注釋,不好備注,這應該是壓縮工具的活兒~

7. (禁止)向 后添加單位, 如:

.obj {
    left: 0px;
}

只是為了統一。記住,綠色字表強調,不表強制!

8. (禁止)使用css原生import

使用css原生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)

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

樣式屬性順序

單個樣式規則下的屬性在書寫時,應按功能進行分組,組之間需要有一個空行。
同時要以Positioning Model > Box Model > Typographic > Visual 的順序書寫,提高代碼的可讀性。

  1. Positioning Model 布局方式、位置,相關屬性包括:position, top, z-index, display, float等
  2. Box Model 盒模型,相關屬性包括:width, height, padding, margin,border,overflow
  3. Typographic 文本排版,相關屬性包括:font, line-height, text-align
  4. Visual 視覺外觀,相關屬性包括:color, background, list-style, transform, animation

CSS選擇器命名規則

  • 分類式命名法(在前端組件化下尤為重要)

    1. 布局(grid)(.g-):將頁面分割為幾個大塊,通常有頭部、主體、主欄、側欄、尾部等!
    2. 模塊(module)(.m-):通常是一個語義化的可以重復使用的較大的整體!比如導航、登錄、注冊等
    3. 元件(unit)(.u-):通常是一個不可再分的較為小巧的個體,通常被重復用於各種模塊中!比如按鈕、輸 入框、loading等!
    4. 功能(function)(.f-):為方便一些常用樣式的使用,我們將這些使用率較高的樣式剝離出來,按需使用,通常這些選擇器具有固定樣式表現,比如清除浮動等!不可濫用!
    5. 狀態(.z-):為狀態類樣式加入前綴,統一標識,方便識別,她只能組合使用或作為后代出現(.u-ipt.z-dis{},.m-list li.z-sel{})
    6. javascript(.j-):.j-將被專用於JS獲取節點,請勿使用.j-定義樣式
  • 不要使用 " _ " 下划線來命名css
    能良好的區分javascript變量名
    輸入的時候少按一個shift鍵
    瀏覽器兼容性問題(比如使用_tips的選擇器命名,在IE6是無效的)
  • id采用駝峰式命名(不要亂用id)
  • scss中的變量、函數、混合、placeholder采用駝峰式命名
  • 相同語義的不同類命名方法:
    直接加數字或字母區分即可(如:.m-list、.m-list2、.m-list3等,都是列表模塊,但是是完全不一樣的模塊)。其他舉例:.f-fw0、.f-fw1、.s-fc0、.s-fc1、.m-logo2、.m-logo3、u-btn、u-btn2等等。
  • 命名方式(BEM):類-體(例:g-head)、類-體-修飾符(例:u-btn-active)
  • 后代選擇器:體-修飾符即可(例:.m-page .cut{})注:后代選擇器不要在頁面布局中使用,因為污染的可能性較大;

最佳寫法

    /* 這是某個模塊 */ .m-nav{}/* 模塊容器 */ .m-nav li,.m-nav a{}/* 先共性 優化組合 */ .m-nav li{}/* 后個性 語義化標簽選擇器 */ .m-nav a{}/* 后個性中的共性 按結構順序 */ .m-nav a.a1{}/* 后個性中的個性 */ .m-nav a.a2{}/* 后個性中的個性 */ .m-nav .z-crt a{}/* 交互狀態變化 */ .m-nav .z-crt a.a1{} .m-nav .z-crt a.a2{} .m-nav .btn{}/* 典型后代選擇器 */ .m-nav .btn-1{}/* 典型后代選擇器擴展 */ .m-nav .btn-dis{}/* 典型后代選擇器擴展(狀態) */ .m-nav .btn.z-dis{}/* 作用同上,請二選一(如果可以不兼容IE6時使用) */ .m-nav .m-sch{}/* 控制內部其他模塊位置 */ .m-nav .u-sel{}/* 控制內部其他元件位置 */ .m-nav-1{}/* 模塊擴展 */ .m-nav-1 li{} .m-nav-dis{}/* 模塊擴展(狀態) */ .m-nav.z-dis{}/* 作用同上,請二選一(如果可以不兼容IE6時使用) */

統一語義理解和命名

  • 布局(.g-)

    語義 命名 簡寫
    文檔 doc doc
    頭部 head hd
    主體 body bd
    尾部 foot ft
    主欄 main mn
    主欄子容器 mainc mnc
    側欄 side sd
    側欄子容器 sidec sdc
    盒容器 wrap/box wrap/box
  • 模塊(.m-)、元件(.u-)

    語義 命名 簡寫
    導航 nav nav
    子導航 subnav snav
    面包屑 crumb crm
    菜單 menu menu
    選項卡 tab tab
    標題區 head/title hd/tt
    內容區 body/content bd/ct
    列表 list lst
    表格 table tb
    表單 form fm
    熱點 hot hot
    排行 top top
    登錄 login log
    標志 logo logo
    廣告 advertise ad
    搜索 search sch
    幻燈 slide sld
    提示 tips tips
    幫助 help help
    新聞 news news
    下載 download dld
    注冊 regist reg
    投票 vote vote
    版權 vcopyright cprt
    結果 result rst
    標題 title tt
    按鈕 button btn
    輸入 input ipt
  • 功能(.f-)

    語義 命名 簡寫
    清除浮動 clearboth cb
    左浮動 floatleft fl
    內聯 inlineblock ib
    文本居中 textaligncenter tac
    垂直居中 verticalalignmiddle vam
    溢出隱藏 overflowhidden oh
    完全消失 displaynone dn
    字體大小 fontsize fz
    字體粗細 fontweight fs
  • 皮膚(.s-)

    語義 命名 簡寫
    字體顏色 fontcolor fc
    背景顏色 backgroundcolor bgc
    邊框顏色 bordercolor bdc
  • 狀態(.z-)

    語義 命名 簡寫
    選中 selected sel
    當前 current crt
    顯示 show show
    隱藏 hide hide
    打開 open open
    關閉 close vclose
    出錯 error err
    不可用 disabled dis

注意事項

  1. 一律小寫,中划線
  2. 盡量不用縮寫
  3. 不要隨便使用id
  4. 去掉小數點前面的0: 0.9rem => .9rem
  5. 使用簡寫:margin: 0 1rem 3rem

本文大部分內容參考自網易前端規范:http://nec.netease.com/standard/css-sort.html


免責聲明!

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



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