在前端開發(fā)中,類似Less审洞,Sass這樣的預(yù)處理器莱睁,變得越來越常見,由于CSS發(fā)展的制約芒澜,使得CSS開發(fā)時(shí),當(dāng)代碼量越來越大创淡,項(xiàng)目變得難以管理和維護(hù)痴晦。
Sass可以讓你使用一些在CSS中沒有的特性,比如變量琳彩,nesting誊酌,mixins,繼承和其他好的特性,讓你編寫CSS變得更加方便露乏。
所以碧浊,學(xué)習(xí)并使用一款CSS預(yù)處理器也漸漸變成一個(gè)前端工程師必不可少的技能。在多個(gè)預(yù)處理器中瘟仿,我選擇了Sass箱锐。
一些基礎(chǔ)
Sass有兩種語法,使用哪一種取決于個(gè)人愛好劳较,只是兩種格式需要對(duì)應(yīng)不同的后綴驹止。
- SCSS,本教程使用這個(gè)語法观蜗。這是一個(gè)CSS語法的擴(kuò)展臊恋,這意味著,在CSS中可以使用的功能墓捻,在SCSS中都是同樣的功能抖仅。同時(shí),SCSS支持所有CSS hacks和特定瀏覽器語法砖第。詳細(xì)情況在 這里
- SASS,這是比較老的語法撤卢,使用縮進(jìn)代替了大括號(hào),使得寫起來更加快捷厂画,看起來也更清爽
開始使用
當(dāng)安裝好Sass之后凸丸,你可以使用命令 sass --watch app/stylesheets_dirctory
使用變量
你可以使用$
來定義變量
$font-stack: Helvetica, sans-serif;
body {
font: 100% $font-stack;
}
經(jīng)過Sass編譯之后,輸出的文件是這樣的:
body {
font: 100% Helvetica, sans-serif;
}
這樣的的話袱院,你就可以在整個(gè)項(xiàng)目中共享一些同樣的變量屎慢,而不必每次重新定義瞭稼,當(dāng)需要做更改的時(shí)候,只有改變變量的值腻惠,在重新編譯之后环肘,使用這個(gè)變量的地方就自動(dòng)更新為新的值了。
嵌套(Nesting)
在HTML里面集灌,各個(gè)元素是可以嵌套的悔雹,而在CSS里,目前還不可以原生支持這樣的功能欣喧,Sass就能幫我們實(shí)現(xiàn)腌零。
nav {
font-size: 1.5em;
li {
display: inline-block;
}
}
經(jīng)過編譯后:
nav {
font-size: 1.5em;
}
nav li {
display: inline-block;
}
Import
Sass提供了Import的功能,你可以把Sass寫到多個(gè)文件唆阿,然后自由組合他們益涧,然后編譯的時(shí)候,他們會(huì)自動(dòng)合并到單個(gè)文件里驯鳖。
// _reset.scss
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
// base.scss
@import 'reset';
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
在編譯之后:
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
Mixins
當(dāng)前的瀏覽器闲询,有的特性可能需要你寫不同的前綴,比如 -webkit -moz -ms
浅辙,Mixins提供了一個(gè)快捷的方法使你從寫這些煩人的前綴中解放出來扭弧。你可以提供多個(gè)value值來定制自己的Mixin
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
在編譯過后:
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}
擴(kuò)展和繼承
這可能是SASS里最有用的一個(gè)功能,它讓你的CSS擁有了繼承的能力记舆,使用@extend
這個(gè)關(guān)鍵字繼承一個(gè)CSS集合鸽捻,解決了很多不必要的重復(fù)。直接看官方的例子吧:
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
在編譯之后:
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
運(yùn)算符
Sass擁有數(shù)學(xué)計(jì)算的功能氨淌,例如+, -, *, /, %
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complementary"] {
float: right;
width: 300px / 960px * 100%;
}
在編譯之后:
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complementary"] {
float: right;
width: 31.25%;
}
作者注:這篇文章大部分內(nèi)容來自官方入門指南泊愧,需要更多內(nèi)容可以直接看官方文檔。