var()介紹與使用
詳情(MDN) IE無(wú)效,其余主流瀏覽器有效
var()使用
只能在{}內(nèi)聲明,作用范圍由{}的選擇器決定
<!-- 聲明 -->
body{
--name:value;//body內(nèi)有效
}
<!-- 使用 -->
.test{
attr: var(--name,defaultValue) //當(dāng)--name不存在時(shí),使用defaultValue
var(--name):#369;//錯(cuò)誤使用方式
}
CSS中原生的變量定義語(yǔ)法是:–*,變量使用語(yǔ)法是:var(–*),其中*表示我們的變量名稱(chēng)。
但是,不能包含$,[,^,(,%等字符,普通字符局限在只要是“數(shù)字[0-9]”“字母[a-zA-Z]”“下劃線(xiàn)_”和“短橫線(xiàn)-”這些組合,但是可以是中文,日文或者韓文。
運(yùn)行時(shí)改變scss變量值
這個(gè)方法并不是能直接改變scsss變量的值,但是能做到一樣的效果,對(duì)于需要一個(gè)變量控制多個(gè)屬性的更為有效簡(jiǎn)潔
單變量控制單條屬性的就沒(méi)必要用了,這方法就是修改style屬性而已,單對(duì)單和你之間在style寫(xiě)那條屬性是一樣的
原理(English)
簡(jiǎn)單來(lái)說(shuō)就是將scss的變量交由css變量控制
$colors: (
primary: #FFBB00,
secondary: #0969A2
);
Selector1{
@each $name, $color in $colors {
--color-#{$name}: $color;
}
}
<!-- Selector1的生成效果 -->
:root {
--color-primary: #FFBB00;
--color-secondary: #0969A2;
}
<!-- 使用方式一 直接使用css變量 -->
Selector{
color:var(--color-primary);
}
<!-- 使用方式二 利用scss的函數(shù),以符合scss語(yǔ)法 推薦 -->
@function color($color-name) {
@return var(--color-#{$color-name});
}
body {
color: color(primary); //使用
}
<!-- body生成效果 -->
body {
color: var(--color-primary); //這樣就可以被js設(shè)置了
}
js設(shè)置css變量,即設(shè)置運(yùn)行scss變量
domObject.style.setProperty(name,value);//name為css變量名 e.g: --color-primary
至此完成了scss的運(yùn)行時(shí)改變變量值,具體運(yùn)用情景我也不太清楚,只是我遇到了。
我的運(yùn)用情景:
自定義組件需要暴露出一些樣式屬性給使用者 自由調(diào)整 ,類(lèi)似主題,而我又不想用字符串拼接的方式去完成,太浪費(fèi)了,每次改完一個(gè)值都得把整個(gè)style給重寫(xiě)一遍,而且這涉及到了頻繁修改dom不符合vue的思想,而且直接用css寫(xiě)太繁瑣了。
所以我采用scss來(lái)寫(xiě)樣式,scss嵌套真好用,less的不支持屬性再嵌套,用得很不爽,沒(méi)scss簡(jiǎn)潔。
由于scss是預(yù)編譯的,無(wú)法在運(yùn)行時(shí)改變變量值,而我又需要去改變,所以去google了,得到一個(gè)滿(mǎn)意的解決方案 -> 原理(English)
特別注意
在單文件組件(.vue)中若是使用了scoped 那么:root、:body等選擇器的效果并不會(huì)如同你所預(yù)期的
[data-v-1374924e]:root {
--test:100px;
}
像這種的,變量–test 根本找不到,理由是并沒(méi)有這個(gè)root,vue組件scoped的特性,只在本組件有效,但組件又沒(méi)有完整的document,即組件內(nèi)部沒(méi)有root
所以在vue文件中,仔細(xì)思考css變量聲明的選擇器范圍,避免變量無(wú)效
到此這篇關(guān)于詳解利用css3的var()實(shí)現(xiàn)運(yùn)行時(shí)改變scss的變量值的文章就介紹到這了,更多相關(guān)css3改變scss的變量值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!