在嵌套mixin

时间:2017-06-15 09:05:03

标签: css3 polymer

Polymer支持CSS mixins,可以像这样设置:

scope1 {
  --mixin1: {
    attr1: val1;
  };
}

并像这样应用:

scope2 {
  @apply --mixin1; /* sets attr1 */
}

有没有办法在mixin中设置mixin的值?我试过这个,但它不起作用:

scope1 {
  --mixin1: {
    attr1: val1;
    --mixin2: {
      attr2: val2;
    };
  };
}

scope2 {
  @apply --mixin1; /* sets attr1 */
  @apply --mixin2; /* is attr2 set? */
}

为什么这会有用的一个真实案例:假设您有一个使用基于paper-listboxpaper-item的多个自定义组件的应用。您希望使用不同的间距和字体设置自定义组件中的所有列表的样式。您可以在全局范围内设置--paper-listbox--paper-item mixins。但这会影响依赖于默认值的两个元素的每次出现。而是在自定义组件中,您只需@apply --custom-list;并将该mixin设置为全局:root {--custom-list: {/*set list style, set item style*/}; }

1 个答案:

答案 0 :(得分:0)

Workaround: Instead of nesting mixins, refactor into selectors:

scope1 {
  --mixin1: {
    attr1: val1;
  };
}
scope1 scope2 {
  --mixin2: {
    attr2: val2;
  };
}

In the use case above, instead of --custom-list with nesting:

:root custom-list {
  --paper-input-container: {/*set list style*/};
  --paper-item: {/*set item style*/};
}