Como alterar CSS: variáveis de cor da raiz em JavaScript
Muito bem, estou a criar um sistema para a minha página web que permite aos utilizadores alterar o tema. Como eu quero realizar isso é por ter todas as cores como variáveis, e as cores são definidas na :parte raiz do CSS.
o que eu quero fazer é mudar essas cores através de JavaScript. Eu pesquisei como fazê-lo, mas nada que eu tentei realmente funcionou corretamente. Aqui está o meu código actual:
CSS:
:root {
--main-color: #317EEB;
--hover-color: #2764BA;
--body-color: #E0E0E0;
--box-color: white;
}
JS:
(código para definir o tema, é executado no clique de um button) - eu não me dei ao trabalho de adicionar a: mudança de raiz para os outros 2 Temas, uma vez que não funciona no tema escuro
function setTheme(theme) {
if (theme == 'Dark') {
localStorage.setItem('panelTheme', theme);
$('#current-theme').text(theme);
$(':root').css('--main-color', '#000000');
}
if (theme == 'Blue') {
localStorage.setItem('panelTheme', 'Blue');
$('#current-theme').text('Blue');
alert("Blue");
}
if (theme == 'Green') {
localStorage.setItem('panelTheme', 'Green');
$('#current-theme').text('Green');
alert("Green");
}
}
(código que é executado quando o html é carregado)
function loadTheme() {
//Add this to body onload, gets the current theme. If panelTheme is empty, defaults to blue.
if (localStorage.getItem('panelTheme') == '') {
setTheme('Blue');
} else {
setTheme(localStorage.getItem('panelTheme'));
$('#current-theme').text(localStorage.getItem('panelTheme'));
}
}
Mostra o alerta, mas não muda nada. Alguém me pode indicar a direcção certa?
11
2 answers
Obrigado @pvg por fornecer o link. Tive de olhar para ele para perceber o que se estava a passar, mas finalmente descobri.
A linha mágica que procurava era esta:document.documentElement.style.setProperty('--your-variable', '#YOURCOLOR');
Isso fez exactamente o que eu queria que fizesse, muito obrigado!
22
Author: Daedalus, 2016-06-14 02:54:50
A velha magia jquery ainda funciona.
$('#yourStyleTagId').html(':root {' +
'--your-var: #COLOR;' +
'}');
0
Author: v2p, 2018-06-04 21:28:21