【发布时间】:2020-05-06 10:46:59
【问题描述】:
我的项目使用 vuetify 和很多我自己的样式。
我的样式经常在样式声明中多次使用&,如下所示:
.sis-sidebar {
&__link {
&.-active &-placeholder {
color: #fff;
}
}
}
// Compiles to:
.sis-sidebar__link.-active .sis-sidebar__link-placeholder {
color: #fff;
}
它适用于这样的 html:
<div class="sis-sidebar__link -active">
<div class="sis-sidebar__link-placeholder">
This one is white
</div>
</div>
我希望我的所有样式都比框架中的样式具有更高的优先级。但我不想改变里面的任何东西。这就是我要修改的入口 scss 文件:
@import 'framework';
@import 'my-styles';
我希望我的所有样式都带有一些 #sis 前缀,但只有一次。如果我这样做了
@import 'framework';
#sis {
@import 'my-styles';
}
// It compiles to:
#sis .is-sidebar__link.-active #sis .is-sidebar__link-placeholder {
color: #fff;
}
// And I want it to be:
#sis .is-sidebar__link.-active .is-sidebar__link-placeholder {
color: #fff;
}
有可能做到吗?
【问题讨论】:
-
但确实如此。 github.com/Kasheftin/sass-prefix-test。字符串
#sis .is-sidebar__link.-active #sis .is-sidebar__link-placeholder的中间有#sis。 -
我认为关键是#sis 应该只在开头出现一次,而不是多次。原因是 & 符号总是被直到根的完整结构替换。这是您在使用不带#sis 的代码版本时受益的地方。但是,您不能两全其美,因此我建议您简化选择器。无论如何,这是一个好主意,因为这样的代码对于大多数人来说很难阅读。