Vue3 JS 与 SCSS变量相互使用

本文介绍了在Vue3项目中如何让JS使用SCSS变量以及SCSS使用JS变量的方法。通过创建SCSS变量文件,导出变量,并在Vue组件中导入和使用。同时探讨了CSS变量的概念,包括全局和组件内的CSS变量。最后,展示了两种在SCSS中动态使用JS变量的方式:setProperty和v-bind。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发中会遇到如下需求:

  1. JS 中使用 SCSS 变量。如在 scss 中定义了一个颜色,el-menu 组件使用该颜色作为背景色,此时需要获取 scss 变量,通过 background-color 属性将该变量值传递给 el-menu 组件(当然你也可以在 JS 中重新定义一个变量存储该颜色)。
  2. SCSS 中使用 JS 变量。如动态换肤功能,用户选中某个颜色作为主题色,整个系统的主题色都切换为这个主题色。用户选择的这个颜色使用 JS 变量存储,SCSS 中需要使用该 JS 变量存储的颜色。类似的场景还有暗黑模式等。

本文提供解决上述问题的思路。

1 JS 使用 SCSS 变量

1.1 创建 SCSS 变量文件

src 目录下创建 scss 目录,该目录存储 scss 文件。这里需要注意,如果 JS 要使用 SCSS 文件中定义的变量,在 vue3 中,存储变量的 SCSS 文件名格式为 xxx.module.scss

variables.module.scss。与 vue 2.x 不同,这里的 .module 不能省略,在 vue 2.x 不要求文件名使用 xxx.module.scss 的方式。

src/scss/ 目录下创建

config.module.scss 文件,该文件用于定义 scss 变量:

$titleColor: #FF0000;

1.2 导出 SCSS 变量

上面创建的 config.module.scss 文件中定义了一个变量:$titleColor

如果咱们只是在其他 scss 文件或 vue 文件的 style 标签中使用,只需要在对应文件使用 @import 引入 config.module.scss 即可。但如果需要在 script 中的 JS/TS 中使用,还需要通过 export 将需要使用的变量导出:

$titleColor: #FF0000;

:export {
  titleColor: $titleColor;
}

这样便将 $titleColor 的值通过变量名 titleColor 导出给 JS/TS。

1.3 使用 SCSS 变量

在 vue 文件的 script 中如果要使用上面的变量,先导入该 scss 文件:

import config from '@/scss/config.module.scss'

config 的值就是 scss 文件 :export 的对象。输出 config 对象:

console.log(config)

控制台输出:

{
   titleColor: '#FF0000'}

此时便可通过 config.titleColor 获取 scss 文件中 $titleColor 的值。

vue 代码如下:

<template>
  <div>
    <h1 :style="{color: color}">JS 获取 SCSS 变量值</h1>
  </div>
</template>

<script lang="ts" setup>
import {
      ref } from 'vue'
import config from '@/scss/config.module.scss'

const color = ref(config.titleColor)
</script>

2 CSS 变量

在讨论 SCSS 代码使用 JS 变量前,咱需要先聊聊 CSS Next 中的 CSS 变量。CSS 2、CSS 3 大部分哥们都耳熟能详,CSS Next 也不是什么新鲜事物了。其中 CSS Next 很厉害的一个能力就是 CSS 变量。

2.1 全局 CSS 变量

咱可以在上面的 src/scss 目录下创建 test.css</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员优雅哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值