CSS預(yù)處理,總有一款適合你

相信前端開發(fā)人員對于CSS(Cascading Style Sheet-級聯(lián)樣式表)這種“面向命名語言”军浆,一定非常熟悉棕洋。你可能在某個舍友熟睡的深夜,還在電腦面前被 css 繁重乒融、冗雜的樣式掰盘,折磨的死去活來。

我們曾經(jīng)面對 css 很多令人發(fā)指的不友好特性赞季,也因為 css 的低復(fù)用性而刀耕火種庆杜。

為了擺脫這樣的苦惱,CSS預(yù)處理器因此而誕生碟摆。

概念

CSS 預(yù)處理器用一種專門的編程語言晃财,進(jìn)行 Web 頁面樣式設(shè)計,然后再編譯成正常的 CSS 文件典蜕,以供項目使用断盛。CSS 預(yù)處理器為 CSS 增加一些編程的特性蔚舀,無需考慮瀏覽器的兼容性問題抖仅。

理由

  1. CSS語法不夠強(qiáng)大笨使,比如無法嵌套書寫導(dǎo)致模塊化開發(fā)中需要書寫很多重復(fù)的選擇器嗜憔;
  2. 沒有變量和合理的樣式復(fù)用機(jī)制邢锯,使得邏輯上相關(guān)的屬性值必須以字面量的形式重復(fù)輸出呜象,導(dǎo)致難以維護(hù)等

看到這里很多小伙伴就要問了呼寸,到底有哪些主流的預(yù)處理器呢稳捆?

Sass:2007年誕生火的,最早也是最成熟的CSS預(yù)處理器壶愤,擁有ruby社區(qū)的支持和compass這一最強(qiáng)大的css框架,目前受LESS影響馏鹤,已經(jīng)進(jìn)化到了全面兼容CSS的SCSS征椒。

Less:2009年出現(xiàn),受SASS的影響較大湃累,在ruby社區(qū)之外支持者遠(yuǎn)超過SASS勃救,其缺點是比起SASS來碍讨,可編程功能不夠,不過優(yōu)點是簡單和兼容CSS蒙秒。著名的Twitter Bootstrap就是采用LESS做底層語言的勃黍。

Stylus:2010年產(chǎn)生,來自Node.js社區(qū)晕讲,主要用來給Node項目進(jìn)行CSS預(yù)處理支持覆获,在此社區(qū)之內(nèi)有一定支持者,在廣泛的意義上人氣還完全不如SASS和LESS益兄。

那這些預(yù)處理器有哪些相似之處呢锻梳?

相同點

可以在 CSS 中使用變量、簡單的程序邏輯净捅、函數(shù)等等在編程語言中的一些基本技巧疑枯,可以讓你的 CSS 更見簡潔,適應(yīng)性更強(qiáng)蛔六,代碼更直觀等荆永。

不同點

1.變量:

  • Sass聲明變量必須是“$”開頭,后面緊跟變量名和變量值国章,而且變量名和變量值需要使用冒號:分隔開具钥。
  • Less 聲明變量用“Sass聲明變量必須是“$”開頭,后面緊跟變量名和變量值液兽,而且變量名和變量值需要使用冒號:分隔開骂删。
  • Less 聲明變量用“@”法和Less、Sass完全相同四啰。

2.作用域:

css 預(yù)編譯器把變量賦予作用域宁玫,也就是存在生命周期。就像 js 一樣柑晒,它會先從局部作用域查找變量欧瘪,依次向上級作用域查找。

  • Sass:三者最差匙赞,不存在全局變量的概念佛掖。
  • Less:我認(rèn)為跟 JS 一樣,逐級查找涌庭,向上冒泡芥被。
  • Stylus:完全等同 Less。Stylus 和 Sass 則更傾向于指令式脾猛。

3.嵌套:

十分真誠的說撕彤,三種 css 預(yù)編譯器的選擇器嵌套在使用上來說沒有任何區(qū)別(也可能是我沒發(fā)現(xiàn))。Sass 除了常規(guī)的采用“&”替代父級選擇器之外猛拴,還提供了奇葩的屬性嵌套:

/*style.sass*/
.footer {  
   font: {    
     family:  微軟雅黑;    
     size: 5rem;   
     weight: bolder;  
  }
}

4.繼承:

css 屬性的繼承是一個非常重要的特性羹铅,好消息是三種預(yù)編譯器都對此做出了改善。

  • Sass和Stylus的繼承非常像愉昆,能把一個選擇器的所有樣式繼承到另一個選擇器上职员。使用“@extend”開始,后面接被繼承的選擇器跛溉。
.shit {  
    margin: 10px 5px;  
    padding: 2px;
}
p {  
    @extend .shit; /*繼承.block*/ 
    border: 1px solid #aaa;
}
ul,li {  
    @extend .shit;  /*繼承.block*/  
    color: #aaa;
}

將被編譯成標(biāo)準(zhǔn) css:

.shit,p,ul,ol {  
    margin: 10px 5px;  
    padding:2px;
}
p {  
    border: 1px solid #aaa
}
ul,li { 
   color:#aaa;
}
  • Less 繼承:與前兩者繼承方式有所區(qū)別焊切,它不是在選擇器上繼承,而是將Mixins中的樣式嵌套到每個選擇器里面芳室。然而這樣會帶來一個明顯的缺點:每個選擇器中會出現(xiàn)重復(fù)的樣式专肪。

5.導(dǎo)入@Import:

CSS中,不建議用@import導(dǎo)入css堪侯,因為會增加http請求嚎尤。但 CSS 預(yù)處理器中的導(dǎo)入和CSS的有hhe很大區(qū)別,它是將不同 css 是在語義上導(dǎo)入伍宦,最終編譯結(jié)果會生成一個CSS文件芽死。

值得注意的是,如果不同文件相互引入的時候次洼,出現(xiàn)相同變量名時可能會引起錯誤关贵。所以我的建議是單獨有一個 var.sass/less/styl 文件來記錄所有你定義的變量。

Less 為@Import 擴(kuò)展了語法卖毁,而 Sass 和 Stylus 并沒有揖曾。

使用

目前各大前端框架都已支持當(dāng)下主流的預(yù)編譯器,只需要根據(jù)文檔添加配置即可亥啦;此外也可以利用webpack去配置使用(想了解webpack相關(guān)內(nèi)容炭剪,可持續(xù)關(guān)注“一郭鮮”)。

總結(jié)

  • Sass和Less語法嚴(yán)謹(jǐn)禁悠、Stylus相對自由念祭。因為Less長得更像CSS,所以它可能學(xué)習(xí)起來更容易碍侦。* Sass 和 Compass粱坤、Stylus 和 Nib 都是好基友。* Sass 和 Stylus 都具有類語言的邏輯方式處理:條件瓷产、循環(huán)等站玄,而 Less 需要通過When等關(guān)鍵詞模擬這些功能,這方面 Less 比不上 Sass 和 Stylus濒旦。* Less 在豐富性以及特色上都不及 Sass 和 Stylus株旷,若不是因為 Bootstrap 引入了 Less,可能它不會像現(xiàn)在這樣被廣泛應(yīng)用(個人愚見)。

還沒嘗試的小伙伴抓緊時間行動起來吧晾剖,各款預(yù)處理器任你挑選锉矢,總有一款適合你。

有任何前端問題可以私信我齿尽,想了解更多前端知識歡迎關(guān)注公眾號“一郭鮮”沽损,小郭等著你的到來

一郭鮮
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市循头,隨后出現(xiàn)的幾起案子绵估,更是在濱河造成了極大的恐慌,老刑警劉巖卡骂,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件国裳,死亡現(xiàn)場離奇詭異,居然都是意外死亡全跨,警方通過查閱死者的電腦和手機(jī)缝左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螟蒸,“玉大人盒使,你說我怎么就攤上這事∑呦樱” “怎么了少办?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诵原。 經(jīng)常有香客問我英妓,道長,這世上最難降的妖魔是什么绍赛? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蔓纠,我火速辦了婚禮,結(jié)果婚禮上吗蚌,老公的妹妹穿的比我還像新娘腿倚。我一直安慰自己,他們只是感情好蚯妇,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布敷燎。 她就那樣靜靜地躺著,像睡著了一般箩言。 火紅的嫁衣襯著肌膚如雪硬贯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天陨收,我揣著相機(jī)與錄音饭豹,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛拄衰,可吹牛的內(nèi)容都是我干的它褪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肾砂,長吁一口氣:“原來是場噩夢啊……” “哼列赎!你這毒婦竟也來了宏悦?” 一聲冷哼從身側(cè)響起镐确,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饼煞,沒想到半個月后源葫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡砖瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年息堂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片块促。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡荣堰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竭翠,到底是詐尸還是另有隱情振坚,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布斋扰,位于F島的核電站渡八,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏传货。R本人自食惡果不足惜屎鳍,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望问裕。 院中可真熱鬧逮壁,春花似錦、人聲如沸粮宛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窟勃。三九已至祖乳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秉氧,已是汗流浹背眷昆。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亚斋。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓作媚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帅刊。 傳聞我的和親對象是個殘疾皇子纸泡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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