“@extend 必须与 %placeholder 一起使用”是什么意思?

Ang*_*ker 9 css lint sass

在整理以下 SASS 语句时,我收到@extend must be used with a %placeholder警告。

.reg-text {
  color: #202226;
  font-family: $font-page;
  font-size: 17px;
  line-height: 25px;
}

.reg-text-header {
  @extend .reg-text;
  font-weight: 600;
}
Run Code Online (Sandbox Code Playgroud)

警告是什么意思,我该如何解决。Afaik,.extend存在的目的是为了扩展类。

Gre*_*reg 9

这是指一种意见,即使用@extend普通 CSS 选择器是一个坏主意。

我个人同意这个观点,但它仍然是一个观点。@extendSass 规范允许与任何类型的选择器一起使用,因此我可能会与 linter 的维护者取得联系,并要求您的错误中的术语对此进行解释。

如果您使用@extend扩展选择器的定义,则每次扩展选择器时都会编译为 CSS,其中每次使用@extend关键字时都会包含选择器的引用。

但是,如果您使用@extend%(AKA“Silent Classes”)开头的占位符选择器,则该功能更符合最佳实践。首先,任何未使用的占位符选择器甚至都不会渲染到最终的 CSS(非常适合构建可重用的设计库)。

例如,如果您在 CSS 选择器中有一块可重用的内容,请考虑将其转换为使用占位符选择器:

.reg-text {
    color: #202226;
    font-family: $font-page;
    font-size: 17px;
    line-height: 25px;
}

.reg-text-header {
    @extend .reg-text; // this is inefficient and causes specificity issues!
    font-weight: 600;
}

// Instead, do this:

%reg-text {
    color: #202226;
    font-family: $font-page;
    font-size: 17px;
    line-height: 25px;
}

div.your-actual-selector-on-the-page .reg-text {
    @extend %reg-text;
}

div.your-actual-selector-on-the-page .reg-text-header {
    @extend %reg-text; // This compiles much neater and doesn't get in the way of specificity.
    font-weight: 600;
}

Run Code Online (Sandbox Code Playgroud)