Breaking Change: Erweiterung zusammengesetzter Selektoren
LibSass erlaubt derzeit die Erweiterung zusammengesetzter Selektoren wie .message.info, aber die Art und Weise, wie sie erweitert wurden, stimmt nicht mit der Funktionsweise von @extend überein.
- Dart Sass
- ✓
- LibSass
- ✗
- Ruby Sass
- ✗
Wenn ein Selektor einen anderen erweitert, formatiert Sass alle Elemente, die dem Erweiterer entsprechen, so, als ob sie auch die erweiterte Klasse entsprechen würden. Mit anderen Worten, wenn Sie .heads-up {@extend .info} schreiben, funktioniert es genauso, als ob Sie class="heads-up" in Ihrem HTML durch class="heads-up info" ersetzt hätten.
Nach dieser Logik würden Sie erwarten, dass .heads-up {@extend .message.info} so funktioniert, als ob Sie class="heads-up" durch class="heads-up info message" ersetzt hätten. Aber so funktioniert es derzeit in LibSass und Ruby Sass nicht – anstatt .heads-up zu jedem Selektor hinzuzufügen, der *entweder .info oder .message* hat, fügt es ihn nur zu Selektoren hinzu, die *.info.message zusammen* haben.
SCSS-Syntax
// These should both be extended, but they won't be.
.message {
border: 1px solid black;
}
.info {
font-size: 1.5rem;
}
.heads-up {
@extend .message.info;
}
Sass-Syntax
// These should both be extended, but they won't be.
.message
border: 1px solid black
.info
font-size: 1.5rem
.heads-up
@extend .message.info
Um dieses Problem zu beheben, weitere Verwirrung zu vermeiden und die Implementierung sauber und effizient zu halten, wird die Möglichkeit, zusammengesetzte Selektoren zu erweitern, in Dart Sass nicht unterstützt und wird in einer zukünftigen Version von LibSass entfernt. Zur Kompatibilität sollten Benutzer stattdessen jeden einfachen Selektor separat erweitern .
SCSS-Syntax
.message {
border: 1px solid black;
}
.info {
font-size: 1.5rem;
}
.heads-up {
@extend .message, .info;
}
Sass-Syntax
.message
border: 1px solid black
.info
font-size: 1.5rem
.heads-up
@extend .message, .info
CSS-Ausgabe
.message, .heads-up {
border: 1px solid black;
}
.info, .heads-up {
font-size: 1.5rem;
}
⚠️ Vorsicht!
Da Sass die Details des HTML, das die CSS formatieren soll, nicht kennt, muss jede @extend möglicherweise zusätzliche Selektoren generieren, die auf Ihr HTML nicht zutreffen. Dies gilt insbesondere beim Wechsel von der Erweiterung zusammengesetzter Selektoren.
Meistens verursachen diese zusätzlichen Selektoren keine Probleme und fügen nur ein paar zusätzliche Bytes zu komprimiertem CSS hinzu. Einige Stylesheets verlassen sich jedoch möglicherweise stärker auf das alte Verhalten. In diesem Fall empfehlen wir, den zusammengesetzten Selektor durch einen Platzhalterselektor zu ersetzen.
SCSS-Syntax
// Instead of just `.message.info`.
%message-info, .message.info {
border: 1px solid black;
font-size: 1.5rem;
}
.heads-up {
// Instead of `.message.info`.
@extend %message-info;
}
Sass-Syntax
// Instead of just `.message.info`.
%message-info, .message.info
border: 1px solid black
font-size: 1.5rem
.heads-up
// Instead of `.message.info`.
@extend %message-info
CSS-Ausgabe
.heads-up, .message.info {
border: 1px solid black;
font-size: 1.5rem;
}