是否可以创建本地/私人sass mixin?

tty*_*tyy 8 css sass

我有三个sass文件:a.scss,b.scss,c.scss

a.scss:

@mixin font($size, $color){
  font-size: #{$size};
  color: #{$color}
  }

 p{
  @include font(10px, blue)
  }
Run Code Online (Sandbox Code Playgroud)

b.scss:

@mixin font()
{
..
}
Run Code Online (Sandbox Code Playgroud)

c.scss

@import a.scss
@import b.scss
Run Code Online (Sandbox Code Playgroud)

我认为b.scss中的mixin font()会覆盖a.scss中的mixin字体($ size,$ color).

p{
  @include font(10px, blue)  // use mixin font() in b.scss, error
  }
Run Code Online (Sandbox Code Playgroud)

是否可以创建本地/私人sass mixin?或者sass中的所有mixin都是全局的,我必须为每个mixin赋予它们唯一的名称?

小智 6

就像Sass变量一样,选择器中的混合对象对于该选择器来说是本地的。这两个mixin彼此独立:

.foo{
    @mixin my_color(){
        color: #ffcc00;
    }
    @include my_color;
}

.bar{
    @mixin my_color(){
        color: #00ffcc;
    }
    @include my_color;
}
Run Code Online (Sandbox Code Playgroud)

因此,要回答您的最后一个问题-只有在全局级别定义的mixin是全局的,否则您可以安全地重用名称。在您的示例中,如果a.scss,b.scss和c.scss的结构定义了不同的总体类(例如.header,.main,.footer),则可以为每个类使用本地字体混合。

相关:定位/定义Sass mixin。


Boo*_*gie 6

更新:现在使用新@use规则,您只需通过名称以-或_开头即可添加私有成员

更多信息在这里: https ://sass-lang.com/documentation/at-rules/use#private-members


小智 1

你是对的。就像在典型的 CSS 文件中一样,您的 sass 项目是自上而下编译的。因此,与前一个混入同名的混入将覆盖它。如果您希望在 c.scss 中使用原始 mixin,则必须重新定义它。