【问题标题】:SASS mixin to include code block depending on whether body has class (or grand parent)SASS mixin 包含代码块,具体取决于主体是否具有类(或祖父)
【发布时间】:2021-01-23 07:35:59
【问题描述】:

我正在尝试创建一个 mixin,它允许我根据 body 是否具有某个类来灵活地编写代码块。

@mixin when($class) {

    body.#{$class} & {

        @content;

    }
}

用例

#hero {

    @include when('theme--dark') {

        span { 

            content: 'Good Evening'; 

        }
    }
}
#hero {

    @include when('page-landing') {

        button.cta { 

            padding: 3rem 5rem;

            font-size: 3rem;

            background-color: $green;
        }
    }
}

如果能做到以下几点就更好了

@mixin when($parent, $class) {

    #{$parent}.#{$class} & {

        @content;

    }

}
#hero {

    @include when('body','page-landing') {

        button.cta { 

            padding: 3rem 5rem;

            font-size: 3rem;

            background-color: $green;

        }
    }
}

以前的代码都不起作用,甚至不确定语法,但想知道是否可以产生类似的东西,感谢任何帮助!

【问题讨论】:

  • 代码实际上可以工作,我有一些小的语法问题,但我会留下这个问题,以防有人有更好的实现

标签: sass scss-mixins


【解决方案1】:

虽然您的方法绝对没问题,但这里有一个更简洁的实现,它在您要检查的选择器数量方面提供了更多的灵活性。

@mixin when($selectors...) {
  $n: "";
  
  @each $selector in $selectors {
    $n: str-insert($n, "#{$selector}", str-length($n) + 1);
  }
  
  #{$n} {
    @content;
  }
}

#hero {
  @include when('body', '[dark-mode=true]', '.primary') {
    color: #fff;
  }
}

【讨论】:

  • 首先我很高兴我没有关闭问题,其次您的版本要好得多,我喜欢您实现中的灵活性和可重用性,谢谢!
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多