——譯者:大漠
sass中提供多種方法來共用相同的css**。你可以使用@include
定義好的@mixin在你的css樣式中插入新的css樣式,你也可以使用@extend
定義好的css類選擇器,向你的css樣式中插入新的css樣式。在sass3.2中引入了乙個新的特性——選擇器佔位符「%placeholder」,能過@extend
可以得到更有效的輸出。
在開始介紹%placeholder
之前,我們先來了解一下sass中@extend
是如何工作的。
使用@extend
我們可以使用css中的定義好的選擇器,下面的例子可以很好的說明一切:
.icon
.error-icon
.info-icon
上面的scss**將編譯的css**如下:
.icon, .error-icon, .info-icon
.error-icon
.info-icon
這是怎麼回事?通過@extend
可以直接在.error-icon
和.info-icon
中插入定義好的.icon
屬性。只要你修改了.icon
樣式,.error-icon
和.info-icon
也會做出對應的變化。非常完美,對不對?
很有興的乙個地方。如果我們在html中從來不使用.icon
,其存在的唯一目的就是為了擴充套件嗎?這似乎比我們需要的基本樣式稍大些,因為我們將永遠不會使用.icon
對應的樣式。其實在sass3.2開始,我們可以通過使用選擇器佔位符%placeholder
來解決這種現象。
選擇器佔位符%placeholder
可以很好的解決上面提到的問題。選擇器佔位符很類似於css的類,不同的是他不是使用(.)
開始,而是使用(%)
開始,而且編譯出來的css**中並不會包括%placeholder
規則中的樣式,除非是通過@extend
對其進行呼叫。
回到當初的示例,如果我們定義的圖示樣式如下:
%icon
.error-icon
.info-icon
編譯出的css:
.error-icon, .info-icon
.error-icon
.info-icon
請注意,編譯出來的css**中將不再包括.icon
了。
乍一看,選擇器佔位符%placeholder
看起來和具有相同引數的@mixin
一樣。雖然從功能上來說(在瀏覽器上渲染的效果是完全相同的)他們是相同,但編譯出來的css卻大大的不同。
請考慮使用@mixin .icon
來實現上面示例的效果:
@mixin icon
.error-icon
.info-icon
編譯出來的css:
.error-icon
.info-icon
僅從維護的角度來說,這是乙個很好的擴充套件的示例,但編譯出來的css實在是糟糕,因為編譯出來的css樣式,沒有把相同的樣式合併在一起。
使用@extend
呼叫定義好的選擇器佔位符%placeholder
有所限制,他不能在不同的@media
中執行。
如下面的示例:
%icon
@media screen
.info-icon
}
此時編譯你的scss檔案時,編譯器將會報錯:
>>> sass is watching for changes. press ctrl-c to stop.
error test.scss (line 3: you may not @extend an outer selector from within @media.
you may only @extend selectors within the same directive.
from "@extend %icon" on line 10 of test.scss.
)
當我第一次碰到這個限制時,我以為這是乙個錯誤。然而有乙個很好的理由,sass為什麼要這樣工作。
因為@extend
是將乙個選擇器樣式擴充套件到另乙個選擇器當中,而實際上在不同的@media
中卻無需複製這些樣式。
雖然他可以通過其他的方式來工作,在@media
塊中定義選擇器佔位符,在@extend
呼叫時,將會將整個樣式包含在@media
區塊中:
@media screen
}.error-icon
.info-icon
編譯出的css:
@media screen
}
@extend
和@include
都具有強大的功能,儘管細節上有一些差別,這就要問你自己,編譯出來的css樣式,接近重用的樣式對你是不是很重要。在某些情況下,@extend
可以大大的減化你的css輸出,並且顯著的提高你的css效能。
譯者手語:整個翻譯依照原文線路進行,並在翻譯過程略加了個人對技術的理解。如果翻譯有不對之處,還煩請同行朋友指點。謝謝!
英文原文:
中文譯文:
Sass之混合巨集 繼承 佔位符
1 混合巨集。當樣式變得越來越複雜,需要重複使用大段的樣式時,使用變數就無法達到我們目的了。這個時候混合巨集就派上用場了。而使用混合巨集時,首先要宣告混合巨集,而宣告混合巨集時有兩種,不帶引數混合巨集和帶引數混合巨集兩種。1.1不帶引數混合巨集的宣告 mixin border radius例如在乙個...
Sass 混合巨集 VS 繼承 VS 佔位符
什麼時候用混合巨集,什麼時候用繼承,什麼時候使用佔位符?其實他們各有各的優點與缺點,先來看看他們使用效果 a sass 中的混合巨集使用 總結 編譯出來的 css 清晰告訴了大家,他不會自動合併相同的樣式 如果在樣式檔案中呼叫同乙個混合巨集,會產生多個對應的樣式 造成 的冗餘,這也是 csser 無...
佔位符的使用
preparestatement介面改善問題 佔位符 演示 使用statement介面物件傳送的sql語句需要在資料庫中進行一次編譯之後成為指令才能執行,每條sql語句都需要編譯一次,這樣是很慢的。使用statement介面才做的sql可以需要使用字串拼接的方式實現,這樣的方式可能存在sql注入的安...