【发布时间】:2017-11-13 20:42:03
【问题描述】:
我刚刚完成了 Sass guide。 该指南解释了 mixins:
..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; }
我的问题是这些功能有何不同? 我应该什么时候使用一个而不是另一个?
【问题讨论】: