当我们有嵌套的mixins时如何编译sass

时间:2013-11-07 06:29:35

标签: sass compass-sass

当我尝试使用指南针编译时,我收到错误说明 “Mixins可能无法在控制指令或其他mixin中定义。”

以下是我正在使用的代码

@mixin fn-menu {
    $triangle-height: 8px;
    $triangle-width: 16px;

    @mixin menu-marker-inner($pos: top)  {
        $size: 12px;
        $offset-height: $triangle-height;
.......

谷歌搜索时,我发现不支持Nested Mixins。不过此网页http://sass-lang.com/documentation/file.SASS_CHANGELOG.html表示

**Smaller Improvements**

Mixins and functions may now be defined in a nested context, for example within @media rules. This also allows files containing them to be imported in such contexts.

我正在执行命令

compile sass --sass-dir sass --force

我该如何解决这个问题?

不幸的是,我无法更改编码风格,因为此代码来自产品。

1 个答案:

答案 0 :(得分:0)

您可以在@media规则中声明mixins和函数,甚至可以在传统的嵌套规则中声明,例如:

.users{
  @function user-details-width($slots){
    //Some calculation here...
  }

  @mixin user-details{
    //Some syling logic here...
    width: user-details-width(3);
  }

  .details{
    @include user-details; //This is totally OK
  }
}

a{
  @include user-details; //<<<ERROR!!!
}

当你这样做时,你的mixins和函数在该上下文中作用域(并且只在同一级别或下面可见)。

不幸的是,mixins(和函数)不能在其他mixin或函数中定义,甚至不能在控制指令(@for, @if, @while@each)中定义。同样的限制适用于@import指令。您可以在规则中进行导入,但不能使用“if”指令来调整导入,也不能使用任何其他控制指令(或mixins和函数)来调度导入。