Sass進階

-------------------------一、控制指令---------------------------
1、@if 指令是一個 SassScript,它可以根據條件來處理樣式塊,如果條件為 true 返回一個樣式塊,反之 false 返回另一個樣式塊。在 Sass 中除了 @if 之,還可以配合 @else if 和 @else 一起使用。
2、@for循環(上)在 Sass 中,可以使用 @for 循環來完成。在 Sass 的 @for 循環中有兩種方式:

@for $i from <start> through <end>
@for $i from <start> to <end>

$i 表示變量
start 表示起始值
end 表示結束值
這兩個的區別是關鍵字 through 表示包括 end 這個數,而 to 則不包括 end 這個數。
如下代碼,先來個使用 through 關鍵字的例子:

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

編譯出來的 CSS:

.item-1 {
  width: 2em;
}
.item-2 {
  width: 4em;
}
.item-3 {
  width: 6em;
}

再來個 to 關鍵字的例子:

@for $i from 1 to 3 {
  .item-#{$i} { width: 2em * $i; }
}

編譯出來的 CSS:

.item-1 {
  width: 2em;
}
.item-2 {
  width: 4em;
}

3、@for循環 (下)
//SCSS

$grid-prefix: span !default;
$grid-width: 60px !default;
$grid-gutter: 20px !default;
%grid {
  float: left;
  margin-left: $grid-gutter / 2;
  margin-right: $grid-gutter / 2;
}
//through
@for $i from 1 through 12 {
  .#{$grid-prefix}#{$i}{
    width: $grid-width * $i + $grid-gutter * ($i - 1);
    @extend %grid;
  }  
}
//to
@for $i from 1 to 13 {
  .#{$grid-prefix}#{$i}{
    width: $grid-width * $i + $grid-gutter * ($i - 1);
    @extend %grid;
  }  
}

4、@while循環 @while 指令也需要 SassScript 表達式(像其他指令一樣),并且會生成不同的樣式塊,直到表達式值為 false 時停止循環。這個和 @for 指令很相似,只要 @while 后面的條件為 true 就會執行。

//SCSS
$types: 4;
$type-width: 20px;

@while $types > 0 {
    .while-#{$types} {
        width: $type-width + $types;
    }
    $types: $types - 1;
}

編譯出來的 CSS

.while-4 {
  width: 24px;
}

.while-3 {
  width: 23px;
}

.while-2 {
  width: 22px;
}

.while-1 {
  width: 21px;
}

5、@each循環 @each 循環就是去遍歷一個列表,然后從列表中取出對應的值。
@each 循環指令的形式:

@each $var in <list>

如:

//scss
$list: adam john wynn mason kuroir;//$list 就是一個列表
@mixin author-images {
    @each $author in $list {
        .photo-#{$author} {
            background: url("/images/avatars/#{$author}.png") no-repeat;
        }
    }
}
.author-bio {
    @include author-images;
}

編譯出來的css

.author-bio .photo-adam {
  background: url("/images/avatars/adam.png") no-repeat; }
.author-bio .photo-john {
  background: url("/images/avatars/john.png") no-repeat; }
.author-bio .photo-wynn {
  background: url("/images/avatars/wynn.png") no-repeat; }
.author-bio .photo-mason {
  background: url("/images/avatars/mason.png") no-repeat; }
.author-bio .photo-kuroir {
  background: url("/images/avatars/kuroir.png") no-repeat; }

--------------------二、Sass的函數功能-字符串與數字函數 -----------------
1、Sass的函數簡介
在 Sass 中除了可以定義變量,具有 @extend、%placeholder 和 mixins 等特性之外,還自備了一系列的函數功能。其主要包括:
字符串函數
數字函數
列表函數
顏色函數
Introspection 函數
三元函數等
當然除了自備的函數功能之外,我們還可以根據自己的需求定義函數功能,常常稱之為自定義函數。
2、字符串函數-unquote()函數
字符串函數顧名思意是用來處理字符串的函數。Sass 的字符串函數主要包括兩個函數:
unquote($string):刪除字符串中的引號;
quote($string):給字符串添加引號。
(1)、unquote()函數 unquote() 函數主要是用來刪除一個字符串中的引號,如果這個字符串沒有帶有引號,將返回原始的字符串。

//SCSS
.test1 {
    content:  unquote('Hello Sass!') ;
}
.test2 {
    content: unquote("'Hello Sass!");
}
.test3 {
    content: unquote("I'm Web Designer");
}
.test4 {
    content: unquote("'Hello Sass!'");
}
.test5 {
    content: unquote('"Hello Sass!"');
}
.test6 {
    content: unquote(Hello Sass);
}

編譯的代碼

//CSS
.test1 {
  content: Hello Sass!; }

.test2 {
  content: 'Hello Sass!; }

.test3 {
  content: I'm Web Designer; }

.test4 {
  content: 'Hello Sass!'; }

.test5 {
  content: "Hello Sass!"; }

.test6 {
  content: Hello Sass; }

(2)quote() 函數剛好與 unquote() 函數功能相反,主要用來給字符串添加引號。如果字符串,自身帶有引號會統一換成雙引號 ""

//SCSS
.test1 {
    content:  quote('Hello Sass!');
}
.test2 {
    content: quote("Hello Sass!");
}
.test3 {
    content: quote(ImWebDesigner);
}
.test4 {
    content: quote(' ');
}

編譯出來的 css 代碼:

//CSS
.test1 {
  content: "Hello Sass!";
}
.test2 {
  content: "Hello Sass!";
}
.test3 {
  content: "ImWebDesigner";
}
.test4 {
  content: "";
}

使用 quote() 函數只能給字符串增加雙引號,而且字符串中間有單引號或者空格時,需要用單引號或雙引號括起,否則編譯的時候將會報錯。

.test1 {
    content:  quote(Hello Sass);
}

這樣使用,編譯器馬上會報錯:

error style.scss (Line 13: $string: ("Hello""Sass") is not a string for `quote')

解決方案就是去掉空格,或者加上引號:

.test1 {
    content:  quote(HelloSass);
}
.test1 {
    content:  quote("Hello Sass");
}

同時 quote() 碰到特殊符號,比如: !、?、> 等,除中折號 - 和 下劃線_ 都需要使用雙引號括起,否則編譯器在進行編譯的時候同樣會報錯
3、字符串函數-To-upper-case()、To-lower-case()
(1)To-upper-case() To-upper-case() 函數將字符串小寫字母轉換成大寫字母。如:

//SCSS
.test {
  text: to-upper-case(aaaaa);
  text: to-upper-case(aA-aAAA-aaa);
}

編譯出來的 css 代碼:

//CSS
.test {
  text: AAAAA;
  text: AA-AAAA-AAA;
}```
(2)、To-lower-case()
 與 To-upper-case() 剛好相反,將字符串轉換成小寫字母
4、數字函數簡介  Sass 中的數字函數提要針對數字方面提供一系列的函數功能:
      percentage($value):將一個不帶單位的數轉換成百分比值;
      round($value):將數值四舍五入,轉換成一個最接近的整數;
      ceil($value):將大于自己的小數轉換成下一位整數;
      floor($value):將一個數去除他的小數部分;
      abs($value):返回一個數的絕對值;
      min($numbers…):找出幾個數值之間的最小值;
      max($numbers…):找出幾個數值之間的最大值;
      random(): 獲取隨機數
5、percentage()函數主要是將一個不帶單位的數字轉換成百分比形式:

percentage(.2)
20%
percentage(2px / 10px)
20%
percentage(2em / 10em)
20%

.footer{
width : percentage(.2)
}

6、round() 函數可以將一個數四舍五入為一個最接近的整數:

round(12.3)
12
round(12.5)
13
round(1.49999)
1
round(2.0)
2
round(20%)
20%
round(2.2%)
2%
round(3.9em)
4em
round(2.3px)
2px
round(2px / 3px)
1
round(1px / 3px)
0
round(3px / 2em)
2px/em

.footer {
width:round(12.3px)
}

編譯后的 css 代碼:

.footer {
width: 12px;
}

在round() 函數中可以攜帶單位的任何數值。
編譯后的 css 代碼:

.footer{
width : 20%
}

如果您轉換的值是一個帶有單位的值,那么在編譯的時候會報錯誤信息:
7、ceil() 函數將一個數轉換成最接近于自己的整數,會將一個大于自身的任何小數轉換成大于本身 1 的整數。也就是只做入,不做舍的計算:

ceil(2.0)
2
ceil(2.1)
3
ceil(2.6)
3
ceil(2.3%)
3%
ceil(2.3px)
3px
ceil(2.5px)
3px
ceil(2px / 3px)
1
ceil(2% / 3px)
1%/px
ceil(1em / 5px)
1em/px

.footer {
width:ceil(12.3px);
}

編譯后的 css 代碼:

.footer {
width: 13px;
}

8、floor() 函數剛好與 ceil() 函數功能相反,其主要將一個數去除其小數部分,并且不做任何的進位。也就是只做舍,不做入的計算:

floor(2.1)
2
floor(2.5)
2
floor(3.5%)
3%
floor(10.2px)
10px
floor(10.8em)
10em
floor(2px / 10px)
0
floor(3px / 1em)
3px/em

.footer {
width:floor(12.3px);
}

編譯后的 css 代碼:

.footer {
width: 12px;
}

9、abs( ) 函數會返回一個數的絕對值。

abs(10)
10
abs(-10)
10
abs(-10px)
10px
abs(-2em)
2em
abs(-.5%)
0.5%
abs(-1px / 2px)
0.5

.footer {
width:abs(-12.3px);
}

編譯后的 css 代碼:

.footer {
width: 12.3px;
}

10、min() 函數功能主要是在多個數之中找到最小的一個,這個函數可以設置任意多個參數:

min(1,2,1%,3,300%)
1%
min(1px,2,3px)
1px
min(1em,2em,6em)
1em

不過在 min()、max() 函數中同時出現兩種不同類型的單位
max() 函數和 min() 函數一樣,不同的是,max() 函數用來獲取一系列數中的最大那個值:
11、random() 函數是用來獲取一個隨機數:

random()
0.03886
random()
0.66527
這是產生0-1的隨機數


------------------ 三、Sass的函數功能-列表函數--------------------
1、列表函數簡介   列表函數主要包括一些對列表參數的函數使用,主要包括以下幾種:
      length($list):返回一個列表的長度值;
      nth($list, $n):返回一個列表中指定的某個標簽值
      join($list1, $list2, [$separator]):將兩個列給連接在一起,變成一個列表;
      append($list1, $val, [$separator]):將某個值放在列表的最后;
      zip($lists…):將幾個列表結合成一個多維的列表;
      index($list, $value):返回一個值在列表中的位置值。
列表函數中的每個函數都有其獨特的作用與功能,接下來我們通過命令終端向大家展示每個列表函數的功能與使用。
2、length()函數主要用來返回一個列表中有幾個值,簡單點說就是返回列表清單中有多少個值

length(10px)
1
length(10px 20px (border 1px solid) 2em)
4
length(border 1px solid)
3

length() 函數中的列表參數之間使用空格隔開,不能使用逗號,否則函數將會出錯
3、nth()函數   語法

nth($list,$n)

nth() 函數用來指定列表中某個位置的值。不過在 Sass 中,nth() 函數和其他語言不同,1 是指列表中的第一個標簽值,2 是指列給

中的第二個標簽值,依此類推。如:

nth(10px 20px 30px,1)
10px
nth((Helvetica,Arial,sans-serif),2)
"Arial"
nth((1px solid red) border-top green,1)

abs(-10)
10
>> abs(-10px)
10px
>> abs(-2em)
2em
>> abs(-.5%)
0.5%
>> abs(-1px / 2px)
0.5

.footer {
width:abs(-12.3px);
}
編譯后的 css 代碼:
.footer {
width: 12.3px;
}
10、min() 函數功能主要是在多個數之中找到最小的一個,這個函數可以設置任意多個參數:
>> min(1,2,1%,3,300%)
1%
>> min(1px,2,3px)
1px
>> min(1em,2em,6em)
1em
不過在 min()、max() 函數中同時出現兩種不同類型的單位 max() 函數和 min() 函數一樣,不同的是,max() 函數用來獲取一系列數中的最大那個值: 11、random() 函數是用來獲取一個隨機數:
>> random()
0.03886
>> random()
0.66527
這是產生0-1的隨機數
------------------ 三、Sass的函數功能-列表函數-------------------- 1、列表函數簡介 列表函數主要包括一些對列表參數的函數使用,主要包括以下幾種: length($list):返回一個列表的長度值; nth($list, $n):返回一個列表中指定的某個標簽值 join($list1, $list2, [$separator]):將兩個列給連接在一起,變成一個列表; append($list1, $val, [$separator]):將某個值放在列表的最后; zip($lists…):將幾個列表結合成一個多維的列表; index($list, $value):返回一個值在列表中的位置值。 列表函數中的每個函數都有其獨特的作用與功能,接下來我們通過命令終端向大家展示每個列表函數的功能與使用。 2、length()函數主要用來返回一個列表中有幾個值,簡單點說就是返回列表清單中有多少個值
>> length(10px)
1
>> length(10px 20px (border 1px solid) 2em)
4
>> length(border 1px solid)
3
length() 函數中的列表參數之間使用空格隔開,不能使用逗號,否則函數將會出錯 3、nth()函數 語法
nth($list,$n)
nth() 函數用來指定列表中某個位置的值。不過在 Sass 中,nth() 函數和其他語言不同,1 是指列表中的第一個標簽值,2 是指列給 中的第二個標簽值,依此類推。如:
>> nth(10px 20px 30px,1)
10px
>> nth((Helvetica,Arial,sans-serif),2)
"Arial"
>> nth((1px solid red) border-top green,1)
(1px "solid" #ff0000)

注:在 nth($list,$n) 函數中的 $n 必須是大于 0 的整數:

nth((1px solid red) border-top green 1 ,0)
SyntaxError: List index 0 must be a non-zero integer for `nth'

4、join() 函數是將兩個列表連接合并成一個列表。

join(10px 20px, 30px 40px)
(10px 20px 30px 40px)
join((blue,red),(#abc,#def))
(#0000ff, #ff0000, #aabbcc, #ddeeff)
join((blue,red),(#abc #def))
(#0000ff, #ff0000, #aabbcc, #ddeeff)

不過 join() 只能將兩個列表連接成一個列表,但很多時候不只碰到兩個列表連接成一個列表,這個時候就需要將多個 join() 函數合

并在一起使用

join((blue red), join((#abc #def),(#dee #eff)))
(#0000ff #ff0000 #aabbcc #ddeeff #ddeeee #eeffff)

5、append() 函數是用來將某個值插入到列表中,并且處于最末位

append(10px 20px ,30px)
(10px 20px 30px)
append((10px,20px),30px)
(10px, 20px, 30px)
append(green,red)
(#008000 #ff0000)
append(red,(green,blue))
(#ff0000 (#008000, #0000ff))

如果沒有明確的指定 $separator 參數值,其默認值是 auto。
如果列表只有一個列表項時,那么插入進來的值將和原來的值會以空格的方式分隔。
如果列表中列表項是以空格分隔列表項,那么插入進來的列表項也將以空格分隔;
如果列表中列表項是以逗號分隔列表項,那么插入進來的列表項也將以逗號分隔;

當然,在 append() 函數中,可以顯示的設置 $separator 參數,
如果取值為 comma 將會以逗號分隔列表項
如果取值為 space 將會以空格分隔列表項

append((blue green),red,comma)
(#0000ff, #008000, #ff0000)
append((blue green),red,space)
(#0000ff #008000 #ff0000)
append((blue, green),red,comma)
(#0000ff, #008000, #ff0000)
append((blue, green),red,space)
(#0000ff #008000 #ff0000)
append(blue,red,comma)
(#0000ff, #ff0000)
append(blue,red,space)
(#0000ff #ff0000)

6、zip()函數將多個列表值轉成一個多維的列表:

zip(1px 2px 3px,solid dashed dotted,green blue red)
((1px "solid" #008000), (2px "dashed" #0000ff), (3px "dotted" #ff0000))
在使用zip()函數時,每個單一的列表個數值必須是相同的:

zip()函數中每個單一列表的值對應的取其相同位置值:
|--- List ---|--- nth(1) ---|--- nth(2) ---|--- nth(3) ---|
|------------|--------------|--------------|--------------|
|    List1   |      1px     |      2px     |      3px     |
|------------|--------------|--------------|--------------|
|    List2   |      solid   |      dashed  |     dotted   |
|------------|--------------|--------------|--------------|
|    List3   |      green   |      blue    |      red     |
|------------|--------------|--------------|--------------|
zip()函數組合出來就成了:

1px solid green, 2px dashed blue, 3px dotted red

7、index() 函數類似于索引一樣,主要讓你找到某個值在列表中所處的位置。在 Sass 中,第一個值就是1,第二個值就是 2

index(1px solid red, 1px)
1
index(1px solid red, solid)
2
index(1px solid red, red)
3
index(1px solid red,dotted) //列表中沒有找到 dotted
false

8、Introspection 函數包括了幾個判斷型函數:

type-of($value):返回一個值的類型
unit($number):返回一個值的單位
unitless($number):判斷一個值是否帶有單位
comparable($number-1, $number-2):判斷兩個值是否可以做加、減和合并
9、Introspection 函數 -type-of()
type-of() 函數主要用來判斷一個值是屬于什么類型:
返回值:
number 為數值型。
string 為字符串型。
bool 為布爾型。
color 為顏色型

type-of(100)
"number"
type-of(100px)
"number"
type-of("asdf")
"string"
type-of(asdf)
zip(1px 2px 3px,solid dashed dotted,green blue red)
((1px "solid" #008000), (2px "dashed" #0000ff), (3px "dotted" #ff0000))
在使用zip()函數時,每個單一的列表個數值必須是相同的:
zip()函數中每個單一列表的值對應的取其相同位置值: |--- List ---|--- nth(1) ---|--- nth(2) ---|--- nth(3) ---| |------------|--------------|--------------|--------------| | List1 | 1px | 2px | 3px | |------------|--------------|--------------|--------------| | List2 | solid | dashed | dotted | |------------|--------------|--------------|--------------| | List3 | green | blue | red | |------------|--------------|--------------|--------------| zip()函數組合出來就成了:
1px solid green, 2px dashed blue, 3px dotted red
7、index() 函數類似于索引一樣,主要讓你找到某個值在列表中所處的位置。在 Sass 中,第一個值就是1,第二個值就是 2
>> index(1px solid red, 1px)
1
>> index(1px solid red, solid)
2
>> index(1px solid red, red)
3
>> index(1px solid red,dotted) //列表中沒有找到 dotted
false
8、Introspection 函數包括了幾個判斷型函數: type-of($value):返回一個值的類型 unit($number):返回一個值的單位 unitless($number):判斷一個值是否帶有單位 comparable($number-1, $number-2):判斷兩個值是否可以做加、減和合并 9、Introspection 函數 -type-of() type-of() 函數主要用來判斷一個值是屬于什么類型: 返回值: number 為數值型。 string 為字符串型。 bool 為布爾型。 color 為顏色型
>> type-of(100)
"number"
>> type-of(100px)
"number"
>> type-of("asdf")
"string"
>> type-of(asdf)
"string"
type-of(true)
"bool"
type-of(false)
"bool"
type-of(#fff)
"color"
type-of(blue)
"color"
type-of(1 / 2 = 1)
"string"

10、unit() 函數主要是用來獲取一個值所使用的單位,碰到復雜的計算時,其能根據運算得到一個“多單位組合”的值,不過只充許

乘、除運算:

unit(100)
""
unit(100px)
"px"
unit(20%)
"%"
unit(1em)
"em"
unit(10px * 3em)
"em*px"
unit(10px / 3em)
"px/em"
unit(10px * 2em / 3cm / 1rem)
"em/rem"

但加、減碰到不同單位時,unit() 函數將會報錯,除 px 與 cm、mm 運算之外:
11、unitless() 函數相對來說簡單明了些,只是用來判斷一個值是否帶有單位,如果不帶單位返回的值為 true,帶單位返回的值為 

false:

unitless(100)
true
unitless(100px)
false
unitless(100em)
false
unitless(100%)
false
unitless(1 /2 )
true
unitless(1 /2 + 2 )
true
unitless(1px /2 + 2 )
false
用戶在調用混合宏時,如果用戶沒有給參數值加上單位,程序會自動加入單位。

12、comparable() 函數主要是用來判斷兩個數是否可以進行“加,減”以及“合并”。如果可以返回的值為 true,如果不可以返回的

值是 false:

comparable(2px,1px)

true

comparable(2px,1%)

index(1px solid red, red)
3
>> index(1px solid red,dotted) //列表中沒有找到 dotted
false
8、Introspection 函數包括了幾個判斷型函數: type-of($value):返回一個值的類型 unit($number):返回一個值的單位 unitless($number):判斷一個值是否帶有單位 comparable($number-1, $number-2):判斷兩個值是否可以做加、減和合并 9、Introspection 函數 -type-of() type-of() 函數主要用來判斷一個值是屬于什么類型: 返回值: number 為數值型。 string 為字符串型。 bool 為布爾型。 color 為顏色型
>> type-of(100)
"number"
>> type-of(100px)
"number"
>> type-of("asdf")
"string"
>> type-of(asdf)
"string"
>> type-of(true)
"bool"
>> type-of(false)
"bool"
>> type-of(#fff)
"color"
>> type-of(blue)
"color"
>> type-of(1 / 2 = 1)
"string"
10、unit() 函數主要是用來獲取一個值所使用的單位,碰到復雜的計算時,其能根據運算得到一個“多單位組合”的值,不過只充許 乘、除運算:
>> unit(100)
""
>> unit(100px)
"px"
>> unit(20%)
"%"
>> unit(1em)
"em"
>> unit(10px * 3em)
"em*px"
>> unit(10px / 3em)
"px/em"
>> unit(10px * 2em / 3cm / 1rem)
"em/rem"
但加、減碰到不同單位時,unit() 函數將會報錯,除 px 與 cm、mm 運算之外: 11、unitless() 函數相對來說簡單明了些,只是用來判斷一個值是否帶有單位,如果不帶單位返回的值為 true,帶單位返回的值為 false:
>> unitless(100)
true
>> unitless(100px)
false
>> unitless(100em)
false
>> unitless(100%)
false
>> unitless(1 /2 )
true
>> unitless(1 /2 + 2 )
true
>> unitless(1px /2 + 2 )
false
用戶在調用混合宏時,如果用戶沒有給參數值加上單位,程序會自動加入單位。
12、comparable() 函數主要是用來判斷兩個數是否可以進行“加,減”以及“合并”。如果可以返回的值為 true,如果不可以返回的 值是 false:
>>
comparable(2px,1px)

true
>> comparable(2px,1%)
false
comparable(2px,1em)
false
comparable(2rem,1em)
false
comparable(2px,1cm)
true
comparable(2px,1mm)
true

comparable(2px,1rem)

false

comparable(2cm,1mm)
true

13、Miscellaneous 函數稱為三元條件函數,主要因為他和 JavaScript 中的三元判斷非常的相似。他有兩個值,當條件成立返回一種

值,當條件不成立時返回另一種值:

if(true,1px,2px)
1px
if(false,1px,2px)
2px

14、map 常常被稱為數據地圖,也有人稱其為數組,因為他總是以 key:value 成對的出現,但其更像是一個 JSON 數據。

$map: (
$key1: value1,
$key2: value2,
$key3: value3
首先有一個類似于 Sass 的變量一樣,用個 $ 加上命名空間來聲明 map。后面緊接是一個小括號 (),將數據以 key:value 的形式賦

予,其中 key 和 value 是成對出現,并且每對之間使用逗號 (,) 分隔,其中最后一組后面沒有逗號。
)

在 Sass 中常用下面的方式定義變量:

$default-color: #fff !default;
$primary-color: #22ae39 !default;

我們使用 map 可以更好的進行管理:

$color: (
default: #fff,
primary: #22ae39
);

如果哪一天,你需要新增加顏色變量值,在 map 中可以非常隨意的添加:

$color: (
default: #fff,
primary: #22ae39,
negative: #d9534f
);

map 的嵌套實用性也非常的強,大家可能有碰到過換皮膚的項目,可能每一套皮膚對應的顏色蠻多的,那么使用此功能來管理顏色的變

量就非常的有條理性,便于維護與管理。你可以這樣使用:

$theme-color: (
default: (
bgcolor: #fff,
text-color: #444,
link-color: #39f
),
primary:(
bgcolor: #000,
text-color:#fff,
link-color: #93f
),
negative: (
bgcolor: #f36,
text-color: #fefefe,
link-color: #d4e
)
);

15、前面介紹了使用 map 來管理變量,但要在 Sass 中獲取變量,或者對 map 做更多有意義的操作,我們必須借助于 map 的函數功

能。在 Sass 中 map 自身帶了七個函數:
map-get($map,$key):根據給定的 key 值,返回 map 中相關的值。
map-merge($map1,$map2):將兩個 map 合并成一個新的 map。
map-remove($map,$key):從 map 中刪除一個 key,返回一個新 map。
map-keys($map):返回 map 中所有的 key。
map-values($map):返回 map 中所有的 value。
map-has-key($map,$key):根據給定的 key 值判斷 map 是否有對應的 value 值,如果有返回 true,否則返回 false。
keywords($args):返回一個函數的參數,這個參數可以動態的設置 key 和 value。
16、map-get($map,$key) 函數的作用是根據 $key 參數,返回 $key 在 $map 中對應的 value 值。如果 $key 不存在 $map中,將返

回 null 值。此函數包括兩個參數:
$map:定義好的 map。
$key:需要遍歷的 key。
來看一個簡單的示例,假設定義了一個 $social-colors 的 map:

$social-colors: (
dribble: #ea4c89,
facebook: #3b5998,
github: #171515,
google: #db4437,
twitter: #55acee
);

假設要獲取 facebook 鍵值對應的值 #3b5998,我們就可以使用 map-get() 函數來實現:

.btn-dribble{
color: map-get($social-colors,facebook);
}

編譯出來的CSS:

.btn-dribble {
color: #3b5998;
}

我們來看另一種情況,假設 $social-colors 這個 map 沒有 $weibo 這個 key:

.btn-weibo{
font-size: 12px;
color: map-get($social-colors,weibo);
}

此時編譯出來的是CSS:

.btn-weibo {
font-size: 12px;
}

從 編譯出來的 CSS 可以得知,如果 $key 不在 $map 中,不會編譯出 CSS,其實在 Sass 中,map-get($social- colors,weibo) 返

回了一個 null 值。但在編譯出來的 CSS 中,你只知道他沒有編譯出樣式,而且在命令終端編譯時,也沒有任何錯誤或者警告信息。

說實話,你并不知道他為什么編譯不出來樣式,或者說他已返回了值為 null。體驗不強,也不好排錯。其實如果我們自定義一個函數

,另外加個判斷,那就截然不同。
17、map-has-key($map,$key) 函數將返回一個布爾值。當 $map 中有這個 $key,則函數返回 true,否則返回 false。
前面的示例,當 $key 不在 $map 中時,使用 map-get($map,$key) 函數將返回一個 null 值。但對于開發人員,并看不到任何提示信

息。如果使用 map-has-key($map,$key) 函數就可以改變這一狀態。
http://www.imooc.com/code/8457
18、map-keys($map) 函數將會返回 $map 中的所有 key。這些值賦予給一個變量,那他就是一個列表。如:

map-keys($social-colors);

其返回值為:

"dribble","facebook","github","google","twitter"

18、map-values($map) 函數類似于 map-keys($map) 功能,不同的是 map-values($map )獲取的是 $map 的所有 value 值,可以說也

將是一個列表。而且,map-values($map) 中如果有相同的 value 也將會全部獲取出來。

map-values($social-colors)

將會返回:

ea4c89,#3b5998,#171515,#db4437,#55acee

19、map-merge($map1,$map2) 函數是將 $map1 和 $map2 合并,然后得到一個新的 $map。如果你要快速將新的值插入到 $map 中的話

,這種方法是最佳方法。假設我們有兩個 $map:

$color: (
text: #f36,
link: #f63,
border: #ddd,
backround: #fff
);
$typo:(
font-size: 12px,
line-height: 1.6
);

如果希望將這兩個 $map 合并成一個 map,我們只要這樣做:

$newmap: map-merge($color,$typo);

將會生成一個新的 map:

$newmap:(
text: #f36,
link: #f63,
border: #ddd,
background: #fff,
font-size: 12px,
line-height: 1.6
);

這樣你就可以借助 map-get( ) 等函數做其他事情了。

不過有一點需要注意,如果 $map1 和 $map2 中有相同的 $key 名,那么將 $map2 中的 $key 會取代 $map1 中的
20、map-remove($map,$key) 函數是用來刪除當前 $map 中的某一個 $key,從而得到一個新的 map。其返回的值還是一個 map。他并

不能直接從一個 map 中刪除另一個 map,僅能通過刪除 map 中的某個 key 得到新 map。如:

$map:map-remove($social-colors,dribble);

返回的是一個新 map:

$map:(
facebook: #3b5998,
github: #171515,
google: #db4437,
twitter: #55acee
);

如果刪除的 key 并不存在于 $map 中,那么 map-remove() 函數返回的新 map 和以前的 map 一樣。
21、keywords($args) 函數可以說是一個動態創建 map 的函數。可以通過混合宏或函數的參數變創建 map。參數也是成對出現,其中 

$args 變成 key(會自動去掉$符號),而 $args 對應的值就是value。

@mixin map($args...){
@debug keywords($args);
}

@include map(
$dribble: #ea4c89,
$facebook: #3b5998,
$github: #171515,
$google: #db4437,
$twitter: #55acee
);

在命令終端可以看到一個輸入的 @debug 信息:

DEBUG: (dribble: #ea4c89, facebook: #3b5998, github: #171515, google: #db4437, twitter: #55acee)

-----------------------------四、Sass的函數功能-顏色函數 ---------------------------
1、RGB顏色函數
RGB 顏色只是顏色中的一種表達式,其中 R 是 red 表示紅色,G 是 green 表示綠色而 B 是 blue 表示藍色。在 Sass 中為 RGB 顏色提供六種函數:
rgb($red,$green,$blue):根據紅、綠、藍三個值創建一個顏色;
rgba($red,$green,$blue,$alpha):根據紅、綠、藍和透明度值創建一個顏色;
red($color):從一個顏色中獲取其中紅色值;
green($color):從一個顏色中獲取其中綠色值;
blue($color):從一個顏色中獲取其中藍色值;
mix($color-1,$color-2,[$weight]):把兩種顏色混合在一起。
僅從概念上,或許大家沒有太多的概念,我們通過下面的命令來做一個簡單的測試:

$ sass -i

rgb(200,40,88) //根據r:200,g:40,b:88計算出一個十六進制顏色值

c82858

rgba(#c82858,.65) //根據#c82858的65%透明度計算出一個rgba顏色值
rgba(200, 40, 88, 0.65)
red(#c82858) //從#c82858顏色值中得到紅色值 200
200
green(#c82858) //從#c82858顏色值中得到綠色值 40
40
blue(#c82858) //從#c82858顏色值中得到藍色值 88
88
mix(#c82858,rgba(200,40,80,.65),.3) //把#c82858和rgba(200,40,88,.65) 兩顏色按比例混合得到一個新顏色
rgba(200, 40, 80, 0.65105)

2、red() 函數非常簡單,其主要用來獲取一個顏色當中的紅色值。假設有一個 #f36 的顏色,如果你想得到 #f36 中的 red 值是多少,這個時候使用 red() 函數就能很簡單獲取。

red(#f36)
255

得到的值是”255”。(注意:在命令終端要先輸入sass -i 命令)
3、green() 函數和 red() 函數一樣,用來獲取某一個顏色值中 green 的值。同樣拿 ”#f36“ 顏色為例:

green(#f36)
51

4、blue() 函數是用來獲取某一個顏色值中 blue 的值,如:

blue(#f36)
102

5、Mix 函數是將兩種顏色根據一定的比例混合在一起,生成另一種顏色。其使用語法如下:

mix($color-1,$color-2,$weight);

$color-1 和 $color-2 指的是你需要合并的顏色,顏色可以是任何表達式,也可以是顏色變量。
$weight 為 合并的比例(選擇權重),默認值為 50%,其取值范圍是 0~1 之間。它是每個 RGB 的百分比來衡量,當然透明度也會有一定的權重。默認的比例是 50%,這意味著兩個顏色各占一半,如果指定的比例是 25%,這意味著第一個顏色所占比例為 25%,第二個顏色所占比例為75%。

mix(#f00, #00f) => #7f007f
mix(#f00, #00f, 25%) => #3f00bf
mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75)

6、關于 HSL 的顏色函數,以供大家使用,其中常用的有 saturation、lightness、adjust-hue、lighten、darken 等等。接下來我們先來了解一下 HSL 顏色函數包括哪些具體的函數,所起的作用是什么:
hsl($hue,$saturation,$lightness):通過色相(hue)、飽和度(saturation)和亮度(lightness)的值創建一個顏色;
hsla($hue,$saturation,$lightness,$alpha):通過色相(hue)、飽和度(saturation)、亮度(lightness)和透明(alpha)的值創建一個顏色;
hue($color):從一個顏色中獲取色相(hue)值;
saturation($color):從一個顏色中獲取飽和度(saturation)值;
lightness($color):從一個顏色中獲取亮度(lightness)值;
adjust-hue($color,$degrees):通過改變一個顏色的色相值,創建一個新的顏色;
lighten($color,$amount):通過改變顏色的亮度值,讓顏色變亮,創建一個新的顏色;
darken($color,$amount):通過改變顏色的亮度值,讓顏色變暗,創建一個新的顏色;
saturate($color,$amount):通過改變顏色的飽和度值,讓顏色更飽和,從而創建一個新的顏色
desaturate($color,$amount):通過改變顏色的飽和度值,讓顏色更少的飽和,從而創建出一個新的顏色;
grayscale($color):將一個顏色變成灰色,相當于desaturate($color,100%);
complement($color):返回一個補充色,相當于adjust-hue($color,180deg);
invert($color):反回一個反相色,紅、綠、藍色值倒過來,而透明度不變。

同樣在你的終端,通過 sass -i 來對上面的各個函數做一個簡單測試:

hsl(200,30%,60%) //通過h200,s30%,l60%創建一個顏色

7aa3b8

hsla(200,30%,60%,.8)//通過h200,s30%,l60%,a80%創建一個顏色
rgba(122, 163, 184, 0.8)

hue(#7ab)//得到#7ab顏色的色相值
195deg

saturation(#7ab)//得到#7ab顏色的飽和度值
33.33333%

lightness(#7ab)//得到#7ab顏色的亮度值
60%

adjust-hue(#f36,150deg) //改變#f36顏色的色相值為150deg

33ff66

lighten(#f36,50%) //把#f36顏色亮度提高50%

ffffff

darken(#f36,50%) //把#f36顏色亮度降低50%

33000d

saturate(#f36,50%) //把#f36顏色飽和度提高50%

ff3366

desaturate(#f36,50%) //把#f36顏色飽和度降低50%

cc667f

grayscale(#f36) //把#f36顏色變成灰色

999999

complement(#f36)

33ffcc

invert(#f36)

00cc99

在 HSL 函數中,hsl() 和 hsla() 函數主要是通過顏色的 H、S、L 或者 A 幾個參數獲取一個 rgb 或 rgba 表達的顏色,這兩個函數與 CSS 中的無太大區別,只是使用這兩個函數能幫助您知道顏色的十六進制表達式和 rgba 表達式。

而 hue()、saturation() 和 lightness() 函數主要是用來獲取指定顏色中的色相值、飽和度和亮度值。對于顏色表達沒有太多的實際作用。

HSL 函數中最常見的應該是 lighten()、darken()、saturate()、desaturate()、grayscale()、complement()和 invert() 幾個函數。接下來,我們針對這幾個函數來做進一步的了解與學習。
7、lighten() 和 darken() 兩個函數都是圍繞顏色的亮度值做調整的,其中 lighten() 函數會讓顏色變得更亮,與之相反的 darken() 函數會讓顏色變得更暗。這個亮度值可以是 0~1 之間,不過常用的一般都在 3%~20% 之間。
來看一個簡單的實例,首先定義一個顏色變量:

$baseColor: #ad141e;

使用 lighten() 和 darken() 函數來修改 10% 的亮度值:

//SCSS
.lighten {
background: lighten($baseColor,10%);
}
.darken{
background: darken($baseColor,10%);
}

編譯出來的 css 代碼:

//CSS
.lighten {
background: #db1926;
}

.darken {
background: #7f0f16;
}

8、saturate()、desaturate()這兩個函數是通過改變顏色的飽和度來得到一個新的顏色,他們和前面介紹的修改亮度得到新顏色的方法非常相似。

//SCSS
$baseColor: #ad141e;
.saturate {
background: saturate($baseColor,30%); //在原色飽和度基礎上增加飽和度
}
.desaturate {
background: desaturate($baseColor,30%);//在原色飽和度基礎上減少飽和度
}

編譯出來的 css 代碼:

//CSS
.saturate {
background: #c1000d;
}

.desaturate {
background: #903137;
}

9、HSL函數-adjust-hue()函數  這個是通過調整顏色的色相換算一個新顏色。他需要一個顏色和色相度數值。通常這個度數值是在 -360deg 至 360deg 之間,當然了可以是百分數:

//SCSS
$baseColor: #ad141e;
.adjust-hue-deg {
background: adjust-hue($baseColor,30deg);
}
.adjust-hue-per {
background: adjust-hue($baseColor,30%);
}

編譯出來的代碼

//CSS
.adjust-hue-deg {
background: #ad5614;
}

.adjust-hue-per {
background: #ad5614;
}

10、HSL函數-grayscale()函數  這個函數會顏色的飽和度值直接調至 0%,所以此函數與 desaturate($color,100%) 所起的功能是一樣的。一般這個函數能將彩色顏色轉換成不同程度的灰色

//SCSS
$baseColor: #ad141e;
.grayscale {
background: grayscale($baseColor);
}
.desaturate {
background: desaturate($baseColor,100%);
}

//CSS
.grayscale {
background: #616161;
}

.desaturate {
background: #616161;
}

11、Opacity函數簡介
Opacity函數簡介
在 CSS 中除了可以使用 rgba、hsla 和 transform 來控制顏色透明度之外,還可以使用 opacity 來控制,只不過前兩者只是針對顏色上的透明通道做處理,而后者是控制整個元素的透明度。
在 Sass 中,也提供了系列透明函數,只不過這系列的透明函數主要用來處理顏色透明度:
      alpha($color) /opacity($color):獲取顏色透明度值;
      rgba($color, $alpha):改變顏色的透明度值;
      opacify($color, $amount) / fade-in($color, $amount):使顏色更不透明;
      transparentize($color, $amount) / fade-out($color, $amount):使顏色更加透明。
12、Opacity函數-alpha()、opacity()函數
alphpa() 和 opacity() 函數很簡單,與前面介紹的 red(),green() 等函數很類似。這個函數的主要功能是用來獲取一個顏色的透明度值。如果顏色沒有特別指定透明度,那么這兩個函數得到的值都會是 1:

alpha(red)
1
alpha(rgba(red,.8))
0.8
opacity(red)
1
opacity(rgba(red,.8))
0.8

13、Opacity函數-rgba()函數
在前面介紹 RGB 函數一節中,還記得嗎?有一個 rgba() 函數可以創建一個顏色,同時還可以對顏色修改其透明度。其可以接受兩個參數,第一個參數為顏色,第二個參數是你需要設置的顏色透明值。

rgba(red,.5)
rgba(255, 0, 0, 0.5)
rgba(#dedede,.5)
rgba(222, 222, 222, 0.5)
rgba(rgb(34,45,44),.5)
rgba(34, 45, 44, 0.5)
rgba(rgba(33,45,123,.2),.5)
rgba(33, 45, 123, 0.5)
rgba(hsl(33,7%,21%),.5)
rgba(57, 54, 50, 0.5)
rgba(hsla(33,7%,21%,.9),.5)
rgba(57, 54, 50, 0.5)

14、Opacity函數-opacify()、fade-in()函數
這兩個函數是用來對已有顏色的透明度做一個加法運算,會讓顏色更加不透明。其接受兩個參數,第一個參數是原始顏色,第二個參數是你需要增加的透明度值,其取值范圍主要是在 0~1 之間。當透明度值增加到大于 1 時,會以 1 計算,表示顏色不具有任何透明度。

opacify(rgba(22,34,235,.6),.2)
rgba(22, 34, 235, 0.8)
opacify(rgba(22,34,235,.6),.5)

1622eb

opacify(hsla(22,34%,23%,.6),.15)
rgba(79, 53, 39, 0.75)
opacify(hsla(22,34%,23%,.6),.415)

4f3527

opacify(red,.15)

ff0000

opacify(#89adde,.15)

89adde

fade-in(rgba(23,34,34,.5),.15)
rgba(23, 34, 34, 0.65)
fade-in(rgba(23,34,34,.5),.615)

172222

15、Opacity函數-transparentize()、 fade-out()函數
transparentize() 和 fade-out() 函數所起作用剛好與 opacify() 和 fade-in() 函數相反,讓顏色更加的透明。這兩個函數會讓透明值做減法運算,當計算出來的結果小于 0 時會以 0 計算,表示全透明。

transparentize(red,.5)
rgba(255, 0, 0, 0.5)
transparentize(#fde,.9)
rgba(255, 221, 238, 0.1)
transparentize(rgba(98,233,124,.3),.11)
rgba(98, 233, 124, 0.19)
transparentize(rgba(98,233,124,.3),.51)
rgba(98, 233, 124, 0)
fade-out(red,.9)
rgba(255, 0, 0, 0.1)
fade-out(hsla(98,6%,23%,.5),.1)
rgba(58, 62, 55, 0.4)
fade-out(hsla(98,6%,23%,.5),.6)
rgba(58, 62, 55, 0)

16、顏色函數實戰——七色卡

http://www.imooc.com/code/8429


-------------------------五、 Sass 的 @ 規則 ------------------------
1、@import
Sass 支持所有 CSS3 的 @ 規則, 以及一些 Sass 專屬的規則,也被稱為“指令(directives)”。 這些規則在 Sass 中具有不同的

功效,詳細解釋如下。
Sass 擴展了 CSS 的 @import 規則,讓它能夠引入 SCSS 和 Sass 文件。 所有引入的 SCSS 和 Sass 文件都會被合并并輸出一個單一

的 CSS 文件。 另外,被導入的文件中所定義的變量或 mixins 都可以在主文件中使用。

Sass 會在當前目錄下尋找其他 Sass 文件, 如果是 Rack、Rails 或 Merb 環境中則是 Sass 文件目錄。 也可以通過 :load_paths 

選項或者在命令行中使用 --load-path 選項來指定額外的搜索目錄。

@import 根據文件名引入。 默認情況下,它會尋找 Sass 文件并直接引入, 但是,在少數幾種情況下,它會被編譯成 CSS 的 

@import 規則:

如果文件的擴展名是 .css。
如果文件名以 http:// 開頭。
如果文件名是 url()。
如果 @import 包含了任何媒體查詢(media queries)。
如果上述情況都沒有出現,并且擴展名是 .scss 或 .sass, 該名稱的 Sass 或 SCSS 文件就會被引入。 如果沒有擴展名, Sass 將

試著找出具有 .scss 或 .sass 擴展名的同名文件并將其引入。

@import "foo.scss";
@import "foo";

兩者都將引入 foo.scss 文件, 而

@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);

將被編譯為:

@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);

也可以通過一個 @import 引入多個文件。例如:

@import "rounded-corners", "text-shadow";

將引入 rounded-corners 和 text-shadow 兩個文件。
如果你有一個 SCSS 或 Sass 文件需要引入, 但是你又不希望它被編譯為一個 CSS 文件, 這時,你就可以在文件名前面加一個下劃

線,就能避免被編譯。 這將告訴 Sass 不要把它編譯成 CSS 文件。 然后,你就可以像往常一樣引入這個文件了,而且還可以省略掉

文件名前面的下劃線。
例如,你有一個文件叫做 _colors.scss。 這樣就不會生成 _colors.css 文件了, 而且你還可以這樣做:
@import "colors";//不用加下劃線
注意,在同一個目錄不能同時存在帶下劃線和不帶下劃線的同名文件。 例如, _colors.scss 不能與 colors.scss 并存。
嵌套 @import
雖然大部分時間只需在頂層文件使用 @import 就行了, 但是,你還可以把他們包含在 CSS 規則 和 @media 規則中。
來看官網提供的一個簡單示例:
假設要引入的樣式文件`example.scss`文件中包含這樣的代碼:

.example {
color: red;
}

然后這樣引用:

main {

@import "example";
}

編譯出來的css

main .example {

color: red;
}

2、@media  Sass 中的 @media 指令和 CSS 的使用規則一樣的簡單,但它有另外一個功能,可以嵌套在 CSS 規則中。有點類似 JS 的

冒泡功能一樣,如果在樣式中使用 @media 指令,它將冒泡到外面。來看一個簡單示例:

.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}

編譯出來:

.sidebar {
width: 300px; }
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }

@media 也可以嵌套 @media:

@media screen {
.sidebar {
@media (orientation: landscape) {
width: 500px;
}
}
}

此時編譯出來:

@media screen and (orientation: landscape) {
.sidebar {
width: 500px; } }

在使用 @media 時,還可以使用插件#{}:

$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;

@media #{$media} and ($feature: $value) {
.sidebar {
width: 500px;
}
}

編譯出來的css

@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sidebar {
width: 500px; } }

 3、@extend
Sass 中的 @extend 是用來擴展選擇器或占位符。比如:

.error {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
@extend .error;
border-width: 3px;
}

被編譯成:

.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }

.error.intrusion, .seriousError.intrusion {
background-image: url("/image/hacked.png"); }

.seriousError {
border-width: 3px; }

擴展選擇器:

@extend 不止擴展類選擇器,還可以擴展任何選擇器,比如 .special.cool, a:hover, 或 a.user[href^=“http://“],例如:

.hoverlink {
@extend a:hover;
}
a:hover {
text-decoration: underline;
}

編譯出來:

a:hover, .hoverlink {
text-decoration: underline; }

多個擴展

所設某個樣式要繼承多個地方的樣式,那么可以使用 @extend 來繼承多個選擇器或占位符的樣式,如:

.error {
border: 1px #f00;
background-color: #fdd;
}
.attention {
font-size: 3em;
background-color: #ff0;
}
.seriousError {
@extend .error;
@extend .attention;
border-width: 3px;
}

編譯出來的CSS

.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }

.attention, .seriousError {
font-size: 3em;
background-color: #ff0; }

.seriousError {
border-width: 3px; }

擴展單一選擇器

前面我們知道 %placeholder 不使用@extend顯示調用是不會生成任何樣式代碼。那么在選擇器中使用占位符一樣。比如下面的代碼:

context a%extreme {

color: blue;
font-weight: bold;
font-size: 2em;
}

這段代碼在不調用之前不產生任何代碼,只有能過@extend調用之后才生成代碼:

.notice {
@extend %extreme;
}

編譯出來的CSS

context a.notice {

color: blue;
font-weight: bold;
font-size: 2em;
}

4、@at-root
@at-root 從字面上解釋就是跳出根元素。當你選擇器嵌套多層之后,想讓某個選擇器跳出,此時就可以使用 @at-root。來看一個簡單

的示例:

.a {
color: red;

.b {
color: orange;

.c {
  color: yellow;

  @at-root .d {
    color: green;
  }
}

}
}

編譯出來的css

.a {
color: red;
}

.a .b {
color: orange;
}

.a .b .c {
color: yellow;
}

.d {
color: green;
}

5、@debug 在 Sass 中是用來調試的,當你的在 Sass 的源碼中使用了 @debug 指令之后,Sass 代碼在編譯出錯時,在命令終端會輸

出你設置的提示 Bug:

@debug 10em + 12em;

會輸出

Line 1 DEBUG: 22em

6、@warn 和 @debug 功能類似,用來幫助我們更好的調試 Sass。如:

@mixin adjust-location($x, $y) {
@if unitless($x) {//unitless是內置函數,判斷數值是否有“單位”
@warn "Assuming #{$x} to be in pixels";
$x: 1px * $x;
}
@if unitless($y) {
@warn "Assuming #{$y} to be in pixels";
$y: 1px * $y;
}
position: relative; left: $x; top: $y;
}

.botton{
@include adjust-location(20px, 30);
}

WARNING: Assuming 30 to be in pixels

     on line 7 of ./8805/9jDF/index.scss, in `adjust-location'

     from line 16 of ./8805/9jDF/index.scss

.botton {

position: relative;

left: 20px;

top: 30px; }

7、@error
@error 和 @warn、@debug 功能是如出一轍。

@mixin error($x){
@if $x < 10 {
width: $x * 10px;
} @else if $x == 10 {
width: $x;
} @else {
@error "你需要將#{$x}值設置在10以內的數";
}

}

.test {
@include error(15);
}

編譯的時候

你需要將15值設置在10以內的數 on line 7 at column 5

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容

  • 基礎 聲明變量 普通變量 默認變量 變量覆蓋:只需要在默認變量之前重新聲明下變量即可 變量的調用 局部變量和全局變...
    Jill1231閱讀 1,304評論 0 1
  • 2015年10月21日 @if @if指令是一個SassScript,它可以根據條件來處理樣式塊,如果條件為tru...
    a0d560da7818閱讀 596評論 0 1
  • 本文簡單的介紹SASS預處理語言,更多的應用請參考官方文檔 一、什么是SASS 二、為什么使用SASS 三、安裝S...
    CharlesDarwin閱讀 457評論 0 0
  • 1. @if 編譯出來的css: 2.@for $i 表示變量 使用through的例子: 編譯出來的css: 使...
    恰皮閱讀 3,622評論 0 9
  • 多希望從此以后我們只有相聚,再無別離。
    剛好遇見你2017閱讀 355評論 0 1