1. 程式人生 > >mixin、繼承和佔位符

mixin、繼承和佔位符

1. mixin混合巨集

宣告方式:

@mixin

呼叫方式:

@include

使用:

它可以傳引數, 所以當代碼塊中涉及到變數時, 可以使用混合巨集來建立相同的程式碼塊.

缺點:

1.它不會自動合併相同的樣式程式碼, 如果在樣式檔案中呼叫同一個混合巨集, 會產生多個對應的樣式程式碼, 造成程式碼的冗餘. 所以程式碼塊中不涉及到變數時, 不要使用混合巨集.
2. 插值不能呼叫混合巨集,如@include bgColor-#{$color} 這樣寫就是錯誤的.

程式碼:

//宣告:
@mixin val($var){
  margin-top: $var
; } .div { //呼叫 @include val(5px); }

2. 繼承

宣告方式:

.class (如 : .titleBar)

呼叫方式:

@extend

使用:

如果程式碼塊不需要傳遞任何變數引數, 而且有一個基類已在檔案中存在, 那麼就可以使用Sass的繼承來呼叫已存在的基類.
使用繼承後, 編譯出來的CSS會將使用繼承的程式碼塊合併到一起, 生成組合選擇器. @extend中可以使用插值, 如@extend .selected-#{$flag}

缺點:

如果基類並不存在於html結構中時, 不管呼叫與不呼叫, 編譯出來的CSS中都會產生基類對應的樣式程式碼.

程式碼:

//SASS
.btn {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

.btn-primary {
  background-color: #f36;
  color: #fff;
  @extend .btn;
}

.btn-second {
  background-color: orange;
  color: #fff;
  @extend .btn;
}

注: 這裡的SASS程式碼用的是SCSS的標準編寫, 下同.

//編譯出來的CSS程式碼
.btn, .btn-primary
, .btn-second { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { background-color: #f36; color: #fff; } .btn-second { background-clor: orange; color: #fff; }

3. %placeholder佔位符

宣告方式:

%placeholder (如: %colorBlue)

呼叫方式:

@extend

使用:

和繼承基本相似, 但是不會在程式碼中生成佔位符的選擇器, 佔位符是獨立定義, 如果不呼叫已宣告的佔位符, 就不會在CSS中產生任何樣式程式碼. @extend中可以使用插值, 如@extend .selected-#{$flag}

程式碼:

//SASS
%mt10 {
  margin-top: 10px;
}
%pt5{
  padding-top: 5px;
}

.btn {
  @extend %mt10;
  @extend %pt5;
}

.block {
  @extend %mt10;

  span {
    @extend %pt5;
  }
}
//編譯出來的CSS程式碼
.btn, .block {
  margin-top: 10px;
}

.btn, .block span {
  padding-top: 5px;
}