In precedenza, tutti i colori in Discourse erano memorizzati come variabili SCSS. Per supportare il cambio automatico dello schema di colori in modalità scura, abbiamo convertito questi colori nel core in proprietà CSS personalizzate. È possibile visualizzare facilmente l’elenco completo nell’ispettore ora:
Temi e plugin devono sostituire tutte le variabili SCSS $color utilizzate nei fogli di stile con gli equivalenti in proprietà CSS --color. Nella maggior parte dei casi, si tratta di una semplice operazione di trova e sostituisci:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low);
Ma ci sono alcuni casi in cui un tema o un plugin utilizza una variazione più complessa di un colore, ad esempio quando scurisce o schiarisce utilizzando le funzioni colore SCSS. Questi casi richiedono un refactoring più complesso, e per questo abbiamo aggiunto la capacità di estendere le definizioni di colore nei temi e nei plugin.
Nei plugin
Questo commit nel plugin discourse-encrypt è un buon e semplice esempio di tale refactoring. Sposta una dichiarazione SCSS mix($color1, $color2) in un file separato e la memorizza come proprietà personalizzata CSS. Quindi il nuovo file viene registrato come asset :color_definitions, il che assicura che la proprietà colore appena dichiarata sia inclusa nel foglio di stile delle definizioni di colore.
Nei temi
Nei temi, è possibile fare la stessa cosa dichiarando proprietà CSS personalizzate nel foglio di stile common/color_definitions.scss. È possibile consultare questo commit nel tema graceful per un esempio.
Alcune note aggiuntive
- quando si utilizzano colori trasparenti tramite la funzione
rgba($color, 0.5), SCSS accetta colori HEX e RGB nel primo parametro, mentre le proprietà CSS personalizzate accettano solo un colore RGB. Ecco perché abbiamo introdotto l’helperhexToRGB()e alcune proprietà con il suffisso--rgbnelle definizioni di colore. Un esempio:
// color_definitions.scss
:root {
--primary: #{$primary};
--primary-rgb: #{hexToRGB($primary)};
}
// other stylesheet
.element {
background-color: rgba(var(--primary-rgb), 0.05);
}
- si noti che nello snippet sopra, la variabile SCSS è interpolata quando viene passata a una proprietà personalizzata. Questo è un requisito in SCSS, vedere Sass: Property Declarations per maggiori dettagli.
- la dichiarazione CSS
var()può avere un fallback a un secondo valore se il primo non è disponibile, ad esempio, scrivendovar(--color1, red), CSS utilizzerà il colore rosso come fallback se la proprietà--color1non viene trovata. Nei plugin, utilizziamo le variabili colore SCSS come fallback per garantire la compatibilità con le versioni precedenti di Discourse. Quindi l’esempio precedente, apparirebbe così con un fallback:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low, $primary-very-low);
Questo documento è controllato tramite versione - suggerisci modifiche su github.

