【问题标题】:Prevent Sass from including property at all完全阻止 Sass 包含属性
【发布时间】:2016-10-02 16:42:28
【问题描述】:

在我当前的项目中,我使用 sass-mixin 大致如下:

mixin.scss:

@mixin my_mixin($header-border-top-stack, 
                $header-border-bottom-stack) {
  #some-id {
     border-top: $header-border-top-stack;
     border-bottom: $header-border-top-stack;
  }
}

styles.scss:

@import "path/to/mixin.scss";
@include my_mixin(1px solid black, 2px solid red);

有时我根本不想碰border-bottom 属性。 可悲的是:

@import "path/to/mixin.scss";
@include my_mixin(1px solid black, none);

.css 的结果如下:

#some-id {
  border-top: 1px solid black;
  border-bottom: none;
}

我正在寻找一种方法来防止混合触及border-bottom 属性(甚至不要将其包含在.css 中)。有什么想法吗?

【问题讨论】:

    标签: html css sass mixins


    【解决方案1】:

    我为支票添加了@if condition

    @mixin my_mixin($header-border-top-stack, $header-border-bottom-stack) {
      #some-id {
        border-top: $header-border-top-stack;
        @if $header-border-bottom-stack != 'none' {
          border-bottom: $header-border-bottom-stack;
        }
      }
    }
    

    这很好用。但是只是一个提示,我注意到您 mixin 将选择器放在其中不灵活,我不知道这是否是一个好习惯。你可以这样重写它

    @mixin my_mixin($header-border-top-stack, $header-border-bottom-stack) {
      border-top: $header-border-top-stack;
      @if $header-border-bottom-stack != 'none' {
        border-bottom: $header-border-bottom-stack;
      }
    }
    

    通过这样做,您的 mixin 可以用于不同的 tags
    div { @include my_mixin(1px solid black, none); }
    p { @include my_mixin(1px solid black, 2px solid red); }

    而不是它总是返回#some-id { ... }

    【讨论】:

    • 非常感谢!不过,我会坚持使用mixin 中的id。这个mixin 的目的只是根据一些变量生成一段代码,所以我可以在@media-queries 中使用稍微不同的设计:) border-property 只是一个例子,实际上我使用它在不同的media-queries 中控制div 的宽度。
    猜你喜欢
    • 2020-01-10
    • 2019-10-27
    • 1970-01-01
    • 2020-01-16
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多