【问题标题】:Ampersand and mixins in SCSSSCSS 中的 & 和 mixins
【发布时间】:2019-07-29 13:19:42
【问题描述】:

搜索但找不到答案..

我有一个由以下类生成的元素(由外部平台生成):p-button 和 button。

现在 SCSS 是这样的:

.p-button {
    &.button {
        margin: 10px;
    }
 }

但我想使用 mixin 包含进行重构(这是一个大项目,所以除了使用 mixin 之外,没有其他方法可以使代码变得更好)。 mixin 采用给定的选择器并应用 .给它。我无法更改 mixin,因为许多其他团队都在使用它,所以我不能将 & 符号与选择器一起传递。我试过这个:

.p-button {
    & {
        @include button-appearance("button") {
           margin: 10px;
        }
    }
 }

但这不起作用(在它之间放置一个空格)。你不能这样做:

.p-button {
    &@include button-appearance("button") {
        margin: 10px;
    }
 }

有人知道吗?

编辑:这是 mixin

@mixin button-appearance(
    $appearance-class, 
    $show, 
    $background-color, 
    $background-image, 
    $background-position) { 
        $sel: $button-selector;
           @if $appearance-class {
                $sel: $sel + '.' + $appearance-class;
         }

#{$sel} {
    @include normalized-background-image($background-image);
    @include show($show);
    background-color: $background-color;
    background-position: $background-position;
    }

    @content;
}

编辑 2:这是 $button-selector(我无法在平台中编辑它,但可能会在我自己的项目中覆盖它?)

$button-class: 'p-button';

$button-selector: '.#{$button-class}';

【问题讨论】:

  • 您是否只是想为.button 选择器继承.button 类的样式?
  • @R-b-n 你能在你的问题中添加$button-selector的值吗?
  • 感谢收看,刚刚完成!
  • @R-b-n 似乎您永远无法使用 mixin 将内容插入到选择器中。 “@content”关键字在生成的选择器之外。所以你应该使用一个简单的选择器来做到这一点。
  • @R-b-n 检查我编辑的答案。希望对您有所帮助。

标签: sass mixins


【解决方案1】:

大家,终于找到解决办法了。我刚刚从 .p-button mixin 包含中删除了 &.button,现在它可以工作了:

@include button-appearance ("button") { *styles* }
@include button-appearance () { *styles* }

【讨论】:

    【解决方案2】:

    在编辑原始问题后编辑答案,添加已使用且不可修改的 mixin

    原始 mixin 不会将传递给 mixin 的“@content”附加到生成的选择器中。所以如果你不能修改原来的 mixin,唯一的办法就是在 mixin 之外添加你的属性。根据 mixin,选择器将匹配预定义的“$button-selector”变量,因此它不会使用您的类。

    所以,如果你想使用“$button-class”中定义的相同类,请尝试以下操作:

    #{$button-selector}.button {
        margin: 10px;
    }
    

    将输出:

    .p-button.button {
        margin: 10px;
    }
    

    【讨论】:

    • OP 说他们不能改变 mixin。
    • @Arkellys 你能在你的问题中添加“$button-selector”的值吗?
    • 我不确定?
    • @Arkellys 你正在使用的mixin,使用一个变量来定义基本选择器名称$sel: $button-selector;$button-selector 是一个变量,没有定义在 mixin 的范围内,也没有定义为 mixin 参数。所以变量是在mixin之外定义的。
    • 哦,我认为您将我与 OP 混淆了,您应该在该问题上发表此评论。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2013-07-10
    • 2018-10-06
    • 2020-05-30
    • 2013-04-28
    • 1970-01-01
    • 2018-06-25
    • 2019-10-04
    相关资源
    最近更新 更多