CSS編碼規(guī)范

1 代碼風(fēng)格

1.1 文件

[建議] css使用無BOMUTF-8編碼疲牵。

解釋:
UTF-8 編碼具有更廣泛的適應(yīng)性浪听。BOM在使用程序或工具處理文件是可能造成不必要的干擾钉蒲。

1.2 縮進

[強制] 使用4個空格座位一個縮進層級浓利,不允許使用2個空格或者tab字符宫仗。

示例:

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

1.3 空格

[強制] 屬性名于之后的:之間不允許包含空格够挂,:屬性值之間必須包含空格。

示例:

margin: 0;
[強制] 列表性屬性值書寫在單行是藕夫,孽糖,后必須跟一個空格。

示例:

font-family: Arial, sans-serif;

1.4 行長度

[強制] 每行不超過120個字符毅贮,除非單行不可分割办悟。

解釋:
常見不可分割的場景為URL超長。

[建議] 對于超長的樣紙滩褥,在樣式值的 空格處或,后換行病蛉,建議按邏輯分組。

示例:

/* 不同屬性值按邏輯分組 */
background:
    transparent url(aVeryVeryVeryLongUrlIsPlacedHere)
    no-repeat 0 0;

/* 可重復(fù)多次的屬性瑰煎,每次重復(fù)一行 */
background-image:
    url(aVeryVeryVeryLongUrlIsPlacedHere)
    url(anotherVeryVeryVeryLongUrlIsPlacedHere);

/* 類似函數(shù)的屬性值可以根據(jù)函數(shù)調(diào)用的縮進進行 */
background-image: -webkit-gradient(
    linear,
    left bottom,
    left top,
    color-stop(0.04, rgb(88,94,124)),
    color-stop(0.52, rgb(115,123,162))
);

1.5 選擇器

[強制] 當(dāng)一個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;
}

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

解釋:
不允許使用單引號诀艰,不允許不使用引號柬甥。

示例:

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

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

1.6 屬性

[強制] 屬性定義必須另起一行饮六。

示例:

/* good */
.selector {
    margin: 0;
    padding: 0;
}

/* bad */
.selector { margin: 0; padding: 0; }

[強制] 屬性定義后必須以分號結(jié)尾。

示例:

/* good */
.selector {
    margin: 0;
}

/* bad */
.selector {
    margin: 0
}

2 通用

2.1 選擇器

[強制] 如無必要苛蒲,不得為id卤橄,class選擇器添加類型選擇器進行限定。

解釋:
在性能和維護性上臂外,都有一定得影響窟扑。

示例:

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

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

[建議] 選擇器 的嵌套層級應(yīng)不大于3級,位置靠后的限定條件應(yīng)盡可能精確漏健。

示例:

/* good */
#username input {}
.comment .avatar {}

/* bad */
.page .header .login #username input {}
.comment div * {}

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等縮寫時蔫浆,應(yīng)注意隱含值對實際數(shù)值的影響殖属,確實需要設(shè)置多個方向的值時才使用縮寫。

解釋:border/margin/padding 等縮寫會同時設(shè)置多個屬性的值瓦盛,容易覆蓋不需要覆蓋的設(shè)定洗显。如某些方向需要繼承其他聲明的值外潜,則應(yīng)該分開設(shè)置。

示例:

/* 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 屬性書寫順序

[建議] 同一rule set下的屬性在書寫時挠唆,應(yīng)按功能進行分組处窥,并以Formatting Model 的順序書寫,以提高代碼的可讀性玄组。

解釋:

  • Formatting Model 相關(guān)屬性包括:position / top / right / bottom / left / float / display / overflow
  • Box Model 相關(guān)屬性包括:border / margin / padding / width / height
  • Typographic 相關(guān)屬性包括:font / line-height / text-align / word-wrap
  • Visual 相關(guān)屬性包括:background / color / transition / list-style

另外滔驾,如果包含 content 屬性,應(yīng)放在最前面俄讹。

示例:

.sidebar {
    /* formatting model: positioning schemes / offsets / z-indexes / display / ...  */
    position: absolute;
    top: 50px;
    left: 0;
    overflow-x: hidden;

    /* box model: sizes / margins / paddings / borders / ...  */
    width: 200px;
    padding: 5px;
    border: 1px solid #ddd;

    /* typographic: font / aligns / text styles / ... */
    font-size: 14px;
    line-height: 20px;

    /* visual: colors / shadows / gradients / ... */
    background: #f5f5f5;
    color: #333;
    -webkit-transition: color 1s;
       -moz-transition: color 1s;
            transition: color 1s;
}

2.4 清除浮動

[建議] 當(dāng)元素需要撐起高度以及包含內(nèi)部的浮動元素時嵌灰,通過的偽類設(shè)置clear 或觸發(fā)bfc的方式進行clearfix。盡量不要使用增加空標(biāo)簽的方式颅悉。

實例

解釋:
觸發(fā)BFC的方式很多沽瞭,常見的有:

  • float 非 none
  • position 非 static
  • overflow 非 visible

如果希望使用更小的清楚浮動方法,參見 A new micro clearfix hack 一文剩瓶。
另需注意驹溃,對已經(jīng)觸發(fā)BFC的元素不需要在進行clearfix。

2.5 延曙!important

[建議] 盡量不使用!important聲明豌鹤。

[建議] 當(dāng)需要強制指定樣式且不允許任何場景覆蓋時,通過標(biāo)簽內(nèi)聯(lián)和枝缔!important定義樣式布疙。

解釋:
必須注意的是,僅在設(shè)計上確實不允許任何其他場景覆蓋樣式時愿卸,才使用內(nèi)聯(lián)的!important樣式灵临。通常在第三方環(huán)境的應(yīng)用中使用這種方案。下面的z-index章節(jié)是其中一個特殊場景的典型樣例趴荸。

2.6 z-index

[建議] 將z-index進行分層儒溉,對文檔流外絕對定位元素的視覺層級關(guān)系進行管理。

解釋:

同層的多個元素发钝,如多個由用戶輸入觸發(fā)的Dialog顿涣,在該層級內(nèi)使用相同的z-index或遞增z-index
建議每層包含100個z-index來容納足夠的元素酝豪,如果每層元素較多涛碑,可以調(diào)整這個數(shù)值。

[建議] 在可控的環(huán)境下孵淘,期望顯示在最上面的元素蒲障,z-index指定為999999

解釋:
可控環(huán)分為兩種,一種 是自身產(chǎn)品線環(huán)境晌涕,還有一種是可能會被其他產(chǎn)品線引用滋捶,但是不會被外部第三方的產(chǎn)品引用。

不建議取值為2137483647余黎。以便于自身產(chǎn)品線被其他產(chǎn)品線引用時重窟,當(dāng)遇到層級覆蓋沖突的情況,留出向上調(diào)節(jié)的空間惧财。

[建議] 在第三方環(huán)境下巡扇,期望顯示在最上層的元素,通過標(biāo)簽內(nèi)聯(lián)和!important垮衷,將z-index指定為21483647厅翔。

解釋:
第三方環(huán)境對于開發(fā)者來說完全不可控。在第三方環(huán)境在的元素搀突,為了保證元素不被其頁面其他樣式定義覆蓋刀闷,需要采用此做法。

3 值與單位

3.1 文本

[強制] 文本內(nèi)容必須用雙引號包圍仰迁。

解釋:
文本類型的內(nèi)容可能在選擇器甸昏、屬性值等內(nèi)容中。

示例:

/* 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 數(shù)值

[強制] 當(dāng)數(shù)值為0-1之間的小數(shù)時徐许,不能省略整數(shù)部分的0施蜜。

示例:

/* good */
panel {
    opacity: 0.8
}

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

3.3 url()

[強制] url() 函數(shù)的路徑不加引號。

示例:

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

[建議] url()函數(shù)中的絕對路徑可省去協(xié)議名雌隅。

示例:

body {
    background: url(//baidu.com/img/bg.png) no-repeat 0 0;
}

3.4 長度

[強制] 長度為0時必須省略單位翻默,(也只有長度單位可省)

示例:

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

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

3.5 顏色

[強制] 顏色值可以縮寫時恰起,不準(zhǔn)使用縮寫形式修械。

示例:

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

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

[強制] 顏色值中的英文字符采用小寫。

示例:

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


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

3.6 2D位置

[強制] 必須同時給出水平和垂直方向的位置村缸。

解釋:

2D 位置初始值為 0% 0%祠肥,但在只有一個方向的值時,另一個方向的值會被解析為 center梯皿。為避免理解上的困擾,應(yīng)同時給出兩個方向的值县恕。background-position屬性值的定義

示例:

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

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

4 文本編排

4.1 字號

[強制] 需要在windows平臺顯示的中文內(nèi)容东羹,其字號應(yīng)不小于12px

解釋:
由于windows 的習(xí)題渲染機制忠烛,小于12px的文字顯示效果極差属提、難以辨認(rèn)。

4.2 字體風(fēng)格

[建議] 需要在windows平臺顯示的中文內(nèi)容,不要使用除normal外的font-style冤议。其他平臺也應(yīng)慎用斟薇。

解釋:
由于中文字體沒有italic風(fēng)格的實現(xiàn),所有瀏覽器下都會fallback到obilique實現(xiàn)(自動擬合為斜體)恕酸,小字號下堪滨,(特別是windows下會在小字號下使用點陣字體的情況下)顯示效果差,造成閱讀困難蕊温。

4.3 字重

[強制] font-weight屬性必須使用數(shù)值方式描述袱箱。

解釋:

CSS 的字重分 100 – 900 共九檔,但目前受字體本身質(zhì)量和瀏覽器的限制义矛,實際上支持 400 和 700 兩檔发笔,分別等價于關(guān)鍵詞 normal 和 bold。

瀏覽器本身使用一系列啟發(fā)式規(guī)則來進行匹配凉翻,在 <700 時一般匹配字體的 Regular 字重了讨,>=700 時匹配 Bold 字重。

但已有瀏覽器開始支持 =600 時匹配 Semibold 字重 (見此表)制轰,故使用數(shù)值描述增加了靈活性量蕊,也更簡短。

示例:

/* good */
h1 {
    font-weight: 700;
}

/* bad */
h1 {
    font-weight: bold;
}

4.4 行高

[建議] line-height在定義的文本段落時艇挨,應(yīng)使用數(shù)值残炮。

解釋:
將 line-height 設(shè)置為數(shù)值,瀏覽器會基于當(dāng)前元素設(shè)置的 font-size 進行再次計算缩滨。在不同字號的文本段落組合中势就,能達(dá)到較為舒適的行間間隔效果,避免在每個設(shè)置了 font-size 都需要設(shè)置 line-height脉漏。

當(dāng) line-height 用于控制垂直居中時苞冯,還是應(yīng)該設(shè)置成與容器高度一致。

示例:

.container {
    line-height: 1.5;
}

5 變換與動畫

[強制] 使用transition時應(yīng)制定transition-property侧巨。

示例:

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

/* bad */
.box {
    transition: all 1s;
}

[建議] 盡可能在瀏覽器能高效實現(xiàn)的屬性上添加過度和動畫舅锄。

解釋:

本文,在可能的情況下應(yīng)選擇這樣四種變換:

  • 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 響應(yīng)式

[強制] Media Query 不得單獨編排,必須與相關(guān)的規(guī)則一起定義坦仍。

示例:

/* Good */
/* header styles */
@media (...) {
    /* header styles */
}

/* main styles */
@media (...) {
    /* main styles */
}

/* footer styles */
@media (...) {
    /* footer styles */
}


/* Bad */
/* header styles */
/* main styles */
/* footer styles */

@media (...) {
    /* header styles */
    /* main styles */
    /* footer styles */
}

[強制] Media Query 如果有多個逗號分隔的條件時鳍烁,應(yīng)將每個條件放在單獨一行中。

示例:

@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 */
}

[建議] 盡可能給出在高分辨率設(shè)備 (Retina) 下效果更佳的樣式繁扎。

7 兼容性

[強制] 帶私有前綴的屬性由長到短排列幔荒,按冒號位置對齊糊闽。

解釋:

標(biāo)準(zhǔn)屬性放在最后,按冒號對齊方便閱讀爹梁,也便于在編輯器內(nèi)進行多行編輯右犹。

示例:

.box {
    -webkit-box-sizing: border-box;
       -moz-box-sizing: border-box;
            box-sizing: border-box;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姚垃,隨后出現(xiàn)的幾起案子念链,更是在濱河造成了極大的恐慌,老刑警劉巖莉炉,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钓账,死亡現(xiàn)場離奇詭異,居然都是意外死亡絮宁,警方通過查閱死者的電腦和手機梆暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绍昂,“玉大人啦粹,你說我怎么就攤上這事【接危” “怎么了唠椭?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忍饰。 經(jīng)常有香客問我贪嫂,道長,這世上最難降的妖魔是什么艾蓝? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任力崇,我火速辦了婚禮,結(jié)果婚禮上赢织,老公的妹妹穿的比我還像新娘亮靴。我一直安慰自己,他們只是感情好于置,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布茧吊。 她就那樣靜靜地躺著,像睡著了一般八毯。 火紅的嫁衣襯著肌膚如雪搓侄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天宪彩,我揣著相機與錄音休讳,去河邊找鬼。 笑死尿孔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播活合,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼雏婶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了白指?” 一聲冷哼從身側(cè)響起留晚,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎告嘲,沒想到半個月后错维,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡橄唬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年赋焕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仰楚。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡隆判,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僧界,到底是詐尸還是另有隱情侨嘀,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布捂襟,位于F島的核電站咬腕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏葬荷。R本人自食惡果不足惜涨共,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闯狱。 院中可真熱鬧煞赢,春花似錦、人聲如沸哄孤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦陈。三九已至凝危,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晨逝,已是汗流浹背蛾默。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捉貌,地道東北人支鸡。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓冬念,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牧挣。 傳聞我的和親對象是個殘疾皇子急前,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • CSS編碼規(guī)范 1 前言 CSS 作為網(wǎng)頁樣式的描述語言,在百度一直有著廣泛的應(yīng)用瀑构。本文檔的目標(biāo)是使 CSS 代碼...
    Top_Chenxi閱讀 164評論 0 0
  • CSS編碼規(guī)范 1 前言 CSS作為網(wǎng)頁樣式的描述語言裆针,在百度一直有著廣泛的應(yīng)用。本文檔的目標(biāo)是使CSS代碼風(fēng)格保...
    春木橙云閱讀 271評論 0 0
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,371評論 2 36
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理寺晌,服務(wù)發(fā)現(xiàn)世吨,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 一呻征、我們有沒有進入機器人的時代 我們先看看下面三則事件 2011年耘婚,富士康對外公布了百萬機器人計劃,計劃在產(chǎn)業(yè)園區(qū)...
    兩閱鵬閱讀 468評論 0 0