這裡為大家送上一份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 |
---|---|---|
宋體(中易宋體) | ##WindowsSimSun | |
Windows | #SimHei | |
Windows | Microsoft YaHei | |
Windows | Microsoft JhengHei | |
Mac/iOS | STHeiti | |
Mac/iOS | #Hiragino Sans GB | |
Linux | WenQuanYi Zen Hei | |
Linux | WenQuanYi Micro Hei |
前缀 | 说明 | 示例 |
---|---|---|
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 */ }
以上是CSS程式碼書寫規範的學習指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!