關於CSS代碼如何書寫規範

來源:互聯網
上載者:User
這裡為大家送上一份CSS代碼書寫規範究極指南,包括代碼注釋和命名規範以及空格縮排等一應俱全,都來自大家平時的約定俗成,絕對值得學習借鑒,需要的朋友可以參考下

1.格式化代碼
1.1檔案
[建議]:CSS檔案使用無BOM的UTF-8編碼
1.2縮排[強制]:使用 4 個空格做為一個縮排層級,不允許使用 2 個空格 或 tab 字元。

.selector {       margin: 0;       padding: 0;   }

1.3空格

[強制]:選取器 與 { 之間必須包含空格。

.selector {   }

[強制]:選取器 與 { 之間必須包含空格。

margin: 0;

[強制]:列表性屬性書在單行時,,後必須跟一個空格

font-family: Aria, sans-serif;

1.4行長度[強制]: 每行不得超過 120 個字元,除非單行不可分割。
[建議]: 對於超長的樣式,在樣式值的 空格 處或 , 後換行,建議按邏輯分組。

/* 不同屬性值按邏輯分組 */  background:       transparent url(aVeryVeryVeryLongUrlIsPlacedHere)       no-repeat 0 0;   /* 可重複多次的屬性,每次重複一行 */  background-image:       url(aVeryVeryVeryLongUrlIsPlacedHere)       url(anotherVeryVeryVeryLongUrlIsPlacedHere);   /* 類似函數的屬性值可以根據函數調用的縮排進行 */  background-image: -webkit-gradient(       linear,       left bottombottom,       left top,       color-stop(0.04, rgb(88,94,124)),       color-stop(0.52, rgb(115,123,162))   );

1.5選取器

[強制]:當一個 rule 包含多個 selector 時,每個選取器聲明必須獨佔一行。

/* good */  .post,   .page,   .comment {       line-height: 1.5;   }   /* bad */  .post, .page, .comment {       line-height: 1.5;   }

[強制]: >、+、~ 選取器的兩邊各保留一個空格。

樣本:

/* good */  main > nav {       padding: 10px;   }   label + input {       margin-left: 5px;   }   input:checked ~ button {       background-color: #69C;   }   /* bad */  main>nav {       padding: 10px;   }   label+input {       margin-left: 5px;   }   input:checked~button {       background-color: #69C;   }

[強制] 屬性選取器中的值必須用雙引號包圍。

css   /* good */  article[character="juliet"] {       voice-family: "Vivien Leigh", victoria, female   }   /* bad */  article[character='juliet'] {       voice-family: "Vivien Leigh", victoria, female   }

2.選取器與屬性縮寫

2.1選取器[強制] 如無必要,不得為 id、class 選取器添加類型選取器進行限定。
解釋:在效能和維護性上,都有一定的影響。
樣本:
css

/* good */  #error,   .danger-message {       font-color: #c00;   }   /* bad */  dialog#error,   p.danger-message {       font-color: #c00;   }

[建議] 選取器的嵌套層級應不大於 3 級,位置靠後的限定條件應儘可能精確。

樣本:

/* good */  #username input {}   .comment .avatar {}   /* bad */  .page .header .login #username input {}   .comment p * {}

2.2 屬性縮寫

[建議] 在可以使用縮寫的情況下,盡量使用屬性縮寫。
樣本:

/* good */  .post {       font: 12px/1.5 arial, sans-serif;   }   /* bad */  .post {       font-family: arial, sans-serif;       font-size: 12px;       line-height: 1.5;   }

[建議] 使用 border / margin / padding 等縮寫時,應注意隱含值對實際數值的影響,確實需要設定多個方向的值時才使用縮寫。

解釋:border / margin / padding 等縮寫會同時設定多個屬性的值,容易覆蓋不需要覆蓋的設定。如某些方向需要繼承其他聲明的值,則應該分開設定。
樣本:

/* centering <article class="page"> horizontally and highlight featured ones */  article {       margin: 5px;       border: 1px solid #999;   }   /* good */  .page {       margin-right: auto;       margin-left: auto;   }   .featured {       border-color: #69c;   }   /* bad */  .page {       margin: 5px auto; /* introducing redundancy */  }   .featured {       border: 1px solid #69c; /* introducing redundancy */  }

2.3 每個規則集之間保留一個空行

/* good */  .selector1 {     display: block;     width: 100px;   }   .selector2 {     padding: 10px;     margin: 10px auto;   }   /* bad */  .selector1 {     display: block;     width: 100px;   }   .selector2 {     padding: 10px;     margin: 10px auto;   }

3.值與單位
3.1 文本
[強制] 常值內容必須用雙引號包圍。
解釋:文本類型的內容可能在選取器、屬性值等內容中。
樣本:

/* good */  html[lang|="zh"] q:before {       font-family: "Microsoft YaHei", sans-serif;       content: "“";   }   html[lang|="zh"] q:after {       font-family: "Microsoft YaHei", sans-serif;       content: "”";   }   /* bad */  html[lang|=zh] q:before {       font-family: 'Microsoft YaHei', sans-serif;       content: '“';   }   html[lang|=zh] q:after {       font-family: "Microsoft YaHei", sans-serif;       content: "”";   }

3.2 數值[強制] 當數值為 0 - 1 之間的小數時,省略整數部分的 0。
樣本:

/* good */  panel {       opacity: .8   }   /* bad */  panel {       opacity: 0.8   }

3.3 url()

[強制] url() 函數中的路徑不加引號。
樣本:

body {       background: url(bg.png);   }

3.4 長度[強制] 長度為 0 時須省略單位。 (也只有長度單位可省)
樣本:

/* good */  body {       padding: 0 5px;   }   /* bad */  body {       padding: 0px 5px;   }

3.5 顏色

[強制] RGB顏色值必須使用十六進位記號形式 #rrggbb。不允許使用 rgb()。

/* good */  .success {       box-shadow: 0 0 2px rgba(0, 128, 0, .3);       border-color: #008000;   }   /* bad */  .success {       box-shadow: 0 0 2px rgba(0,128,0,.3);       border-color: rgb(0, 128, 0);   }

[強制] 顏色值可以縮寫時,必須使用縮寫形式。

樣本:

/* good */  .success {       background-color: #aca;   }   /* bad */  .success {       background-color: #aaccaa;   }

[強制] 顏色值不允許使用命名色值。
樣本:

/* good */  .success {       color: #90ee90;   }   /* bad */  .success {       color: lightgreen;   }

[建議] 顏色值中的英文字元採用小寫。如不用小寫也需要保證同一項目內保持大小寫一致。

樣本:

/* good */  .success {       background-color: #aca;       color: #90ee90;   }   /* good */  .success {       background-color: #ACA;       color: #90EE90;   }   /* bad */  .success {       background-color: #ACA;       color: #90ee90;   }

3.6 2D 位置[強制] 必須同時給出水平和垂直方向的位置。
解釋:
2D 位置初始值為 0% 0%,但在只有一個方向的值時,另一個方向的值會被解析為 center。為避免理解上的困擾,應同時給出兩個方向的值。background-position屬性值的定義
樣本:

/* good */  body {       background-position: center top; /* 50% 0% */  }   /* bad */  body {       background-position: top; /* 50% 0% */  }

4.文本編排
4.1 字型族
[強制] font-family 屬性中的字型族名稱應使用字型的英文 Family Name,其中如有空格,須放置在引號中。
解釋:
所謂英文 Family Name,為字型檔的一個中繼資料,常見名稱如下:

字型 作業系統 Family Name
宋體 (中易宋體) Windows SimSun
黑體 (中易黑體) Windows SimHei
微軟雅黑 Windows Microsoft YaHei
微軟正黑 Windows Microsoft JhengHei
華文黑體 Mac/iOS STHeiti
冬青黑體 Mac/iOS Hiragino Sans GB
文泉驛正黑 Linux WenQuanYi Zen Hei
文泉驛微米黑 Linux WenQuanYi Micro Hei

樣本:

h1 {       font-family: "Microsoft YaHei";   }

[強制] font-family 按「西文字型在前、中文字型在後」、「效果佳 (品質高/更能滿足需求) 的字型在前、效果一般的字型在後」的順序編寫,最後必須指定一個通用字型族( serif / sans-serif )
解釋:
更詳細說明可參考本文。
樣本:

/* Display according to platform */  .article {       font-family: Arial, sans-serif;   }   /* Specific for most platforms */  h1 {       font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "WenQuanYi Micro Hei", "Microsoft YaHei", sans-serif;   }

[強制] font-family 不區分大小寫,但在同一個項目中,同樣的 Family Name 大小寫必須統一。
樣本:

/* good */  body {       font-family: Arial, sans-serif;   }   h1 {       font-family: Arial, "Microsoft YaHei", sans-serif;   }   /* bad */  body {       font-family: arial, sans-serif;   }   h1 {       font-family: Arial, "Microsoft YaHei", sans-serif;   }

4.2 字型大小[強制] 需要在 Windows 平台顯示的中文內容,其字型大小應不小於 12px。
解釋:由於 Windows 的字型渲染機制,小於 12px 的文字顯示效果極差、難以辨認。
4.3 字型風格[建議] 需要在 Windows 平台顯示的中文內容,不要使用除 normal 外的 font-style。其他平台也應慎用。
解釋:
由於中文字型沒有 italic 風格的實現,所有瀏覽器下都會 fallback 到 obilique 實現 (自動擬合為斜體),小字型大小下 (特別是 Windows 下會在小字型大小下使用點陣字型的情況下) 顯示效果差,造成閱讀困難。

5 變換與動畫[強制] 使用 transition 時應指定 transition-property。
樣本:

/* good */  .box {       transition: color 1s, border-color 1s;   }   /* bad */  .box {       transition: all 1s;   }

[建議] 儘可能在瀏覽器能高效實現的屬性上添加過渡和動畫。
解釋:
見本文,在可能的情況下應選擇這樣四種變換:

transform: translate(npx, npx);   transform: scale(n);   transform: rotate(ndeg);   opacity: 0..1;

典型的,可以使用 translate 來代替 left 作為動畫屬性。
樣本:

/* good */  .box {       transition: transform 1s;   }   .box:hover {       transform: translate(20px); /* move right for 20px */  }   /* bad */  .box {       left: 0;       transition: left 1s;   }   .box:hover {       left: 20px; /* move right for 20px */  }

6 響應式[強制] Media Query 如果有多個逗號分隔的條件時,應將每個條件放在單獨一行中。
樣本:

@media   (-webkit-min-device-pixel-ratio: 2), /* Webkit-based browsers */  (min--moz-device-pixel-ratio: 2),    /* Older Firefox browsers (prior to Firefox 16) */  (min-resolution: 2dppx),             /* The standard way */  (min-resolution: 192dpi) {           /* dppx fallback */      /* Retina-specific stuff here */  }

7.CSS注釋普通注釋

/* 普通注釋 */

區塊注釋

/**   * 模組:m-detail   * author: xxx   * edit:   2016.5.02   */

8.CSS命名規範
8.1命名組成
命名必須由單詞,中劃線組成。例如:.info,.news-list
不推薦使用拼音來作為樣式名,尤其是縮寫的拼音、拼音與英文的混合
所有命名都使用小寫,使用中劃線 “-” 作為串連字元,而不是底線 “_“
8.2命名首碼

首碼 說明 樣本
g- 全域通用樣式命名 g-mod
m- 模組命名方式 m-detail
ui- 組件命名方式 ui-selector
j- 所有用於純互動的命名,不涉及任何樣式規則。 J-switch

不允許出現以類似:.info, .current, .news 開頭的選取器,比如:

.info{sRules;}

因為這樣將給我們帶來不可預知的管理麻煩以及沉重的曆史包袱。你永遠也不會知道哪些樣式名已經被用掉了,如果你是一個新人,你可能會遭遇,你每定義個樣式名,都有同名的樣式已存在,然後你只能是換樣式名或者覆蓋規則。所以我們推薦這樣寫:

.m-xxx .info{sRules;}

所有的選取器必須是以 g-, m-, ui- 等有首碼的選擇符開頭的,意思就是說所有的規則都必須在某個相對的範圍下才生效,儘可能減少全域汙染。 J- 這種層級的className完全交由JSer自訂,但是命名的規則也可以保持跟重構一致,比如說不能使用拼音之類的

8.3命名單詞不以表現來命名,而是根據內容來命名。比如:left, right, center, red, black這種以表現來定命名,不允許出現;
推薦使用功能和內容相關詞彙的命名,如:
全選複製放進筆記套系:package
相簿:photo-album
作品:works
攻略:raiders
普通使用者:normal-user
達人:talent-user
攝影師:photographer
使用者暱稱:user-alias
頭像:head
地區:area
關注數:follow
粉絲數:followers
互相注意:attention
標籤:label
發表時間:publish-date,publish-time
標題:title
資訊:info
內容:content
關於我:about
簡介內容:intro-content
評論:review
服務:service
封面:cover
流行:popular
收藏:collect
查看:view
預約:reservation
促銷:sale-promotion

9.相容性
9.1 屬性首碼
[強制] 帶私人首碼的屬性由長到短排列,按冒號位置對齊。
解釋:
標準屬性放在最後,按冒號對齊方便閱讀,也便於在編輯器內進行多行編輯。
樣本:

.box {       -webkit-box-sizing: border-box;          -moz-box-sizing: border-box;               box-sizing: border-box;   }

9.2 Hack[建議] 需要添加 hack 時應儘可能考慮是否可以採用其他方式解決。
解釋:
如果能通過合理的 HTML 結構或使用其他的 CSS 定義達到理想的樣式,則不應該使用 hack 手段解決問題。通常 hack 會導致維護成本的增加。
[建議] 盡量使用 選取器 hack 處理相容性,而非 屬性 hack。
解釋:
盡量使用符合 CSS 文法的 selector hack,可以避免一些第三方庫無法識別 hack 文法的問題。
樣本:

/* IE 7 */  *:first-child + html #header {       margin-top: 3px;       padding: 5px;   }   /* IE 6 */  * html #header {       margin-top: 5px;       padding: 4px;   }

[建議] 盡量使用簡單的 屬性 hack。
樣本:

.box {       _display: inline; /* fix double margin */      float: left;       margin-left: 20px;   }   .container {       overflow: hidden;       *zoom: 1; /* triggering hasLayout */  }

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關推薦:

關於CSS3中Animation動畫屬性的用法解析

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.