Sass @mixin 与 @include

Sass Mixins

@mixin 指令让您可以创建在整个网站中重用的 CSS 代码。

@include 指令让您可以使用(包括)mixin


定义 Mixin

使用 @mixin 指令来定义一个 Mixin。

Sass @mixin 语法:

  1. @mixin <i>name </i>{
  2. property : value ;
  3. property : value ;
  4. ...
  5. }

下面的示例创建一个名为 "important-text&quot 的 mixin:

SCSS 语法:

  1. @mixin important-text {
  2. color: red;
  3. font-size: 25px;
  4. font-weight: bold;
  5. border: 1px solid blue;
  6. }
提示:关于 Sass 中连字符和下划线的提示:连字符和下划线被认为是相同的。这意味着 @mixin important text{} 和 @mixin important_text{} 被认为是相同的 mixin!

使用 Mixin

@include 指令用来包含(include)一个 mixin

Sass @include mixin 语法:

  1. selector {
  2. @include mixin-name ;
  3. }

因此,要包含(include)上面创建的 "important-text" mixin:

SCSS 语法:

  1. .danger {
  2. @include important-text;
  3. background-color: green;
  4. }

Sass transpiler 将转化成一下普通 CSS:

CSS 输出:

  1. .danger {
  2. color: red;
  3. font-size: 25px;
  4. font-weight: bold;
  5. border: 1px solid blue;
  6. background-color: green;
  7. }

一个 mixin 也能包含(include)另外一个 mixins:

SCSS 语法:

  1. @mixin special-text {
  2. @include important-text;
  3. @include link;
  4. @include special-border;
  5. }

将变量传递给 Mixin

Mixin 是可以接受参数的。通过这种方式,您可以将变量传递给一个 mixin。

下面是如何使用参数定义 mixin:

SCSS 语法:

  1. /* 定义一个带两个参数的 mixin */
  2. @mixin bordered($color, $width) {
  3. border: $width solid $color;
  4. }
  5. .myArticle {
  6. @include bordered(blue, 1px); // 传入两个参数调用 mixin
  7. }
  8. .myNotes {
  9. @include bordered(red, 2px); // 传入两个参数调用 mixin
  10. }

请注意,参数设置为变量,然后用作 border 属性的值(颜色和宽度)。

编译后,CSS 将如下所示:

CSS 输出:

  1. .myArticle {
  2. border: 1px solid blue;
  3. }
  4. .myNotes {
  5. border: 2px solid red;
  6. }

Mixin 的默认值

也可以为 mixin 变量定义默认值:

SCSS 语法:

  1. @mixin bordered($color: blue, $width: 1px) {
  2. border: $width solid $color;
  3. }

然后,您只需要指定在包含(include)mixin 时要更改的值:

SCSS 语法:

  1. .myTips {
  2. @include bordered($color: orange);
  3. }

使用 Mixin 实现 Vendor Prefix

mixin 的另一个好用法是用于 Vendor Prefix(浏览器引擎前缀,是一些放在 CSS 属性前的小字符串,用来确保这种属性只在特定的浏览器渲染引擎下才能识别和生效。)。

这是一个 transform 的例子:

SCSS 语法:

  1. @mixin transform($property) {
  2. -webkit-transform: $property;
  3. -ms-transform: $property;
  4. transform: $property;
  5. }
  6. .myBox {
  7. @include transform(rotate(20deg));
  8. }

在编译之后, CSS 会是这样:

CSS 输出:

  1. .myBox {
  2. -webkit-transform: rotate(20deg);
  3. -ms-transform: rotate(20deg);
  4. transform: rotate(20deg);
  5. }