Auparavant, toutes les couleurs dans Discourse étaient stockées sous forme de variables SCSS. Pour prendre en charge la bascule automatique du thème de couleur en mode sombre, nous avons converti ces couleurs dans le cœur en propriétés CSS personnalisées. Vous pouvez facilement voir la liste complète dans l’inspecteur maintenant :
Les thèmes et les plugins doivent remplacer toutes les variables SCSS $color utilisées dans les feuilles de style par les équivalents de propriétés CSS --color. Dans la plupart des cas, il s’agit d’une simple tâche de recherche et remplacement :
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low);
Mais il existe des cas où un thème ou un plugin utilise une variation plus complexe d’une couleur, par exemple, lors de l’assombrissement ou de l’éclaircissement à l’aide de fonctions de couleur SCSS. Ces cas nécessitent un refactoring plus complexe, et pour cela, nous avons ajouté la capacité d’étendre les définitions de couleurs dans les thèmes et les plugins.
Dans les plugins
Ce commit dans le plugin discourse-encrypt est un bon et simple exemple d’un tel refactoring. Il déplace une déclaration SCSS mix($color1, $color2) dans un fichier séparé et la stocke en tant que propriété personnalisée CSS. Ensuite, le nouveau fichier est enregistré en tant qu’actif :color_definitions, ce qui garantit que la propriété de couleur nouvellement déclarée est incluse dans la feuille de style des définitions de couleur.
Dans les thèmes
Dans les thèmes, vous pouvez faire la même chose en déclarant des propriétés CSS personnalisées dans la feuille de style common/color_definitions.scss. Vous pouvez consulter ce commit dans le thème graceful pour un exemple.
Quelques notes supplémentaires
- lorsque vous utilisez des couleurs transparentes via la fonction
rgba($color, 0.5), SCSS accepte les couleurs HEX et RVB dans le premier paramètre, tandis que les propriétés CSS personnalisées n’acceptent qu’une couleur RVB. C’est pourquoi nous avons introduit l’utilitairehexToRGB()et certaines propriétés avec le suffixe--rgbdans les définitions de couleurs. Un exemple :
// color_definitions.scss
:root {
--primary: #{$primary};
--primary-rgb: #{hexToRGB($primary)};
}
// other stylesheet
.element {
background-color: rgba(var(--primary-rgb), 0.05);
}
- notez que dans l’extrait ci-dessus, la variable SCSS est interpolée lorsqu’elle est transmise à une propriété personnalisée. C’est une exigence en SCSS, voir Sass: Property Declarations pour plus de détails.
- la déclaration CSS
var()peut avoir une valeur de secours si la première n’est pas disponible, comme dans, lorsque vous écrivezvar(--color1, red), CSS utilisera la couleur rouge si la propriété--color1n’est pas trouvée. Dans les plugins, nous utilisons les variables de couleur SCSS comme valeurs de secours pour assurer la compatibilité avec les versions précédentes de Discourse. Ainsi, l’exemple précédent ressemblerait à ceci avec une valeur de secours :
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low, $primary-very-low);
Ce document est contrôlé par version - suggérez des modifications sur github.

