我刚刚完成了Sass guide。指南解释了mixin:
mixin允许你创建一组CSS声明,你可以在你的站点中重用它们。你甚至可以传入一些值来使你的mixin更加灵活。
并延长:
..这是Sass最有用的特性之一。使用@extend可以让您在选择器之间共享一组CSS属性。
看起来'extend'可以在'mixin'中实现(看起来'mixin'是'extend'的扩展:-))。
// @extend
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
// @mixin
@mixin message($color) {
border: 1px solid #ccc;
padding: 10px;
color: #333;
border-color: $color;
}
.success { @include message(green); }
.error { @include message(red); }
.warning { @include message(yellow); }
甚至更多,因为mixin有参数。但另一方面,处理的CSS并不完全相同。但它将是相同的风格效果的DOM。
/* extend processed */
.message, .success, .error, .warning {
border: 1px solid #ccc;
padding: 10px;
color: #333; }
.success {
border-color: green; }
.error {
border-color: red; }
.warning {
border-color: yellow; }
/* mixin processed */
.success {
border: 1px solid #ccc;
padding: 10px;
color: #333;
border-color: green; }
.error {
border: 1px solid #ccc;
padding: 10px;
color: #333;
border-color: red; }
.warning {
border: 1px solid #ccc;
padding: 10px;
color: #333;
border-color: yellow; }
我的问题是这些功能有什么不同?我应该在什么时候使用一个而不是另一个?
4条答案
按热度按时间mznpcxlj1#
从http://blog.nakulrajput.com/mixins-extends-and-placeholders/开始:
下面是mixin的工作原理。定义和用法:
上面的代码片段生成以下CSS:
为了让事情更有趣一点,我们可以让我们的mixin接受参数。更好的是,如果mixin在没有参数的情况下被调用,我们可以定义默认值。
结果将是相似的,但身体的宽度不同。
如果使用混合,则其中的样式将为每个选择器复制。
如果您需要在最终输出中更改或计算某些内容,* 例如,* 如果您需要将
border-radius
应用于多个元素,mixin将非常有用。但是,在其他一些情况下,会有很多重复的代码,如果使用**@extend**,就可以避免这些代码。
很相似,不是吗?在Sass中看起来几乎一样,但是CSS的结果是:
比使用mixin的版本要短。在扩展过程中不能传递参数,但实际上这不是这个想法。
xytpbqjk2#
Mixin就像是一个函数,可以做一些工作并输出处理结果,而
extend
就像是预定义的cop-paste
代码iyfamqjs3#
在编程方面:
@include类似于使用或不使用参数调用函数
@extend类似于继承
函数意味着,每次我们调用函数时,函数体都会被复制,因为我们可能会以参数的形式传递动态信息,所以你会得到函数体的副本。
继承意味着,没有复制,我们得到一个引用而不是复制。所以谁扩展了引用将得到相同的主体。
yzuktlbb4#
我认为mixin喜欢函数,因为我们可以使用或不使用参数
像复制代码一样扩展并推送到