Sass 是一門高於 CSS 的元語言,它能用來清晰地、結構化地描述文件樣式,有着比普通 CSS 更增強大的功能。
Sass 可以提供更簡潔、更優雅的語法,同時提供多種功能來建立可維護和管理的樣式表。php
當你指定一個目標元素,併爲該元素設置或更改屬性值時,你能夠建立一組規則。例如,一個按鈕能夠有一個邊框,你經過使用CSS就能夠準確並細緻地控制邊框的類型,厚度和顏色,而後還能夠改變它的背景顏色和按鈕的文本顏色,你只須要短短的三行。css
.button { border: solid 3px black; // 按鈕邊框樣式 background-color: grey; //按鈕背景顏色 color: white; // 按鈕文本顏色 }
Sass正是加入CSS的語法規則。你仍然能夠在Sass中寫普通的CSS語句,它會工做得很好,其實,當你寫Sass代碼時,文件會被編譯成一個標準的CSS文件... ...會有專門的軟件來完成Sass代碼讓瀏覽器識別和轉換成CSS代碼。web
沒用前:寫個css而已,幹嗎要這麼麻煩的用Sass?瀏覽器
用以後:不再想寫CSS了函數
嵌套語法主要是爲了改進CSS中的後代選擇符。這也是Sass和CSS的一個顯著的不一樣點。
使用嵌套前:(沒寫嵌套前會爲了層級關係,或者樣式衝突你會這樣寫)字體
.box ul { display: flex; } .box ul li { height: 40px; line-height: 40px; text-align: center; } .box ul li a { color: #00c16f; }
或者你也能夠把每一個元素加上一個類名,避免樣式衝突,想一想會有多麻煩flex
使用後:(使用後能夠清晰的把每一個代碼塊放在一塊兒,避免衝突)spa
.box { ul { display: flex; li { height: 40px; line-height: 40px; text-align: center; a { color: #00c16f; } } } }
使用Sass嵌套後全部樣式會被解釋成沒寫嵌套前的內種code
引用父選擇符:&blog
在使用嵌套時,你可能但願在該選擇器懸停時或者當body元素具備某個類時具備特殊樣式,就可使用 & 特殊字符
$color: #00c16f; div { color: $color; &:hover { cursor: pointer; } }
被編譯爲:
div {
color:#00c16f;
}
div:hover {
cursor: pointer;
}
Sass容許使用變量,全部變量以$開頭。
$color: #00c16f;
div {
color: $color;
}
若是變量須要鑲嵌在字符串之中,就必須須要寫在#{}之中。
$color: #00c16f; $pixel-size: 1px; $direction: bottom; div { color: $color; border-#{$direction}: $pixel-size solid $color; }
在項目中咱們用到的字體顏色、邊框顏色等等的東西,咱們均可以來定義一個變量,在用的地方去引用,這樣若是變色更改的時候,只需更改這一個全部用到的都會變,這樣下來會方便不少。
Sass容許在代碼中使用算式
div { width: (50px/2); height: 100px + 100px; }
// scss p { color: #001100 + #040506; } p { color: #010 + #040506; } // css p { color: #041606; } p { color: #041606; }
Scss 擴展了 CSS 的繼承,選擇器繼承是說一個選擇器能夠繼承爲另外一個選擇器定義的全部樣式。這個經過@extend
語法實現,以下代碼:
.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; }
輸出的 CSS 代碼爲:
.message, .success, .error, .warning { border: 1px solid #cccccc; padding: 10px; color: #333; } .success { border-color: green; } .error { border-color: red; } .warning { border-color: yellow; }
若是不被引用,它是不會被編譯,也就是:不會佔用css文件大小。這是和繼承最大區別。extend
%font-style { padding: 10px; color: #333; } // 沒有被extend // 不會出如今css文件中 %message { border: 1px solid #ccc; } .success { @extend .message; border-color: green; } .error { @extend .message; border-color: red; } .warning { @extend .message; border-color: yellow; }
編譯後的css代碼:
.success, error , warning { border: 1px solid #ccc; } .success { @extend .message; border-color: green; } .error { @extend .message; border-color: red; } .warning { @extend .message; border-color: yellow; }
SCSS中的函數,經過關鍵字聲明,引用。@mixin@include
無參調用
scss:
@mixin btn { border-radius : 3px; } .box { color: white; @include btn; }
css:
.box { color: white; border-radius: 3px; }
參數調用
scss:
$radius:3px !default; @mixin btn($radius:5px) { // 默認是 5px border-radius : $radius; } .box { color: white; @include btn($radius); // 傳入參數 }
css:
.box { color: white; border-radius: 3px; }
參數過多的狀況
若是一個參數能夠有多組值,如box-shadow、transition等,那麼參數則須要在變量後加三個點"..."表示,如$variables...。
box-shadow能夠有多組值,因此在變量參數後面添加...
@mixin box-shadow($shadow...) { -webkit-box-shadow:$shadow; box-shadow:$shadow; }
scss:
.box{ border:1px solid #ccc; @include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3)); }
css:
.box{ border:1px solid #ccc; -webkit-box-shadow:0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3); box-shadow:0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3); }
@ import 能夠導入style.scss的樣式到當前文件下
1.適當CSS RESET
SASS有reset模塊,可是由於咱們的項目不是全部的reset樣式都用,因此咱們通常適當選擇一部分reset。
2.定義公共變量
根據須要定義使用到的變量,以便引用,公共變量命名需便於理解且不重複。