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?

Author: Daedalus, 2016-06-14

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