Sass (Syntactically Awesome Stylesheets)是一種動態樣式語言,語法跟css同樣(但多了些功能),比css好寫,並且更容易閱讀。Sass語法相似與Haml,屬於縮排語法(makeup),用意就是爲了快速寫Html和Css。javascript
Less一種動態樣式語言. 將CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. LESS 既能夠在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可一在服務端運行 (藉助 Node.js)。less中文站css
Sass與Scss有什麼差異前端
Sass原先跟Haml同樣的縮排語法,對於寫慣Css的前端來講是很不直觀的,也不能將原來的Css加到Sass裏面,所以Sass改良了語法,Sass 3就變成了Scss(Sassy CSS)。與原來的語法兼容,只是用{}取代了原來的縮進。java
Sassnode
.content margin:10px auto h1 font-size:24px;
Scssweb
.content{ margin:10px auto h1{ font-size:24px; } }
1.Sass是基於Ruby的,是在服務端處理的,而Less是須要引入less.js來處理Less代碼輸出Css到瀏覽器,也能夠在開發環節使用Less,而後編譯成Css文件,直接放到項目中,也有Less.app、SimpleLess、CodeKit.app這樣的工具,也有在線編譯地址。npm
2.變量符不同,less是@,而Scss是$,並且變量的做用域也不同,後面會講到。瀏覽器
3.輸出設置,Less沒有輸出設置,Sass提供4中輸出選項:nested, compact, compressed 和 expanded。sass
4.Sass支持條件語句,可使用if{}else{},for{}循環等等。而Less不支持。服務器
/* Sample Sass "if" statement */ @if lightness($color) > 30% { background-color: #000; } @else { background-color: #fff; } /* Sample Sass "for" loop */ @for $i from 1 to 10 { .border-#{$i} { border: #{$i}px solid blue; } }
容許咱們單獨定義通用的樣式,這樣能夠在css中調用。
Less 變量
@color:#4d926f; #header{ color:@color; } h2{ color:@color; }
Scss 變量
$color:#4d926f; #header{ color:$color; } h2{ color:$color; }
編譯後的css
#header{color:#4d926f;} h2{color:#4d926f;}
混合能夠將一個定義好的class A輕鬆的引入到另外一個class B中,從而簡單實現class B繼承class A中的全部屬性。咱們還能夠帶參數地調用,就像使用函數同樣。
Less 混合
.rounded-corners (@radius: 5px) { border-radius: @radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; } #header { .rounded-corners; } #footer { .rounded-corners(11px); }
Scss 混合
@mixin rounded-corners ($radius: 5px) { border-radius: $radius; -webkit-border-radius: $radius; -moz-border-radius: $radius; } #header { @include rounded-corners; } #footer { @include rounded-corners(11px); }
編譯後的css
#header{ border-radius:5px; -webkit-border-radius:5px; -moz-border-radius:5px; } #footer{ border-radius:11px; -webkit-border-radius:11px; -moz-border-radius:11px; }
咱們能夠在一個選擇器中嵌套另外一個選擇器來實現繼承,這樣很大程度減小了代碼量,而且代碼看起來更加的清晰。
Less 嵌套
#header { h1 { font-size: 26px; font-weight: bold; } p { font-size: 12px; a { text-decoration: none; &:hover { border-width: 1px } } } }
Scss 嵌套
#header { h1 { font-size: 26px; font-weight: bold; } p { font-size: 12px; a { text-decoration: none; &:hover { border-width: 1px } } } }
編譯後的css
#header h1 { font-size: 26px; font-weight: bold; } #header p { font-size: 12px; } #header p a { text-decoration: none; } #header p a:hover { border-width: 1px; }
運算提供了加,減,乘,除操做;咱們能夠作屬性值和顏色的運算,這樣就能夠實現屬性值之間的複雜關係。
Less 函數運算
@the-border: 1px; @base-color: #111; @red: #842210; #header { color: @base-color * 3; border-left: @the-border; border-right: @the-border * 2; } #footer { color: @base-color + #003300; border-color: desaturate(@red, 10%); }
Scss-函數運算
$the-border: 1px; $base-color: #111; $red: #842210; #header { color: $base-color * 3; border-left: $the-border; border-right: $the-border * 2; } #footer { color: $base-color + #003300; border-color: desaturate($red, 10%); }
編譯後的css
#header { color: #333; border-left: 1px; border-right: 2px; } #footer { color: #114411; border-color: #7d2717; }
提供了一系列的顏色運算函數. 顏色會先被轉化成 HSL 色彩空間, 而後在通道級別操做:
lighten(@color, 10%); /* return a color which is 10% *lighter* than @color */ darken(@color, 10%); /* return a color which is 10% *darker* than @color */ saturate(@color, 10%); /* return a color 10% *more* saturated than @color */ desaturate(@color, 10%); /* return a color 10% *less* saturated than @color */ fadein(@color, 10%); /* return a color 10% *less* transparent than @color */ fadeout(@color, 10%); /* return a color 10% *more* transparent than @color */ spin(@color, 10); /* return a color with a 10 degree larger in hue than @color */ spin(@color, -10); /* return a color with a 10 degree smaller hue than @color */
Scss一樣也支持color函數,只須要將@改成$便可。
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; /* 藍色邊框 */ }
Less-做用域編譯後
#header{border:1px solid #c00} #footer{border:1px solid #c00}
咱們能夠看出來,less和scss中的變量會隨着做用域的變化而不同,上面的例子能很好的解釋這點。
文件引入
Less-import
@import "lib.less"; @import "lib";
在Scss中,也是能夠import。
scss-import
//須要被 import 的文件必須以 _開頭命名,如 _rounded.scss @import "rounded";
Scss的安裝須要Ruby環境
$ gem install sass
安裝後就能夠直接編譯Sass了
$ sass --watch style.scss:style.css
還有一個利器就是大名頂頂的Compass,後面我會用一篇博文來介紹下。
引入你的 .less 樣式文件的時候要設置 rel 屬性值爲 「stylesheet/less」:
<link rel="stylesheet/less" type="text/css" href="styles.less">
而後在Less官網下載 less.js, 在 中引入:
<script src="less.js" type="text/javascript"></script>
注意你的less樣式文件必定要在引入less.js前先引入。
在服務器端安裝 LESS 的最簡單方式就是經過 npm(node 的包管理器), 像這樣:
$ npm install less
若是你想下載最新穩定版本的 LESS,能夠嘗試像下面這樣操做:
$ npm install less@latest
在命令行下使用
你能夠在終端調用 LESS 解析器:
$ lessc styles.less
上面的命令會將編譯後的 CSS 傳遞給 stdout, 你能夠將它保存到一個文件中:
$ lessc styles.less > styles.css
如何你想將編譯後的 CSS 壓縮掉,那麼加一個 -x 參數就能夠了.
還有些編譯工具上面也有講過,那些更加的方便。
參考資料
http://coding.smashingmagazine.com/2011/09/09/an-introduction-to-less-and-comparison-to-sass/
http://www.lesscss.org
http://www.lesscss.net
http://sass-lang.com