Sass @mixin 与 @include
Sass Mixins
@mixin
指令让您可以创建在整个网站中重用的 CSS 代码。
@include
指令让您可以使用(包括)mixin
。
定义 Mixin
使用 @mixin
指令来定义一个 Mixin。
Sass @mixin 语法:
@mixin <i>name </i>{
property : value ;
property : value ;
...
}
下面的示例创建一个名为 "important-text" 的 mixin:
SCSS 语法:
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
提示:关于 Sass 中连字符和下划线的提示:连字符和下划线被认为是相同的。这意味着 @mixin important text{} 和 @mixin important_text{} 被认为是相同的 mixin!
使用 Mixin
@include
指令用来包含(include)一个 mixin
Sass @include mixin 语法:
selector {
@include mixin-name ;
}
因此,要包含(include)上面创建的 "important-text" mixin:
SCSS 语法:
.danger {
@include important-text;
background-color: green;
}
Sass transpiler
将转化成一下普通 CSS:
CSS 输出:
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
一个 mixin 也能包含(include)另外一个 mixins:
SCSS 语法:
@mixin special-text {
@include important-text;
@include link;
@include special-border;
}
将变量传递给 Mixin
Mixin 是可以接受参数的。通过这种方式,您可以将变量传递给一个 mixin。
下面是如何使用参数定义 mixin:
SCSS 语法:
/* 定义一个带两个参数的 mixin */
@mixin bordered($color, $width) {
border: $width solid $color;
}
.myArticle {
@include bordered(blue, 1px); // 传入两个参数调用 mixin
}
.myNotes {
@include bordered(red, 2px); // 传入两个参数调用 mixin
}
请注意,参数设置为变量,然后用作 border 属性的值(颜色和宽度)。
编译后,CSS 将如下所示:
CSS 输出:
.myArticle {
border: 1px solid blue;
}
.myNotes {
border: 2px solid red;
}
Mixin 的默认值
也可以为 mixin 变量定义默认值:
SCSS 语法:
@mixin bordered($color: blue, $width: 1px) {
border: $width solid $color;
}
然后,您只需要指定在包含(include)mixin 时要更改的值:
SCSS 语法:
.myTips {
@include bordered($color: orange);
}
使用 Mixin 实现 Vendor Prefix
mixin 的另一个好用法是用于 Vendor Prefix(浏览器引擎前缀,是一些放在 CSS 属性前的小字符串,用来确保这种属性只在特定的浏览器渲染引擎下才能识别和生效。)。
这是一个 transform 的例子:
SCSS 语法:
@mixin transform($property) {
-webkit-transform: $property;
-ms-transform: $property;
transform: $property;
}
.myBox {
@include transform(rotate(20deg));
}
在编译之后, CSS 会是这样:
CSS 输出:
.myBox {
-webkit-transform: rotate(20deg);
-ms-transform: rotate(20deg);
transform: rotate(20deg);
}