2013-12-09 51 views
3

我有三个青菜文件:a.scss,b.scss,c.scss是否可以创建一个本地/私人sass mixin?

a.scss:

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

p{ 
    @include font(10px, blue) 
    } 

b.scss:

@mixin font() 
{ 
.. 
} 

c.scss

@import a.scss 
@import b.scss 

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

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

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

回答

1

你说得对。就像在一个典型的CSS文件中一样,您的sass项目是自上而下编译的。因此,与前一个共享同名的mixin会覆盖它。如果你想在c.scss中使用原始的mixin,你将不得不重新定义它。

1

选择器中的混合是局部的,就像Sass变量一样。这两个混入是相互独立的:

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

.bar{ 
    @mixin my_color(){ 
     color: #00ffcc; 
    } 
    @include my_color; 
} 

因此,要回答你的最后一个问题 - 只能在全局级别定义混入是全球性的,你可以放心地另有重用的名字。在你的例子中,如果你的a.scss,b.scss和c.scss被构造为定义不同的总体类(例如.header,.main,.footer),你可以为每个类设置本地字体混合。

相关:Localizing/Scoping a sass mixin