You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue.js中用JS变量拼接Vuetify主题CSS变量名

可行,给你几个实用的实现方法:

方法1:直接在模板中动态绑定style(最简洁)

不用通过SCSS Module中转,直接把JS变量拼进CSS变量引用里:

<template>
  <div :style="{ backgroundColor: `var(--v-theme-${color})` }">Asd</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
const color = ref("primary")
</script>

如果要保留SCSS Module的类,也可以结合使用:

<template>
  <div :class="$style['colored-text']" :style="{ backgroundColor: `var(--v-theme-${color})` }">Asd</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
const color = ref("primary")
</script>

<style lang="scss" module>
.colored-text {
  padding: 1rem;
  border-radius: 4px;
  /* 其他样式写这里 */
}
</style>

方法2:通过自定义CSS变量中转(适配SCSS Module场景)

如果必须在SCSS Module里写样式逻辑,可以先在模板中把Vuetify主题变量赋值给自定义CSS变量,再在SCSS里引用:

<template>
  <div :class="$style['colored-text']" :style="`--dynamic-bg: var(--v-theme-${color})`">Asd</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
const color = ref("primary")
</script>

<style lang="scss" module>
.colored-text {
  background-color: var(--dynamic-bg);
  /* 其他样式 */
}
</style>

方法3:用计算属性生成完整的CSS变量引用(适合复杂场景)

如果需要对color做额外逻辑处理,用计算属性提前生成完整的CSS变量字符串:

<template>
  <div :class="$style['colored-text']" :style="{ backgroundColor: bgColor }">Asd</div>
</template>

<script lang="ts" setup>
import { ref, computed } from 'vue'
const color = ref("primary")
const bgColor = computed(() => `var(--v-theme-${color.value})`)
</script>

<style lang="scss" module>
.colored-text {
  /* 其他样式 */
}
</style>

补充说明:你原代码里的[[v-bind(color)]]语法无效,是因为Vue的<style module>中的v-bind只能绑定具体的变量值,无法直接拼接CSS变量的名称部分,所以需要通过上面这些中转方式实现动态拼接。

内容的提问来源于stack exchange,提问作者FieryRider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:42:50