Zuvor wurden alle Farben in Discourse als SCSS-Variablen gespeichert. Um automatisches Umschalten des Farbschemas für den Dunkelmodus zu unterstützen, haben wir diese Farben im Kern in benutzerdefinierte CSS-Eigenschaften umgewandelt. Sie können die vollständige Liste jetzt einfach im Inspektor einsehen:
Themes und Plugins müssen alle $color SCSS-Variablen, die in Stylesheets verwendet werden, auf die entsprechenden --color CSS-Eigenschaften umstellen. In den meisten Fällen handelt es sich dabei um eine einfache Suchen-und-Ersetzen-Aufgabe:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low);
Es gibt jedoch einige Fälle, in denen ein Theme oder ein Plugin eine komplexere Variation einer Farbe verwendet, beispielsweise beim Abdunkeln oder Aufhellen mit SCSS-Farbfunktionen. Diese Fälle erfordern eine komplexere Refaktorierung, und dafür haben wir die Möglichkeit hinzugefügt, Farbdefinitionen in Themes und Plugins zu erweitern.
In Plugins
Dieser Commit im discourse-encrypt-Plugin ist ein gutes und einfaches Beispiel für eine solche Refaktorierung. Er verschiebt eine mix($color1, $color2) SCSS-Deklaration in eine separate Datei und speichert sie als CSS-Benutzereigenschaft. Anschließend wird die neue Datei als :color_definitions-Asset registriert, was sicherstellt, dass die neu deklarierte Farbeigenschaft in das Stylesheet für Farbdefinitionen aufgenommen wird.
In Themes
In Themes können Sie dasselbe tun, indem Sie CSS-Benutzereigenschaften in der Stylesheet-Datei common/color_definitions.scss deklarieren. Ein Beispiel hierfür finden Sie in diesem Commit im graceful-Theme.
Einige zusätzliche Hinweise
- Wenn transparente Farben über die Funktion
rgba($color, 0.5)verwendet werden, akzeptiert SCSS HEX- und RGB-Farben als ersten Parameter, während CSS-Benutzereigenschaften nur eine RGB-Farbe akzeptieren. Deshalb haben wir den HilfsfunktionhexToRGB()und einige Eigenschaften mit dem Suffix--rgbin den Farbdefinitionen eingeführt. Ein Beispiel:
// color_definitions.scss
:root {
--primary: #{$primary};
--primary-rgb: #{hexToRGB($primary)};
}
// anderes Stylesheet
.element {
background-color: rgba(var(--primary-rgb), 0.05);
}
- Beachten Sie, dass in dem obigen Snippet die SCSS-Variable interpoliert wird, wenn sie an eine benutzerdefinierte Eigenschaft übergeben wird. Dies ist eine Anforderung in SCSS, siehe Sass: Property Declarations für weitere Details.
- Die CSS
var()-Deklaration kann einen zweiten Wert als Fallback verwenden, falls der erste nicht verfügbar ist, z. B. wenn Sievar(--color1, red)schreiben, wird CSS auf die Farbe Rot zurückfallen, falls die Eigenschaft--color1nicht gefunden wird. In Plugins verwenden wir die SCSS-Farbvariablen als Fallbacks, um die Kompatibilität mit früheren Versionen von Discourse zu gewährleisten. Das frühere Beispiel würde mit einem Fallback wie folgt aussehen:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low, $primary-very-low);
Dieses Dokument wird versioniert – schlagen Sie Änderungen auf github vor.

