@mixin带有嵌套元素的 scss 是可能的吗?

@mixin scss with nested elements is possible?

提问人:Heliomar P. Marques 提问时间:4/26/2022 最后编辑:Heliomar P. Marques 更新时间:4/27/2022 访问量:194

问:

我正在尝试使用 mixin 来减少代码的重复性,但我无法访问嵌套元素。

谁能告诉我这种方法是否可行?

@mixin schema-calendar($backgroundColor: var(--ion-color-primary), $titleColor: var(--ion-color-secondary)) {
  background-color: $backgroundColor !important;

  .switch-btn,  
  ion-icon {
    color: $titleColor !important;
    text-transform: uppercase;
  }
  .week-toolbar li {
    color: $titleColor !important;
    font-weight: 900;
  }
  button.today p { color: $titleColor !important; }
  button.on-selected {
    p { color: var(--ion-color-secondary-contrast) !important;}
  }
}

ion-calendar.schemaDefault {
  @include schema-calendar();
}

ion-calendar.schemaBlackRed {
  @include schema-calendar(var(--ion-card-black-red));
}

ion-calendar.schemaIndigo {
  @include schema-calendar(var(--ion-card-indigo), var(--ion-color-light));
}

当直接在 css 中使用时,它运行良好,我知道当 scss 编译为 css 时,代码被修改但结果是一样的,但是当我根据上面的代码使用 mixin 时,只应用了 background-color 属性。

ion-calendar.schemaBlackRed {
  // primaryColor: 'var(--ion-card-blackred)', secondaryColor: 'var(--ion-color-secondary)', titleColor: 'var(--ion-color-secondary)',
  background-color: var(--ion-card-black-red) !important;

  .switch-btn,  
  ion-icon {
    color: var(--ion-color-secondary) !important;
    text-transform: uppercase;
  }
  .week-toolbar li {
    color: var(--ion-color-secondary) !important;
    font-weight: 900;
  }
  button.today p { color: var(--ion-color-secondary) !important; }
  button.on-selected {
    p { color: var(--ion-color-secondary-contrast) !important;}
  }
}
CSS SASS 嵌套 元素

评论

1赞 Amaury Hanser 4/26/2022
你试过吗?它确实有效。当您需要测试此类内容时,可以使用 SassMeister Playground
0赞 Heliomar P. Marques 4/26/2022
感谢您提供的信息,我通过该工具对其进行了验证,代码确实正确,但由于某种原因,它无法按预期工作,如果没有 mixin,它运行良好,仍在尝试理解。谢谢。

答:

0赞 Heliomar P. Marques 4/27/2022 #1

我发现问题之所以发生,是因为我在页面级别包含了样式,将代码从最初的 Ionic 加载中移出,并且一切都按预期工作。