SASS是什麼
傳統的CSS是一種單純的描述性樣式文件,然而SASS可以對CSS進行預先編譯處理。 在SASS原始碼中可以使用變數、函數、繼承等動態語言的特性,並且可以編譯成CSS檔案。
安裝與使用
安裝
由於sass是ruby寫的,所以想要使用sass就需要安裝ruby環境。然後再使用gem安裝sass。 輸入下面的指令進行安裝sass:
gem install sass
可以使用sass -v指令查看sass的版本。
使用
新建一個後綴名為.scss源碼文件,就可以編輯sass源碼了。 然後使用下面的命令可以將原始碼檔案編譯轉換為css並顯示在螢幕上。
sass test.scss
也可以在後面加上後綴名為.css的檔名,就可以在目前目錄產生css檔。如下:
sass test.scss test.css
註:.sass與.scss這兩種的區別在於.sass檔案對程式碼的排版有著非常嚴格的要求,而且沒有大括號,沒有分號。
指令參數
--style:編譯風格 sass提供四種編譯風格選項:
nested:嵌套縮排的css程式碼,它是預設值。
expanded:沒有縮排的、擴充的css程式碼。
compact:簡潔格式的css程式碼。
compressed:壓縮後的css程式碼。
e.g.
sass test.scss test.css --style compressed
--watch:監聽檔案變動 sass可以監聽原始檔變動,並自動產生編譯後的版本。 e.g.
//监听单个文件sass --watch test.scss:test.css //监听目录sass --watch sassFileDirectory:cssFileDirectory
變數
SASS使用$開頭定義變數
$white:#FFFFFF;body{ color: $white; }
如果需要將變數插入字串中,需要將變數寫在#{}中
$imgUrl:"../img/test.png";body{ background-image: url(#{$imgUrl}); }
運算
巢狀SASS允許巢狀規則$min-left:10px;body{ margin-left:$min-left+20px; }編譯成CSS樣式為:
div{ //选择器嵌套 p{ color:#FFFFFF; } //属性嵌套 margin:{ left:10px; } //伪类嵌套 &:hover{ color:#F4F4F4; } }繼承SASS可以使用@extend繼承於另一個選擇器。
.page{ background-color:#F7F7F7; } .div1{ @extend .page; color:#FFFFFF; }
Mixin
SASS提供Mixin类似“函数”的重用代码块。 使用@mixin定义样式代码块,然后使用@include调用该样式。 不同于@extend的是Mixin定义样式不会编译输出在CSS样式中,并且可以指定参数和默认值。
//不带参数的mixin @mixin page{ background-color:#F7F7F7; } //带参数的mixin @mixin setDefMargin($left, $right, $bottom: 10px,$top: 10px){ margin:$top $right $bottom $left; } .test{ @include page; @include setDefMargin(20px,30px); color:#FFFFFF; }
需要注意的是,必须先定义没有默认值的参数,后指定有默认值的参数。
Import
sass可以使用@import语句,来引用指定的外部文件。
//引入scss文件 @import "variable.scss"; //引入css样式文件 @import "style.css";
条件语句
使用@if和@else语句可以用来做条件判断
$min-margin: 10px; @mixin init-margin($left){ //判断传入的参数是否大于最小值 @if $left > $min-margin { margin-left: $left; } @else { margin-left: $min-margin; } } body { @include init-margin(5px); }
循环语句
FOR循环
使用@for来定义循环体。 $i表示循环变量,from 后面跟上开始数值,to后面跟结束数值。
@for $i from 1 to 20 { .page-index#{$i} { color: #FFFFFF; } }
WHILE循环
使用@while定义循环体,后面跟循环条件
//循环变量 $i: 2; @while $i<10{ page-index#{$i} { color: #F4F4F4; } $i=$i=1; }
自定义函数
使用@function语句可以自定义函数,@return表示函数的返回值
@function calcNumber($num) { @return $num+10; }body { margin-left: calcNumber(20px); }