你是对的。
如果您希望输出根据您的调用方式而改变,您应该使用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