在Sass中,我們可以使用“混合宏(mixin)”來處理經常被多個地方使用的相同的CSS代碼塊。混合宏,跟JavaScript中的函數很相似,我們可以稱之為“Sass中的函數”。
在Sass中,我們使用“@mixin”來定義一個混合宏,然後使用“@include”來調用一個混合宏。
語法:
//定義一個混合宏 @mixin 混合宏名 { 樣式屬性1:取值1; 樣式屬性2:取值2; …… } //調用一個混合宏 選擇器 { @include 混合宏名; }
說明:
Sass中的混合宏跟C語言的宏是非常相似的。所謂的“宏”,指的是可重用的代碼塊。
@mixin用來定義一個混合宏,@include用來調用一個混合宏。此外,@mixin跟CSS3中的@font-face和@media語法是一樣的。
舉例:
@mixin radius { border-radius:5px; -webkit-border-radius:5px; -moz-border-radius:5px; } #header { color:red; @include radius; } #footer { color:green; @include radius; }
編譯出來的CSS代碼如下:
#header { color: red; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; } #footer { color: green; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; }
在Sass中,我們不僅可以定義“不帶參數的混合宏”,也可以定義“帶參數的混合宏”。其中,混合宏的參數可以是1個,也可以是N個。
舉例:帶一個參數的混合宏
@mixin radius($radius) { border-radius:$radius; -webkit-border-radius:$radius; -moz-border-radius:$radius; } #header { color:red; @include radius(3px); } #footer { color:green; @include radius(5px); }
編譯出來的CSS代碼如下:
#header { color: red; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } #footer { color: green; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; }
舉例:帶多個參數的混合宏
@mixin center($width,$height) { width: $width; height: $height; position: absolute; top: 50%; left: 50%; margin-top: -($height) / 2; margin-left: -($width) / 2; } div { @include center(100px,80px); }
編譯出來的CSS代碼如下:
div { width: 100px; height: 80px; position: absolute; top: 50%; left: 50%; margin-top: -40px; margin-left: -50px; }
分析:
這個混合宏裡面的CSS代碼是一個功能代碼塊,是用來同時實現元素的水平居中和垂直居中的。在實際開發中,對於這些功能代碼塊,我們都是配合混合宏(mixin)來使用,非常的簡單快速。現在大家體會到Sass比純CSS強大的地方了吧。對於這種開發技巧,更多請參考“HTML和CSS進階教程”中的“第13章 CSS技巧”。
在Sass中,我們還可以為混合宏傳遞的參數定義默認值。混合宏參數的默認值,跟變量的默認值是非常相似的,小伙伴們記得對比一下,這樣更能加深理解和記憶。
舉例:參數帶默認值
@mixin radius($radius:3px) { border-radius:$radius; -webkit-border-radius:$radius; -moz-border-radius:$radius; } #header { color:red; @include radius; } #footer { color:green; @include radius(5px); }
編譯出來的CSS代碼如下:
#header { color: red; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } #footer { color: green; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; }
分析:
在這個例子中,我們給“混合宏radius”傳了一個參數“$radius”,並且給這個參數定義了一個默認值“3px”。如果我們頁面有很多地方的圓角都是“3px”的話,那麼這種默認值的方式就會非常好用。因為在調用的時候,我們只需要調用默認的“混合宏radius”就可以了。