關于sass(scss)、less、postcss、stylus等的用法與區別

關于sass(scss)、less、postcss、stylus等的用法與區別

一. Sass/Scss、Less、stylus是什么?

它們都是css預處理器。css預處理器的概念:CSS預處理器用一種專門的編程語言,進行Web頁面樣式設計,然后再編譯成正常的CSS文件,以供項目使用。CSS預處理器為CSS增加一些編程的特性,無需考慮瀏覽器的兼容性問題。 比如說:Sass(SCSS)、LESS、Stylus、Turbine、Swithch CSS、CSS Cacheer、DT CSS等。都屬于css預處理器。

其中比較優秀的: Sass、LESS,Stylus

Sass(Syntactically Awesome Stylesheets):

注:Sass官網地址

Sass是一種動態樣式語言,Sass語法屬于縮排語法,比css比多出好些功能(如變量、嵌套、運算,混入(Mixin)、繼承、顏色處理,函數等),更容易閱讀。

Sass與Scss是什么關系?

Sass的縮排語法,對于寫慣css前端的web開發者來說很不直觀,也不能將css代碼加入到Sass里面,因此sass語法進行了改良,Sass 3就變成了Scss(sassy css)。與原來的語法兼容,只是用{}取代了原來的縮進。

Less:

注: Less官方地址

Less也是一種動態樣式語言. 受Sass影響較大,對CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. Less 既可以在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可在服務端運行 (借助 Node.js)。

Stylus:

注: Stylus官方地址

2010年產生于node社區, 主要用來給Node項目進行CSS預處理支持,人氣不如前兩者

Stylus被稱為是一種革命性的新語言,提供一個高效、動態、和使用表達方式來生成CSS,以供瀏覽器使用。Stylus同時支持縮進和CSS常規樣式書寫規則。

需要安裝node

Stylus的語法花樣多一些,它的文件擴展名是“.styl”,Stylus也接受標準的CSS語法,但是他也像Sass老的語法規則,使用縮進控制,同時Stylus也接受不帶大括號({})和分號的語法

Stylus優點:

  • 更加健壯

  • 寫法更接近于js

  • 功能強大

Stylus缺點:

  • 寫法需要一定時間適應

  • 學習曲線比較陡峭

二. Sass/Scss與Less、stylus區別

2.1 編譯環境不一樣

Sass的安裝需要Ruby環境,是在服務端處理的,而Less是需要引入less.js來處理Less代碼輸出css到瀏覽器,也可以在開發環節使用Less,然后編譯成css文件,直接放到項目中,也有 Less.app、SimpleLess、CodeKit.app這樣的工具,也有在線編譯地址。Stylus需要安裝node,然后安裝最新的stylus包即可使用

2.2 變量符不一樣

Less是@,而Scss是, Stylus樣式中聲明變量沒有任何限定,你可以使用“”符號開始。結尾的分號(;)可有可無,但變量名和變量值之間的等號(=)是需要的。有一點需要注意的是,如果我們使用“@”符號開頭來聲明變量,Stylus會進行編譯,但其對應的值并不會賦值給變量。換句話說,在Stylus中不要使用“@”符號開頭聲明變量。Stylus中調用變量的方法和LESS、Sass是完全相同的。

而且變量的作用域也是不一樣的

Less-作用域
@color: #00c; /* 藍色 */
#header {    
    @color: #c00; /* red */
    border: 1px solid @color; /* 紅色邊框 */
}
#footer {
    border: 1px solid @color; /* 藍色邊框 */
}
Less-作用域編譯后
#header{
    border:1px solid #cc0000;
}
#footer{
    border:1px solid #0000cc;
}
scss-作用域
$color: #00c; /* 藍色 */
#header {
    $color: #c00; /* red */
    border: 1px solid $color; /* 紅色邊框 */
}
#footer {
    border: 1px solid $color; /* 藍色邊框 */
}
Sass-作用域編譯后
#header{
    border:1px solid #c00
}
#footer{
    border:1px solid #c00
}
/ *stylus聲明變量*/
mainColor = #963;
siteWidth = 1024px;
$borderStyle = dotted;
/*stylus調用變量*/ | 
/*轉譯出來的CSS*/
body {
    color mainColor | color: #963;
    border 1px $borderStyle mainColor | border:1px dotted #963
    max-width siteWidth | max-width:1024px;| 
}復制代碼

我們可以看出來,less和scss、stylus中的變量會隨著作用域的變化而不一樣。Sass的作用域最差,less和stylus一樣,都是向上查找,直到找到根部位置

2.3 輸出設置

Less沒有輸出設置,Sass提供4中輸出選項:nested, compact, compressed 和 expanded,stylus不知。

輸出樣式的風格可以有四種選擇,默認為nested

  • nested:嵌套縮進的css代碼

  • expanded:展開的多行css代碼

  • compact:簡潔格式的css代碼

  • compressed:壓縮后的css代碼

2.4. 處理條件語句

Sass支持條件語句,可以使用if{}else{},for{}循環等等。 LESS的條件語句使用有些另類,他不是我們常見的關鍵詞if和else if之類,而其實現方式是利用關鍵詞“when”。stylus的條件語句的使用和其他編程的條件語句使用基本類似,不同的是他可以在樣式去省略大括號({}):

/* Sample Sass “if” statement */
@if lightness($color) > 30% {} 
@else {}
/* Sample Sass “for” loop */
@for $i from 1 to 10 {
    .border-#{$i} {
        border: #{$i}px solid blue;
    }
}
stylus中:
box(x, y, margin = false)padding y xif marginmargin y xbodybox(5px, 10px, true)
Stylus同樣可以和else if、else配套使用:
box(x, y, margin-only = false)if margin-onlymargin y xelsepadding y x復制代碼

sass中使用條件:

.mixin (@a) when (@a >= 10) {
    background-color: black;
}
.mixin (@a) when (@a < 10) {
    background-color: white;
}
.class1 { 
    .mixin(12) 
}
.class2 { 
    .mixin(6) 
}
復制代碼

轉譯后:

.class1 {
    background-color: black;
}
.class2 {
    background-color: white;
}復制代碼

2.5 引用外部CSS文件

scss引用的外部文件命名必須以_開頭, 如下例所示:其中_test1.scss、_test2.scss、test3.scss文件分別設置的h1 h2 h3。文件名如果以下劃線開頭的話,Sass會認為該文件是一個引用文件,不會將其編譯為css文件.

// 源代碼:
@import "_test1.scss";
@import "_test2.scss";
@import "_test3.scss";
// 編譯后:
h1 {
    font-size: 17px;
}
h2 {
    font-size: 17px;
}
h3 {
    font-size: 17px;
}復制代碼

Less引用外部文件和css中的@import沒什么差異。

Stylus同樣可以用@import,也支持其他文件通過@import進行引入

2.6 Sass和Less的工具庫不同

Sass有工具庫Compass, 簡單說,Sass和Compass的關系有點像Javascript和jQuery的關系,Compass是Sass的工具庫。在它的基礎上,封裝了一系列有用的模塊和模板,補充強化了Sass的功能。

Less有UI組件庫Bootstrap,Bootstrap是web前端開發中一個比較有名的前端UI組件庫,Bootstrap的樣式文件部分源碼就是采用Less語法編寫。

Archer一個的英文面向移動端的的,基于stylus的樣式工具庫。

Archer于起源est項目,于專注純移動端的瀏覽器的樣式展示。如有本地桌面端的需求,請使用est

三. 總結

不管是Sass,還是Less或者stylus,都可以視為一種基于CSS之上的高級語言,其目的是使得CSS開發更靈活和更強大,Sass、stylus的功能比Less強大,基本可以說是一種真正的編程語言了,Less則相對清晰明了,易于上手,對編譯環境要求比較寬松??紤]到編譯Sass要安裝Ruby,而Ruby官網在國內訪問不了,個人在實際開發中更傾向于選擇Less。

四、PostCSS

官網地址

  • PostCSS介紹:

A tool for transforming CSS with JavaScript

PostCSS 是目前流行的一個對 CSS 進行處理的工具(平臺)。PostCSS 依托其強大的插件體系為 CSS 處理增加了無窮的可能性。

PostCSS 本身是一個功能比較單一的工具。它提供了一種方式用 JavaScript 代碼來處理 CSS。它負責把 CSS 代碼解析成抽象語法樹結構(Abstract Syntax Tree,AST),再交由插件來進行處理。插件基于 CSS 代碼的 AST 所能進行的操作是多種多樣的,比如可以支持變量和混入(mixin),增加瀏覽器相關的聲明前綴,或是把使用將來的 CSS 規范的樣式規則轉譯(transpile)成當前的 CSS 規范支持的格式。從這個角度來說,PostCSS 的強大之處在于其不斷發展的插件體系。目前 PostCSS 已經有 200 多個功能各異的插件。開發人員也可以根據項目的需要,開發出自己的 PostCSS 插件。

PostCSS 從其誕生之時就帶來了社區對其類別劃分的爭議。這主要是由于其名稱中的 post,很容易讓人聯想到 PostCSS 是用來做 CSS 后處理(post-processor)的,從而與已有的 CSS 預處理(pre-processor)語言,如 SASS 和 LESS 等進行類比。實際上,PostCSS 的主要功能只有兩個:第一個就是前面提到的把 CSS 解析成 JavaScript 可以操作的 AST,第二個就是調用插件來處理 AST 并得到結果。因此,不能簡單的把 PostCSS 歸類成 CSS 預處理或后處理工具。PostCSS 所能執行的任務非常多,同時涵蓋了傳統意義上的預處理和后處理。PostCSS 是一個全新的工具,給前端開發人員帶來了不一樣的處理 CSS 的方式。

  • PostCSS使用

PostCSS 一般不單獨使用,而是與已有的構建工具進行集成。PostCSS 與主流的構建工具,如 Webpack、Grunt 和 Gulp 都可以進行集成。完成集成之后,選擇滿足功能需求的 PostCSS 插件并進行配置。現在經常用到的是基于PostCSS的Autoprefixer插件,使用方式可以在官網的插件庫進行查詢。下面是官方插件庫地址:

PostCSS插件庫地址

  • PostCSS的優點

1.擴展性強 2.兼容性強 3.功能全面 4.有很多插件庫供選擇

  • PostCSS的缺點

1.配置繁瑣 2.學習相對陡峭

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容