¿Cómo edito una variable CSS usando JS?
Tengo estas variables CSS para controlar los colores de mi proyecto y poder crear temas.
html {
--main-background-image: url(../images/starsBackground.jpg);
--main-text-color: #4CAF50;
--main-background-color: rgba(0,0,0,.25);
--beta-background-color: rgba(0,0,0,.85);
}
Sin embargo, no importa cómo intente cambiar el atributo (las dos líneas comentadas se intentaron por separado), lo más cerca que estoy es que no devuelve un atributo válido.
function loadTheme() {
var htmlTag = document.getElementsByTagName("html");
var yourSelect = document.getElementById( "themeSelect" );
var selectedTheme = ( yourSelect.options[ yourSelect.selectedIndex ].value );
// htmlTag[0].setAttribute('--main-text-color', '#FFCF40');
// $("html").css("--main-text-color","#FFCF40");
}
Resulta que es posible cambiar las variables CSS utilizando la el.style.cssText
propiedad o el.style.setProperty
los el.setAttribute
métodos. En su código, los fragmentos el.setAttribute
se utilizan incorrectamente, lo que está provocando el error que encontró. Esta es la forma correcta:
document.documentElement.style.cssText = "--main-background-color: red";
o
document.documentElement.style.setProperty("--main-background-color", "green");
o
document.documentElement.setAttribute("style", "--main-background-color: green");
Manifestación
La siguiente demostración define un color de fondo usando una variable CSS y luego lo cambia usando el fragmento JS 2 segundos después de la carga.
window.onload = function() {
setTimeout(function() {
document.documentElement.style.cssText = "--main-background-color: red";
}, 2000);
};
html {
--main-background-image: url(../images/starsBackground.jpg);
--main-text-color: #4CAF50;
--main-background-color: rgba(0,0,0,.25);
--beta-background-color: rgba(0,0,0,.85);
}
body {
background-color: var(--main-background-color);
}
Obviamente, esto solo funcionará en navegadores que admitan variables CSS.
Si estás usando :root
:
:root {
--somevar: black;
}
Será documentElement.
document.documentElement.style.setProperty('--somevar', 'green');