Sass (Syntactically Awesome Stylesheets)是一種動態樣式語言,Sass語法屬於縮排語法,比css比多出好些功能(如變量、嵌套、運算,混入(Mixin)、繼承、顏色處理,函數等),更容易閱讀。css
Sass與Scss是什麼關係?前端
Sass的縮排語法,對於寫慣css前端的web開發者來講很不直觀,也不能將css代碼加入到Sass裏面,所以sass語法進行了改良,Sass 3就變成了Scss(sassy css)。與原來的語法兼容,只是用{}取代了原來的縮進。web
Less也是一種動態樣式語言. 對CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. Less 既能夠在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可在服務端運行 (藉助 Node.js)。編程
Sass的安裝須要Ruby環境,是在服務端處理的,而Less是須要引入less.js來處理Less代碼輸出css到瀏覽器,也能夠在開發環節使用Less,而後編譯成css文件,直接放到項目中,也有 Less.app、SimpleLess、CodeKit.app這樣的工具,也有在線編譯地址。瀏覽器
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} 咱們能夠看出來,less和scss中的變量會隨着做用域的變化而不同。
輸出樣式的風格能夠有四種選擇,默認爲nestedsass
/* 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; } }
scss引用的外部文件命名必須以_開頭, 以下例所示:其中_test1.scss、_test2.scss、_test3.scss文件分別設置的h1 h2 h3。文件名若是如下劃線_開頭的話,Sass會認爲該文件是一個引用文件,不會將其編譯爲css文件.app
// 源代碼: @import "_test1.scss"; @import "_test2.scss"; @import "_test3.scss";
// 編譯後: h1 { font-size: 17px; } h2 { font-size: 17px; } h3 { font-size: 17px; }
Less引用外部文件和css中的@import沒什麼差別。less
Sass有工具庫Compass, 簡單說,Sass和Compass的關係有點像Javascript和jQuery的關係,Compass是Sass的工具庫。在它的基礎上,封裝了一系列有用的模塊和模板,補充強化了Sass的功能。編程語言
Less有UI組件庫Bootstrap,Bootstrap是web前端開發中一個比較有名的前端UI組件庫,Bootstrap的樣式文件部分源碼就是採用Less語法編寫。函數
無論是Sass,仍是Less,均可以視爲一種基於CSS之上的高級語言,其目的是使得CSS開發更靈活和更強大,Sass的功能比Less強大,基本能夠說是一種真正的編程語言了,Less則相對清晰明瞭,易於上手,對編譯環境要求比較寬鬆。考慮到編譯Sass要安裝Ruby,而Ruby官網在國內訪問不了,我的在實際開發中更傾向於選擇Less。