Anteriormente, todos los colores en Discourse se almacenaban como variables SCSS. Para admitir el cambio automático de esquema de color del modo oscuro, hemos convertido estos colores en el núcleo a propiedades CSS personalizadas. Ahora puede ver fácilmente la lista completa en el inspector:
Los temas y complementos deben cambiar todas las variables SCSS $color utilizadas en las hojas de estilo por los equivalentes de propiedad CSS --color. En la mayoría de los casos, esta es una simple tarea de buscar y reemplazar:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low);
Pero hay algunos casos en los que un tema o un complemento está utilizando una variación más compleja de un color, por ejemplo, al oscurecer o aclarar usando funciones de color SCSS. Estos casos requieren una refactorización más compleja, y para esto hemos agregado la capacidad de extender las definiciones de color en temas y complementos.
En complementos
Este commit en el complemento discourse-encrypt es un buen y simple ejemplo de dicha refactorización. Mueve una declaración SCSS mix($color1, $color2) a un archivo separado y la almacena como una propiedad personalizada de CSS. Luego, el nuevo archivo se registra como un activo :color_definitions, lo que garantiza que la propiedad de color recién declarada se incluya en la hoja de estilo de definiciones de color.
En temas
En los temas, puede hacer lo mismo declarando propiedades personalizadas de CSS en la hoja de estilo common/color_definitions.scss. Puede consultar este commit en el tema graceful para ver un ejemplo.
Algunas notas adicionales
- cuando se utilizan colores transparentes a través de la función
rgba($color, 0.5), SCSS acepta colores HEX y RGB en el primer parámetro, mientras que las propiedades personalizadas de CSS solo aceptan un color RGB. Es por eso que hemos introducido el ayudantehexToRGB()y algunas propiedades con el sufijo--rgben las definiciones de color. Un ejemplo:
// color_definitions.scss
:root {
--primary: #{$primary};
--primary-rgb: #{hexToRGB($primary)};
}
// other stylesheet
.element {
background-color: rgba(var(--primary-rgb), 0.05);
}
- tenga en cuenta que en el fragmento anterior, la variable SCSS se interpola cuando se pasa a una propiedad personalizada. Este es un requisito en SCSS, consulte Sass: Property Declarations para obtener más detalles.
- la declaración CSS
var()puede tener un valor de reserva si el primero no está disponible, como al escribirvar(--color1, red), CSS recurrirá al color rojo si no se encuentra la propiedad--color1. En los complementos, utilizamos las variables de color SCSS como valores de reserva para garantizar la compatibilidad con versiones anteriores de Discourse. Por lo que el ejemplo anterior, se vería así con un valor de reserva:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low, $primary-very-low);
Este documento tiene control de versiones: sugiera cambios en github.

