在Sass中,我們引入了占位符“%placeholder”來進一步優化“@extend”。我們先來看一個例子。
舉例:使用繼承“@extend”
.btn { padding:6px 10px; border:1px solid silver; font-size:14px; } .btn-primary { @extend .btn; color:white; background-color:red; } .btn-second { @extend .btn; color:orange; background-color:green; }
編譯出來的CSS代碼如下:
.btn, .btn-primary, .btn-second { padding: 6px 10px; border: 1px solid silver; font-size: 14px; } .btn-primary { color: white; background-color: red; } .btn-second { color: orange; background-color: green; }
分析:
從這個例子我們可以看出,繼承“@extend”是非常好用的。通過@extend,我們可以直接在“.btn-primary”和“.btn-second”中插入定義好的“.btn”,這樣每次只要你修改了“.btn”中的樣式,“.btn-primary”和“.btn-second”中的樣式都會同時修改。
但是稍微細心的小伙伴應該也發現了,如果我們的HTML中沒有任何一個元素使用“.btn”的話,“.btn”存在的唯一目的就是僅僅用來給“.btn-primary”和“.btn-second”繼承。也就是說,“.btn”這個類在編譯出來的CSS中是多余的。那有沒有更好的辦法來實現我們預期效果呢?
在新版本的Sass中,引入了“占位符%placeholder”來優化“繼承@extend”的輸出。
舉例:
%btn { padding:6px 10px; border:1px solid silver; font-size:14px; } .btn-primary { @extend %btn; color:white; background-color:red; } .btn-second { @extend %btn; color:orange; background-color:green; }
編譯出來的CSS代碼如下:
.btn-primary, .btn-second { padding: 6px 10px; border: 1px solid silver; font-size: 14px; } .btn-primary { color: white; background-color: red; } .btn-second { color: orange; background-color: green; }
分析:
上一個例子,我們是定義一個基類“.btn”(類,都是以“.”開頭)。而在這個例子中,我們是定義一個占位符“%btn”(占位符,都是以“%”開頭)。我們對比一下這兩個例子的輸出結果就可以知道,使用占位符的輸出結果是不包含基類的。
“占位符%placeholder”並非用來替換“繼承@extend”的,而是用來配合“繼承@extend”來使用的。從上面我們可以知道,繼承@extend有2種輸出方式:
此外在實際開發中,繼承中的基類是否就一定要去掉呢?這個倒不一定。如果你的HTML結構需要用到基類,則不需要使用占位符的方式來去掉;如果你的HTML不需要用到基類,則建議使用占位符配合繼承來去掉。