你是對的。
如果您希望輸出根據您的調用方式而改變,您應該使用mixin。
因此,在某些情況下,使用%placeholder
和@extend
會產生更少的CSS。 認識@extend創建關係很重要。無論何時使用@extend
,您都會在樣式表的其他地方移植選擇器,以便與其他正在移植的選擇器共享特徵。
EXTEND
例如
.awesome {
width: 100%;
height: 100%;
}
body {
@extend .awesome;
}
p {
@extend .awesome;
}
將返回:
.awesome, body, p {
width: 100%;
height: 100%;
}
MIXIN
@mixin awesome {
width: 100%;
height: 100%;
}
body {
@include awesome;
}
p {
@include awesome;
}
返回結果:
body {
width: 100%;
height: 100%;
}
p {
width: 100%;
height: 100%;
}
但隨着混入可以有參數,如:
@mixin awesome($w: 100%, $h: 100%) {
width: $w;
height: $h;
}
body {
@include awesome(960px);
}
p {
@include awesome;
}
將返回:
body {
width: 960px;
height: 100%;
}
p {
width: 100%;
height: 100%;
}
希望這是有幫助的!
附加:
的@extend
指令不靈活。你無法將參數傳遞給它,所以那裏有什麼。在@media
指令中使用@extend
也存在限制,您無法使用@extend
在不同的媒體指令中擴展選擇器。
使用mixin的主要優勢在於它們具有的強大功能和靈活性,因爲它們可以接受參數。當然,如果你想傳遞參數,你必須選擇@mixin
而不是@extend
。
它們是可以互換的,它也取決於你是否想要/不得不堅持乾燥CSS。
EXTEND
%hide-text {
text-indent: -9999px;
overflow: hidden;
}
.foo {
@extend %hide-text;
}
.bar {
@extend %hide-text;
}
.baz {
@extend %hide-text;
}
尼斯和清潔結果:
.foo, .bar, .baz {
text-indent: -9999px;
overflow: hidden;
}
MIXIN
@mixin hide-text {
text-indent: -9999px;
overflow: hidden;
}
.foo {
@include hide-text;
}
.bar {
@include hide-text;
}
.baz {
@include hide-text;
}
結果:
.foo {
text-indent: -9999px;
overflow: hidden;
}
.bar {
text-indent: -9999px;
overflow: hidden;
}
.baz {
text-indent: -9999px;
overflow: hidden;
}
你可以看到CSS選擇器之間沒有關係。
感謝您的回答。但實際上,當我在其教程(http://sass-lang.com/guide)中學習'@mixin'和'@extend'時,我認爲你的答案是一樣的。除了我在文章中提到的兩種情況外,我更關心何時使用哪一種。 – EntryLeveDeveloper
呃..我添加了一些更多的信息,讓我知道如果你需要更深入的解釋 – Alessio
非常感謝。您能否提供參考文件以獲取您的附加信息?你添加的信息看起來像是我的兩個案例在我的文章中的解釋?除了我的兩種情況外,你還有更多的信息嗎? – EntryLeveDeveloper