24

好的,所以我有一个带有嵌套选择器的占位符:

%block {
  .title {
    font-size:12px;
  }
}

我想扩展它并添加到.title类中:

.superblock {
  @extend %block;
  .title {
    font-weight:bold;
  }
}

我想要的答案是这样的:

.superblock .title {
  font-size: 12px;
  font-weight: bold; }

然而,我得到的答案是这样的:

.superblock .title {
  font-size: 12px; }

.superblock .title {
  font-weight: bold; }

我做错了什么还是这就是它的工作原理?为了澄清我想合并它。如果我直接在 %block 中添加一些东西.superblock并像另一个.superblock2扩展 %block 一样添加它们,它们会毫无问题地合并。

4

4 回答 4

42

Sass 没有“合并”重复选择器的功能。在 CSS 编译完成后,您需要找到另一个实用程序来执行此操作。

@extend指令不仅仅是一种使用类代替 mixin 的方法(类似于 LESS 样式的 mixin 调用)。@extend当您扩展普通类而不是扩展类时,为什么会以这种方式工作变得很清楚:

.block {
  font-size:12px;
}

.foo {
    @extend .block;
    font-weight: bold;
}

输出:

.block, .foo {
  font-size: 12px;
}

.foo {
  font-weight: bold;
}

使用扩展类只会抑制原始类名的发射。

既然您已经了解了为什么@extend会以这种方式工作,您还想要什么@extend优惠吗? 如果答案是否定的,那么您需要使用 mixin:

@mixin block {
    // styles
    .title {
        font-size: 12px;
        @content;
    }
}

.superblock {
    @include block {
        font-weight: bold;
    }
}

输出:

.superblock .title {
  font-size: 12px;
  font-weight: bold;
}
于 2013-04-18T15:15:57.620 回答
2

这差不多。SASS 单独生成扩展声明。

而且它没有按选择器对声明进行分组的功能,它不是那么聪明。

但是您不必担心 CSS 的清洁度。现代网络服务器提供 CSS gzipped,所有的重复都将被很好地压缩。

于 2013-04-18T15:19:47.247 回答
0

LESS可以做到这一点。但是你会写:

.superblock {
  .title {
    .block .title;
  }
}

不确定它是否也适用于@extend。

于 2017-04-26T14:08:43.430 回答
-2

你可以使用一个工具,我用它来清理 css https://github.com/addyosmani/grunt-uncss

“使用 UnCSS 从项目中删除未使用的 CSS 是一项艰巨的任务。”

于 2015-09-07T16:42:40.270 回答