Sass之混合巨集、繼承、佔位符
1、混合巨集。
當樣式變得越來越複雜,需要重複使用大段的樣式時,使用變數就無法達到我們目的了。這個時候混合巨集就派上用場了。
而使用混合巨集時,首先要宣告混合巨集,而宣告混合巨集時有兩種,不帶引數混合巨集和帶引數混合巨集兩種。
1.1 不帶引數混合巨集的宣告要使用關鍵詞@mixin。例如:
@mixin border-radius{ -webkit-border-radius: 5px; border-radius: 5px; }
其中 @mixin 是用來宣告混合巨集的關鍵詞,有點類似 CSS 中的 @media、@font-face 一樣。border-radius 是混合巨集的名稱。大括號裡面是複用的樣式程式碼。
例如在一個按鈕裡要呼叫上述那個不帶引數混合巨集時,可以這樣使用。
button {
@include border-radius;
}
1.2 帶引數混合巨集的宣告又分為不帶任何值的引數和帶值的引數。例如:
1.2.1帶值的引數的混合巨集宣告
@mixin border-radius($radius:5px){ -webkit-border-radius: $radius; border-radius: $radius; }
在一個按鈕中呼叫上述帶值的引數的混合巨集宣告,可以這樣使用
.btn {
@include border-radius;
}
同樣的, 但有的時候,頁面中有些元素的圓角值不一樣,並非是上面的5px,那麼可以隨機給混合巨集傳值,如:
.btn {
@include border-radius(50%);
}
1.2.2不帶值的引數的混合巨集宣告
@mixin border-radius($radius){ -webkit-border-radius: $radius; border-radius: $radius; }
呼叫不帶值的引數的混合巨集宣告,可以這樣做,如:
.box {
@include border-radius(3px);
}
2、繼承
在 Sass 中也具有繼承一說,也是繼承類中的樣式程式碼塊。在 Sass 中是通過關鍵詞 “@extend”來繼承已存在的類樣式塊,從而實現程式碼的繼承。例如:
//SCSS .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; }
此時編譯出來的css為:
//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; }
可以看出在 Sass 中的繼承,可以繼承類樣式塊中所有樣式程式碼,而且編譯出來的 CSS 會將選擇器合併在一起,形成組合選擇器。
3、佔位符%placeholder
Sass 中的佔位符 %placeholder 功能是一個很強大,很實用的一個功能,他可以取代以前 CSS 中的基類造成的程式碼冗餘的情形。因為 %placeholder 宣告的程式碼,如果不被 @extend 呼叫的話,不會產生任何程式碼。例如:
%mt { margin-top: 5px; } %pt{ padding-top: 5px; }
這段程式碼沒有被 @extend 呼叫,他並沒有產生任何程式碼塊,只是靜靜的躺在你的某個 SCSS 檔案中。只有通過 @extend 呼叫才會產生程式碼:
//SCSS %mt { margin-top: 5px; } %pt{ padding-top: 5px; } .btn { @extend %mt; @extend %pt; } .block { @extend %mt; span { @extend %pt; } }
編譯出來的CSS為:
//CSS .btn, .block { margin-top: 5px; } .btn, .block span { padding-top: 5px; }
從編譯出來的 CSS 程式碼可以看出,通過 @extend 呼叫的佔位符,編譯出來的程式碼會將相同的程式碼合併在一起。
然而有些時候我們就在糾結啥時候該用混合巨集,啥時候用繼承,啥時候用佔位符呢?這裡先來看個表格吧
建議:
1、如果程式碼塊中涉及到變數,建議使用混合巨集來建立相同的程式碼塊。
2、如果你的程式碼塊不需要傳任何變數引數,而且有一個基類已在檔案中存在,那麼建議使用 Sass 的繼承