# 5.CSS支持变量
<template>
<div>
<div class="w-text">hello</div>
<button @click="changeColor">改变颜色</button>
</div>
</template>
<script>
import { ref,reactive,toRefs } from "vue";
export default {
setup(){
const data = reactive({
myColor: 'red',
fontSize: '12px'
})
function changeColor(){
data.myColor = data.myColor === 'green'?'red':'green';
data.fontSize = data.fontSize === '12px'?'20px':'12px';
}
return {
...toRefs(data),
changeColor
}
}
}
</script>
<style vars="{ myColor,fontSize }">
.w-text {
color: var(--myColor);
font-size:var(--fontSize)
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
那么问题来了,假如我要是在全局样式里定义了一个--color属性,我在带有scoped属性的组件里想用这个全局的CSS变量,可是一旦在scoped中使用CSS变量就会被编译成:--hash-color,可是全局定义的不是--hash-color而是--color,这样就会出现找不到全局属性的局面,这个问题要怎么解决呢?其实也很简单,只需要在--的后面加上一个global:就可以了:
<template>
<div>
<div class="w-text">hello</div>
</div>
</template>
<style vars="{ currcolor }" scoped>
.w-text {
color: var(--global:currcolor);
font-size:20px;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
全局css
body {
--currcolor:orange;
}
1
2
3
2
3