mixins
允許我們在專案中復用樣式片段,可以傳遞引數這個特性使得它們非常靈活,強大。同樣,我們也可以使用@extend
命令讓乙個選擇器繼承其它選擇器去復用樣式片段。有的時候mixin
和extend
好像做了同樣的事情,那我們應該選擇哪乙個呢?
除了傳遞引數,也可以直接傳遞乙個樣式片段給mixin
。在mixin
中,新增@content;
語句,然後傳遞的樣式片段就會代替@content;
出現在相應的位置。
@mixin button
.button-green
}
.button-green
中呼叫了mixin
。@include
指令傳遞了乙個將背景色設定為綠色的css片段,然後這個片段就會代替@content
語句出現在mixin
中相應的位置。
這段sass被編譯成:
.button-green
當乙個內容片段傳進mixin
的時候,它的作用域是在定義它的地方,而不是在mixin
裡面。也就是說,傳進去的內容片段不能使用在mixin
中定義的變數。
$color: green;
@mixin button($color: #fff)
.button-green
}
在這個例子中,在最外層和mixin
的引數中都有定義變數$color
。這兩個變數分別有不同的色值。
在mixin
中,$color
變數的值是#fff
。在傳遞給.button-green
的內容片段中,$color
將會使用在最外層定義的green
值。
所以,上面的sass會被編譯成下面這段css
.button-green
樣式片段沒有重複,這就是dry
1. 使用@extend
產生 dry css風格的**。但是@mixin
就不能產生dry式的**。
2.@extend
會增加選擇器之間的聯絡,然後把他們堆在一起。你正在為一些相關的元素設定樣式,就拿一組按鈕來說,使用@extend
讓他們共享樣式看起來合情合理。但是如果這些被復用的樣式片段並不僅僅侷限於相關的元素,那麼使用@mixin
或許更好。
3.@mixin
主要的優勢就是它能夠接受引數。如果想傳遞引數,你會很自然地選擇@mixin
而不是@extend
。
如果沒有任何引數,使用@extend
來創造dry應該是個不錯的選擇。不過要注意的是,使用gzip
壓縮過的檔案可能會破壞**中的dry。
4. 在大作數情況下@mixin
會比@extend
更好,但是它們倆都有自己的一席之地。當樣式和選擇器之間的關係在某些方面比較緊密的時候,使用@extend
。除此之外,你可以使用@mixin
在任何地方。
Python中的append和extend的區別
網上有很多對這兩個函式的區別講解,但我覺得都講的不是很清楚,記憶不深刻。這樣解釋清楚且容易記住。list.extend sequence 把乙個序列seq的內容新增到列表中 music media compact disc 8 track tape long playing record new m...
UML用例關係include和extend區別
在畫用例圖的時候,理清用例之間的關係是重點。用例的關係有泛化 generalization 擴充套件 extend 和包含 include 其中include和extend最易混淆。基本概念 用例圖 use case diagram 用例圖顯示誰是相關的使用者,使用者希望系統提供什麼服務 用例 以及...
UML用例關係include和extend區別
在畫用例圖的時候,理清用例之間的關係是重點。用例的關係有泛化 generalization 擴充套件 extend 和包含 include 其中include和extend最易混淆。基本概念 用例圖 use case diagram 用例圖顯示誰是相關的使用者,使用者希望系統提供什麼服務 用例 以及...