SCSS扩展嵌套选择器并覆盖嵌套规则集

Tod*_*ilo 18 css sass

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

%block {
  .title {
    font-size:12px;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

.superblock {
  @extend %block;
  .title {
    font-weight:bold;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要的答案是这样的:

.superblock .title {
  font-size: 12px;
  font-weight: bold; }
Run Code Online (Sandbox Code Playgroud)

但是,我得到的答案是这样的:

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

.superblock .title {
  font-weight: bold; }
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或者这是怎么回事?澄清我想合并它.如果我直接在其中.superblock添加内容并添加另一个.superblock2也扩展%block,它们合并没有任何问题.

cim*_*non 32

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

@extend指令不仅仅是一种使用类代替mixins的方法(类似于LESS风格的mixin调用).@extend当你扩展普通类而不是扩展类时,为什么它的工作方式变得清晰:

.block {
  font-size:12px;
}

.foo {
    @extend .block;
    font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

输出:

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

.foo {
  font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

使用extend类只会抑制原始类名的发出.

现在,您已经看到了,为什么@extend作品它的方式,你还想要什么@extend提供? 如果答案是否定的,那么你需要使用mixin:

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

.superblock {
    @include block {
        font-weight: bold;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

.superblock .title {
  font-size: 12px;
  font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)