2016-06-23 15 views
10

jQuery'yi kullanarak CSS'de kullanılan bir değişkeni değiştirmek mümkün mü? Basit bir örnek:jQuery kullanarak CSS değişkenini değiştirin

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>

nasıl mesela kırmızıya çamurcun gelen değişken rengini değiştirebilir? Bu işe yaramıyor.

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

İşte css yönteminin benim maymun yamasıdır, böylece css değişkenlerini '.css' yöntemiyle kullanabilirsin https://gist.github.com/jcubic/9ef9fa2561de8430e953e2fe62011c20 – jcubic

cevap

11

kullanarak css değişkeni değişebilir düz JavaScript elem.style.setProperty("variableName", "variableProp");

$("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

jquery'de şunları yapabilirsiniz: $ ("html"). Attr ("style", "- defaultColor: hotpink"); – DinoMyte

+0

İyi iş çıkardın, dürüst bir şekilde, bunun normal ifadeler kullanmadan mümkün olduğunu ya da olabileceğini düşünmemiştim! Yanlış olduğu kanıtlanmış olmaktan mutluluk duyuyorum. :) –

+0

Çalışma çözümleri için @MattDiMu ve @ DinoMyte'a teşekkürler. –

2

En basit çözüm IMHO: sırayla varsayılan rengini değiştirir ki bir sınıf değiştirme:

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

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

Ben de öyle düşünüyordum. –

+0

Bu, işleyen bir çözüm sunarken ve sorunun ikinci bölümünü yanıtlarken, sorulan ilk soruyu yanıtlamaktan ziyade. –

+0

@DavidThomas, ancak, ayrıca, _that depends_ - verilen temel sorunu (sadece bunu yapmaktan) çözebilir. Ve bu şekilde böyle bir şey elde etmenin mümkün olduğu çoğu yerde, birçoğu da endişelerin ayrılmasına ilişkin olarak tercih edilen yol olarak düşünmektedir. – CBroe

İlgili konular