天天看點

Sass @mixin 與 @include

@mixin 指令允許我們定義一個可以在整個樣式表中重複使用的樣式。

@include 指令可以将混入(mixin)引入到文檔中。

混入(mixin)通過 @mixin 指令來定義。

@mixin name {

property: value;

...

}

以下執行個體建立一個名為 "important-text" 的混入:

@mixin important-text {

  color: red;

  font-size: 25px;

  font-weight: bold;

  border: 1px solid blue;

注意:Sass 的連接配接符号 - 與下劃線符号 _ 是相同的,也就是 @mixin important-text { } 與 @mixin important_text { } 是一樣的混入。

@include 指令可用于包含一混入:

selector {

  @include mixin-name;

是以,包含 important-text 混入代碼如下:

.danger {

  @include important-text;

  background-color: green;

将以上代碼轉換為 CSS 代碼,如下所示:

混入中也可以包含混入,如下所示:

@mixin special-text {

  @include link;

  @include special-border;

混入可以接收參數。

我們可以向混入傳遞變量。

定義可以接收參數的混入:

/* 混入接收兩個參數 */

@mixin bordered($color, $width) {

  border: $width solid $color;

.myArticle {

  @include bordered(blue, 1px);  // 調用混入,并傳遞兩個參數

.myNotes {

  @include bordered(red, 2px); // 調用混入,并傳遞兩個參數

以上執行個體的混入參數為設定邊框的屬性 (color 和 width) 。

  border: 2px solid red;

混入的參數也可以定義預設值,文法格式如下:

@mixin bordered($color: blue, $width: 1px) {

在包含混入時,你隻需要傳遞需要的變量名及其值:

@mixin sexy-border($color, $width: 1in) {

  border: {

    color: $color;

    width: $width;

    style: dashed;

  }

p { @include sexy-border(blue); }

h1 { @include sexy-border(blue, 2in); }

p {

  border-color: blue;

  border-width: 1in;

  border-style: dashed; }

h1 {

  border-width: 2in;

  border-style: dashed;

有時,不能确定一個混入(mixin)或者一個函數(function)使用多少個參數,這時我們就可以使用 ... 來設定可變參數。

例如,用于建立盒子陰影(box-shadow)的一個混入(mixin)可以采取任何數量的 box-shadow 作為參數。

@mixin box-shadow($shadows...) {

      -moz-box-shadow: $shadows;

      -webkit-box-shadow: $shadows;

      box-shadow: $shadows;

.shadows {

  @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);

  -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;

  -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;

  box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;

浏覽器字首使用混入也是非常友善的,如下執行個體:

@mixin transform($property) {

  -webkit-transform: $property;

  -ms-transform: $property;

  transform: $property;

.myBox {

  @include transform(rotate(20deg));

  -webkit-transform: rotate(20deg);

  -ms-transform: rotate(20deg);

  transform: rotate(20deg);