2016-06-23 68 views
10

E 'possibile cambiare una variabile usata in CSS usando jQuery? Semplice esempio:Cambia la variabile CSS usando jQuery

html { 
 
    --defaultColor: teal; 
 
} 
 
.box { 
 
    background: var(--defaultColor); 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 5px; 
 
    float: left; 
 
} 
 
.circle { 
 
    background: #eee; 
 
    border: 2px solid var(--defaultColor); 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 5px; 
 
    float: left; 
 
    border-radius: 100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="clickToChange" type="button" style="width: 100%;">Click to Change</button> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<br/> 
 
<div class="circle"></div> 
 
<div class="circle"></div> 
 
<div class="circle"></div>

Come posso cambiare il colore variabile dal verde acqua al rosso, per esempio? Questo non funziona.

$("#clickToChange").click(function(){ 
    $(html).css("--defaultColor", "red"); 
}); 
+0

Ecco la mia patch di scimmia del metodo css in modo da poter utilizzare le variabili css con il metodo '.css' https://gist.github.com/jcubic/9ef9fa2561de8430e953e2fe62011c20 – jcubic

risposta

11

È possibile modificare la variabile css utilizzando pianura JavaScript

$("html").on('click', function() { 
 
    
 
    $("body").get(0).style.setProperty("--color", "hotpink"); 
 
    
 
});
body { 
 
    --color: blue; 
 
    background-color: var(--color); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
click me!

+2

In jQuery, puoi fare: $ ("html"). Attr ("stile", "- defaultColor: hotpink"); – DinoMyte

+0

Ben fatto, onestamente non pensavo che fosse, o sarebbe, possibile senza un uso regolare delle espressioni! Sono contento di essermi dimostrato sbagliato. :) –

+0

Grazie a @MattDiMu e @ DinoMyte per le soluzioni di lavoro. –

2

più semplice soluzione IMHO: Modificare una classe, che a sua volta cambia il colore predefinito: elem.style.setProperty("variableName", "variableProp");

html { 
    --defaultColor: teal; 
} 
html.someOtherDefaultColor { 
    --defaultColor: rebeccapurple; 
} 

$("#clickToChange").click(function(){ 
    $(html).toggleClass("someOtherDefaultColor"); 
}); 
+0

Che cosa stavo pensando anche io. –

+0

Mentre questo fornisce una soluzione funzionante e risponde alla seconda parte della domanda, evita piuttosto di rispondere alla prima domanda che è stata posta. –

+0

@DavidThomas, concesso, ma anche, _that depends_ - potrebbe anche risolvere il problema sottostante (semplicemente facendo questo) richiesto. E nella maggior parte dei casi in cui è possibile ottenere qualcosa di simile in questo modo, molti considerano anche il modo preferibile, per quanto riguarda la separazione delle preoccupazioni. – CBroe