好的,我有一个带有嵌套选择器的占位符:
%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; }
我做错了什么或者这是怎么回事?澄清我想合并它。如果我直接在.superblock
中添加内容并添加另一个.superblock2
,这也会扩展%block,它们合并时没有任何问题。
答案 0 :(得分:30)
Sass没有“合并”重复选择器的功能。在编译CSS之后,您需要找到另一个实用程序来执行此操作。
@extend
指令不仅仅是一种使用类代替mixins的方法(类似于LESS风格的mixin调用)。当您扩展普通类而不是扩展类时,为什么@extend
的工作方式变得清晰:
.block {
font-size:12px;
}
.foo {
@extend .block;
font-weight: bold;
}
输出:
.block, .foo {
font-size: 12px;
}
.foo {
font-weight: bold;
}
使用extend类只会抑制原始类名的发射。
现在你已经看到为什么@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;
}
答案 1 :(得分:2)
这就是它。 SASS单独生成扩展声明。
它没有选择器对声明进行分组的功能,它并不那么聪明。
但你不必担心CSS清洁度。现代Web服务器提供CSS gzip压缩,所有复制都将很好地压缩。
答案 2 :(得分:0)
LESS可以做到这一点。但是你会写:
.superblock {
.title {
.block .title;
}
}
不确定它是否也适用于@extend。
答案 3 :(得分:-2)
您可以使用工具,我用它来清理CSS https://github.com/addyosmani/grunt-uncss
“使用UnCSS从项目中删除未使用的CSS的艰巨任务。”