sass - 避免 SCSS 规则重复

标签 sass rule repeat

我有一个文件,其中定义了一些用于边框阴影、渐变等的 CSS3 规则。
为了比较,我需要添加 behavior: url('/assets/css3pie.htc'); 以支持 IE。

@mixin box-shadow($props) {
  -webkit-box-shadow: #{$props};
     -moz-box-shadow: #{$props};
          box-shadow: #{$props};
  behavior: url('/assets/css3pie.htc');
}

为我的大部分 CSS3 添加了行为规则,例如 border-shadow、gradients 和 border-radius

不幸的是,我注意到在输出中,当我使用两个或多个 CSS3 规则时,我也以 多个 行为结束:url('/assets/css3pie. htc'); 给定对象的规则。

示例输出是:

button {
-webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  behavior: url("/assets/css3pie.htc"); # first time defined by the border-radius rule
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  behavior: url("/assets/css3pie.htc"); # second time, defined from the box-shadow rule
}

哪个是最好的解决方案?有没有办法检查继承树以及规则是否已经定义?

最佳答案

看起来这是一个 SCSS 错误。

大多数属性在类似情况下会被覆盖,但有些属性可以多次定义,如 background

这就是为什么它不是 SCSS 覆盖规则的默认行为。 behavior 属性未定义为 should beoverwritten 属性的原因是一个错误。

解决这个问题的最好方法是删除 behavior 定义属性并定义一个 css3pie 混合宏,如下所示:

@mixin css3pie() {
  behavior: url('/assets/css3pie.htc');
}

然后要使用它,请将以下行添加到每个启用 CSS3 的元素:

.css3-enabled-element {
  @include css3pie;
}

关于sass - 避免 SCSS 规则重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056757/

相关文章:

CSS/SCSS : cartesian product of two sets of selectors

c++ - 应用关于如何递增枚举的规则

design-patterns - 织物 JS 中对象缩放的模式重复

javascript - 如何向返回值添加分隔符,并为分隔符指定默认值?

php - CSS 类重命名与 php 集成

javascript - 如何在 Vanilla JS 中显示和隐藏文本?

java - 使用规则引擎

xpages - Unitegallery 不支持重复控制

css - SASS计算HSL 2种颜色之间的差异

javascript - 使用 JavaScript 的 XPath 表达式添加自定义规则