SASS规则重用

时间:2014-10-09 02:28:09

标签: css sass

我有一组不同颜色的图标,每种颜色都使用CSS类声明的不同状态。例如,<span class="icon icon--app"><span>会显示一个灰色的应用图标,而<span class="icon icon--app icon__light icon__selected"><span>则会显示一个白色的应用图标。

以下代码是用SCSS编写的。

span.icon {
    display: inline-block;
    width: 32px;
    height: 32px;

    &.icon--app {
        background: url(../images/app_gray.png);

        &.icon__selected {
            background: url(../images/app.png);
        }

        &.icon__light {
            background: url(../images/app_gray.png);

            &.icon__selected {
                background: url(../images/app_white.png);
            }
        }
    }

    &.icon--device {
        background: url(../images/device_gray.png);

        &.icon__selected {
            background: url(../images/device.png);
        }

        &.icon__light {
            background: url(../images/device_gray.png);

            &.icon__selected {
                background: url(../images/device_white.png);
            }
        }
    }
}

问题是,上面列出了很长的CSS规则列表,它们与appdevice以及其他图标有很多相似之处。我想知道我是否可以使用SASS简化这些CSS规则?

2 个答案:

答案 0 :(得分:4)

我认为你可以在Sass中使用mixin

e.g。

@mixin icon($type) {
    .icon-#{$type} {
        background: url(../images/#{$type}_gray.png);
    }
}

@include icon(app);
@include icon(device);

答案 1 :(得分:3)

我为你创建了一个mixin:

@mixin icon($type) {
  &.icon--#{$type} {
    background: url(../images/#{$type}_gray.png);

    &.icon__selected {
      background: url(../images/#{$type});
    }

    &.icon__light {
      background: url(../images/#{$type});

      &.icon__selected {
        background: url(../images/#{$type}_white.png)
      }
    }
  }
}

span.icon {
  display: inline-block;
  width: 32px;
  height: 32px;

  @include icon(app);

  @include icon(device);
}