Sass无法@extend使用父选择器创建的选择器

Sass无法@extend使用父选择器创建的选择器,sass,extend,Sass,Extend,我需要用SCS和占位符以某种方式创建CSS输出 这是我想要的输出 .myclass { color: silver; } .myclass-gold { color: gold; } 当我试着用这样的 %placeholder { color: silver; #{&}-gold { color: gold; } } .myclass { @extend %placeholder !optional; } 我只得到这个结果 .myclass {

我需要用SCS和占位符以某种方式创建CSS输出

这是我想要的输出

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

当我试着用这样的

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

.myclass {
  @extend %placeholder !optional;
}
我只得到这个结果

.myclass {
  color: silver;
}
黄金部分被完全去掉了


我需要一个占位符,因为我使用了许多选择器,如
a.myclass
input.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, .myclass {
  color: silver;
}
ae739ab7-gold {
  color: gold;
}
这里缺少的总是选择器
.myclass gold


这是否可能通过某种魔术实现?

仅对精确匹配进行扩展。当你写这篇文章时:

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}
.myclass {
  @extend %placeholder !optional;
}
你真正创造的是:

%placeholder {
  color: silver;
}

%placeholder %placeholder-gold {
  color: gold;
}
所以当你写这篇文章时:

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}
.myclass {
  @extend %placeholder !optional;
}
它将只扩展
%占位符
选择器,而不扩展
%占位符黄金
选择器。要获得所需的行为,必须分别扩展每个占位符选择器:

%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;
}

仅扩展精确匹配的工作。当你写这篇文章时:

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}
.myclass {
  @extend %placeholder !optional;
}
你真正创造的是:

%placeholder {
  color: silver;
}

%placeholder %placeholder-gold {
  color: gold;
}
所以当你写这篇文章时:

%placeholder {
  color: silver;
  #{&}-gold {
    color: gold;
  }
}
.myclass {
  @extend %placeholder !optional;
}
它将只扩展
%占位符
选择器,而不扩展
%占位符黄金
选择器。要获得所需的行为,必须分别扩展每个占位符选择器:

%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;
}

我从未想过在mixin中使用extend。我从未想过在mixin中使用extend。