這裡為大家送上一份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動畫屬性的用法解析