Sass无法使用父选择器

时间:2016-02-26 16:43:55

标签: sass extend

我需要以某种方式创建使用SCSS和占位符完成的CSS输出

这是我想要的输出

.myclass {
  color: silver;
}
.myclass-gold {
  color: gold;
}

当我尝试这样的SCSS placeholder

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}

.myclass {
  @extend %placeholder !optional;
}

我只得到这个结果

.myclass {
  color: silver;
}

黄金部分完全掉落。

我需要一个占位符,因为我使用了许多选择器,例如a.myclassinput.myclass等,并且不希望这些爆炸的@export

如果我不使用占位符而是使用随机选择器 - 并取一些extry字节 - 输出不正确,

ae739ab7 {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}

.myclass {
  @extend ae739ab7 !optional;
}

产量

ae739ab7, .myclass {
  color: silver;
}
ae739ab7 ae739ab7-gold, .myclass ae739ab7-gold {
  color: gold;
}

ae739ab7 {
  color: silver;
  &-gold {
    color: gold;
  }
}

.myclass {
  @extend ae739ab7 !optional;
}

给了我

ae739ab7, .myclass {
  color: silver;
}
ae739ab7-gold {
  color: gold;
}

此处缺少的内容始终是选择器.myclass-gold

这有可能以某种魔术技巧吗?

1 个答案:

答案 0 :(得分:4)

仅扩展完全匹配的工作。当你这样写:

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}

你真正创造的是:

%placeholder {
  color: silver;
}

%placeholder %placeholder-gold {
  color: gold;
}

所以当你这样写:

.myclass {
  @extend %placeholder !optional;
}

它只会扩展%placeholder选择器,而不是%placeholder-gold选择器。要获得您正在寻找的行为,您必须单独扩展每个占位符选择器:

%placeholder {
  color: silver;
  @at-root #{&}-gold {
    color: gold;
  }
}

@mixin placeholder {
    & {
        @extend %placeholder;
        @at-root #{&}-gold {
            @extend %placeholder-gold;
        }
    }
}

.myclass {
  @include placeholder;
}

输出:

.myclass {
  color: silver;
}
.myclass-gold {
  color: gold;
}