检测包含Mixin的位置

时间:2014-03-30 21:53:26

标签: css sass mixins

有没有办法确定mixin的位置? IE:

@include test();

.test {
    @include test();
}

MIXIN

@mixin test(){
    @if (weAreNested) {
        // We are in a css selector
        &.test {}
    } @else {
        // we are not inside any selector
        .test {}
    }
}

那么,我们可以使用某种指令来做到这一点吗?

使用&在选择器已经知道我们是否处于基本级别并且不会编译css文件之前,所以我想知道他们是否有办法让我们测试它?

干杯

1 个答案:

答案 0 :(得分:1)

我不知道这在技术上是否可行,但我很确定这不是一个好主意。

如果您将mixins视为任何编程语言中的类似函数,您的问题可以被重新描述为“函数可以确定调用它的位置以触发不同的功能”。虽然在许多语言中确实可以实现这一点 - 例如,通过处理当前的“堆栈跟踪” - 将其用于除调试之外的任何其他内容肯定会导致难以维护的代码。

更具体地说,您的示例显示了单个mixin执行两个相当不同的作业:

  • weAreNested分支为特定规则集添加一些规则,只要匹配的元素也有一个额外的类
  • else分支为匹配特定类的所有元素创建全局规则;事实上,这个例子并没有通过mixin获得任何东西,尽管有一个带参数的例子是可能的

在我看来,这是一个更好的主意:

  • 要么有两个mixin,名称相当,甚至可能通过第三个mixin共享实现
  • 使用mixin的参数来明确说明您想要的行为,而不是从调用mixin的上下文中“神奇地”推断它