Vue3 JS 与 SCSS变量相互使用

ElementUI与ElementPlus共存指南:qiankun微前端项目中的CSS隔离最佳实践 本文深入探讨了在qiankun微前端架构中,如何解决Vue2 ElementUI与Vue3 ElementPlus的样式冲突问题。通过实施CSS命名空间隔离策略,将ElementPlus的默认命名空间从‘el’修改为‘ep’,并结合构建配置与高级隔离技巧,确保两套UI框架在同一个应用中和谐共存,为大型项目的渐进式迁移提供了最佳实践。 阅读详情
AI摘要

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

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

  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 文件来尝试使用 css 变量。

:root {
  --bgColor: pink;
}

body {
  background-color: var(--bgColor);
}

:root 中定义了全局 CSS 变量,CSS变量的命名约定以两个 - 开头,上面定义了一个全局 CSS 变量,变量名为 –bgColor。

使用变量时使用 CSS 的 var() 函数。

在 main.ts 中引入该文件:

import '@/scss/test.css'

此时在浏览器中可以看到背景色变成粉红色。

2.2 组件内 CSS 变量

在组件中也可以使用 CSS 变量。在对应的选择器中定义变量即可。

<template>
  <div class="demo">
    <div class="css-div">CSS 变量</div>
  </div>
</template>

<script lang="ts" setup>
</script>

<style scoped lang="scss">
.demo {
  --font-size: 30px;

  .css-div {
    --textColor: blue;

    font-size: var(--font-size);
    color: var(--textColor);
  }
}
</style>

有了 CSS 变量的基础,接下来就可以讨论 scss 中如何使用 JS 变量了。

3 SCSS 使用 JS 变量

咱们用一个 demo 来说明 scss 中如何使用 js 变量:有三个按钮和一个 div,点击三个按钮会切换 div 的背景色和文字颜色。

3.1 基础代码

首先实现页面的基础代码:

<template>
  <div class="demo">
    <button v-for="(item, index) in btns"
            :key="index"
            @click="onBtnClick(item.bgColor, item.textColor)"
    >{{ item.title }}</button>

    <div>
      <div class="example">Hello World</div>
    </div>
  </div>
</template>

<script lang="ts" setup>
const btns = [
  { title: '红色主题', bgColor: '#FF9191', textColor: '#FF0000' },
  { title: '蓝色主题', bgColor: '#B3C4FF', textColor: '#042BA9' },
  { title: '默认主题', bgColor: '#333333', textColor: '#FFFFFF' }
]
const onBtnClick = (bgColor: string, textColor: string) => {
  console.log(bgColor, textColor)
}
</script>

<style scoped lang="scss">
.demo {
  padding: 10px;

  .example {
    --textColor: #FFFFFF;
    --bgColor: #333333;

    display: inline-block;
    margin-top: 20px;
    font-size: 20px;
    padding: 20px 50px;
    color: var(--textColor);
    background: var(--bgColor);
  }
}
</style>

页面如下:

image-20221016172352073

上面代码比较简单,btns 变量定义了三个按钮,通过 v-for 显示三个按钮。点击按钮的时候传递 bgColor 和 textColor 两个参数给点击事件 onBtnClick 函数。显示 Hello World 的 div,通过 –textColor 和 –bgColor 两个变量来控制背景色和文字颜色。

接下来便是实现点击不同按钮时,使用不同的文字颜色和背景色。

Vue3 中提供了两种方式来实现动态改变 css 变量。下面两种方式都基于上面的基础代码实现:

3.2 方式1:setProperty

Vue 提供了 setProperty 的方式来改变 CSS 变量。

  1. 为目标 div 添加 ref 属性:
<template>
		...
    <div>
      <div class="example" ref="exampleRef">Hello World</div>
    </div>
  </div>
</template>
  1. 获取到该 div 的引用(ref):
import { ref } from 'vue'

const exampleRef = ref<HTMLDivElement | null>()
...
  1. 调用该引用 style 属性的 setProperty 方法:
<script lang="ts" setup>
...
const onBtnClick = (bgColor: string, textColor: string) => {
  if (exampleRef.value) {
    exampleRef.value?.style.setProperty('--textColor', textColor)
    exampleRef.value?.style.setProperty('--bgColor', bgColor)
  }
}
</script>
...

3.3 方式2:v-bind

Vue3 中为 vue 文件的 style 提供了 v-bind 函数,实现了将 JS/TS 变量绑定到 CSS 变量上。

  1. 在 TS 中定义两个变量存储点击事件时传递的两个参数:
const currentBgColor = ref('#333333')
const currentTextColor = ref('#FFFFFF')
  1. 点击事件中点参数赋值给上面两个变量:
const onBtnClick = (bgColor: string, textColor: string) => {
  currentBgColor.value = bgColor
  currentTextColor.value = textColor
}
  1. 在 style 中使用 v-bind 绑定上面两个 JS 变量:
.demo {
	...

  .example {
    --textColor: v-bind(currentTextColor);
    --bgColor: v-bind(currentBgColor);

    ...
    color: var(--textColor);
    background: var(--bgColor);
  }
}

上面两种方式根据自己的喜好使用。大家可以根据上面的思路尝试实现主题切换、动态换肤等功能,在后面的实战系列文章中咱在继续讨论这个话题。

感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,作者会持续与大家分享更多干货

Vue 3中引入SCSS和LESS依赖的教程指南 在Vue 3项目中引入SCSS和LESS是一种提高样式管理和可维护性的有效方式。通过安装依赖、配置构建工具和使用样式文件,我们可以轻松地集成SCSS和LESS,并享受它们提供的变量、嵌套和导入功能。参考推荐的教程、文档和GitHub项目,可以更深入地学习和掌握SCSS和LESS在Vue 3中的应用。避免常见的错误配置和路径问题,确保顺利使用SCSS和LESS来优化您的Vue 3项目的样式。希望本文对您理解和使用Vue 3中引入SCSS和LESS的过程有所帮助! 阅读详情

相关推荐

如何用Stata完成(shui)一篇经济学论文(三):基本命令

目录变量的生成变量的删除变量的更改 变量的生成 要生成一个新变量,我们就用gen(或者g),很明显就是generate的意思,gen(或g)后跟要生成新变量的名字(注意名字不能以数字开头),然后跟新变量生成的等价条件(可以加判断条件之类的,我们后面再讲),如果后面没有跟其他等价条件,则生成一个变量,变量里没有值。生成一个常量值,像我们之前举过的例子: gen x1 = 0 生成一个变量x1,x1的值为0。 生成一个变量,值等于另外一个变量的值,如: gen x2 = hour 这里我们生成了一个变量x2

Hedy_mail的博客 1万+

vue3-scss使用

一、安装环境python 3.9下载地址:https://www.python.org/downloads/release/python-3913/ 二、npm安装 三、新建scss文件scss/product.scss 四、使用/products/index.vue 效果:

码农的专栏 7913

【SCSS】vue3+vite项目引入SCSS及使用SCSS全局变量

🦖我是Sam9029,一个前端。

m0_61486963的博客 2万+

vue3中 css的变量

vue3中css的变量

weixin_43845059的博客 5441

Vue3 + Scss 实现主题切换效果

在现代的Web应用程序中,主题切换是一种常见的需求。本文将介绍如何使用Vue 3和Scss实现主题切换效果。

记录开发日常 1849

Vue3 使用scss

SCSS 语法使用.scss文件扩展名。除了极少部分的例外, 它是 CSS 的超集,也就是说 所有有效的 CSS 也同样都是有效的 SCSS。由于其与 CSS 的相似性,它是最容易上手的语法, 也是最流行的语法。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 936

如何在vue项目中引入scss,并使用scss样式

如何在vue项目中引入并配置scss

weixin_61145649的博客 1万+

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

vue 在scss中使用js变量值

vue 在scss中使用js变量值 js修改scss的变量值

卿本无忧的博客 2万+

别再手动调时间了!用Windows自带的tzutil命令,1分钟搞定时区错误

本文介绍了如何使用Windows自带的tzutil命令快速解决时区错误问题。通过简单的命令行操作,用户可以一键切换时区、查看全球时区代码库,并实现自动化时区同步。相比传统GUI设置,tzutil更可靠且高效,特别适合企业环境批量部署。

weixin_42531494的博客 315

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 428

如何让scss变量能够当做js变量来使用

如何让scss变量能够当做js变量来使用 当前我们使用scss变量有两个痛点: 需要手动导入 无法与js建立联系或者很难,后续不能在此基础上做一些骚操作 为了解决这两个问题,我们以创建js文件以json格式定义scss变量,然后通过配置webpack的解析规则来达到即能像普通scss一样使用,又能作为js变量使用的目的。 scss变量使用规范 变量创建 所有scss变量在style/varia...

qq_15390381的博客 5658

Pico-实时预览工具PreviewTool

Unity XR SDK与Preview Tool下载链接:SDK - Pico Developer Platform1、下载Preview Tool后,将PreviewTool的APK先安装在VR头显里2、在PC端打开Preview Tool.exe文件Window -> Package Manager -> Add package from disk,选择下载的pico sdk中的package.json(如下图),Open导入。Edit -> Project Settings,设置设备和安卓版本,如下

晴天下的大头娃娃 4252

vue项目中使用scss

vue项目中安装、引入、使用scss

weixin_45665171的博客 2万+

SAP Gateway 故障排查全景图:从 Error Log 到 E2E 追踪,一套面向实战的工具与方法论

本文针对SAP Gateway Foundation(SAP_GWFND)的故障排查需求,梳理了从现象到根因的系统化排查路径。文章首先强调建立标准化排障流程的重要性,随后提供工具矩阵及使用顺序指引:对于请求中断优先查看Error Log(/IWFND/ERROR_LOG和/IWBEP/ERROR_LOG),性能问题使用Performance Trace(/IWFND/TRACES),通知异常则检查Notification Monitor。重点工具包括: Error Log作为中断类错误首要定位器; Appl

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 248

【YOLOv11多模态涨点改进】独家创新首发| TGRS 2026 |引入 CIFusion 通道交互融合模块,通过跨特征交互机制强化目标区域响应,适合多模态融合目标检测,小目标检测高效涨点

🔥本文提出了一种改进YOLOv11多模态目标检测模型的方法,通过引入CIFusion通道交互融合模块来提升RGB与红外特征融合效果。CIF模块采用通道级自适应交互机制,根据全局上下文动态分配不同模态通道的重要性,实现跨模态特征交互与互补信息融合。相比传统拼接或加权融合方式,CIF能够增强目标区域响应,抑制背景噪声,提高小目标和低对比度目标的检测性能。实验表明,该方法在DroneVehicle等数据集上显著提升了检测精度。论文还详细介绍了CIF模块的结构原理、实现代码及模型配置方法。

Ai缝合怪、助力小伙伴高效发论文 187

Vue3 组件中使用 SCSS 变量

export {

weixin_64684095的博客 2013

基于STM32、HAL库的 CH9102X USB转UART收发器 驱动程序设计

/ 或 UART_HWCONTROL_RTS_CTS。// 其他函数实现类似,使用HAL_UART_Transmit_IT, HAL_UART_Receive_IT等。UART_TXD <---> USARTx_RX (STM32接收)UART_RXD <---> USARTx_TX (STM32发送)* @param huart: UART句柄指针。* @param huart: UART句柄指针。* @param huart: UART句柄指针。* @param huart: UART句柄指针。

corlin6688的博客 506

vue3 在js中使用scss变量

本文简介 点赞 + 关注 + 收藏 = 学会了 不管工作还是学习,我都很喜欢用 scss 和 less ,真的比纯 css 方便太多了。 本文讲解如何在 js 里导入 scss 的变量。 在动态换肤的网站里这种做法很常见。 我使用 vite 搭建一个 vue3 项目来举例。 动手 好记性不如烂键盘,不动鼠标学不会游泳。 搭建项目 使用 vite 创建一个 vue3 项目。 npm init vite@latest # 或 yarn create vite # 或 pnpm create

weixin_39415598的博客 1632

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2793

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Vue3+Vite中使用SCSS

Vue3引入SCSS的执行命令 npm i sass sass-loader --save-dev 配置全局变量,

qq_54140719的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vue3 在 js 中使用 scss 变量

不管工作还是学习,我都很喜欢用 scss 和 less ,真的比纯 css 方便太多了。

dongdongqiang521的博客 1200

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Vue2/Vue3中在css中使用js的变量(scss也适用)

很多情况我们需要主题搭配,亦或是统一便捷的管理,css 变量是必不可少的。在 Vue 中将 data 中的变量反映到 css 变量上也是大势所趋。

u014645827的博客 9388

vite vue3 如何在 js 中使用 scss 变量??????????

theme: smartblue 本文简介 点赞 + 关注 + 收藏 = 学会了 不管工作还是学习,我都很喜欢用 scss 和 less ,真的比纯 css 方便太多了。 本文讲解如何在 js 里导入 scss 的变量。 在动态换肤的网站里这种做法很常见。 我使用 vite 搭建一个 vue3 项目来举例。 动手 好记性不如烂键盘,不动鼠标学不会游泳。 搭建项目 使用 vi...

weixin_39415598的博客 2004

js控制scss的变量_如何让scss变量能够当做js变量来使用

如何让scss变量能够当做js变量来使用当前我们使用scss变量有两个痛点:需要手动导入无法与js建立联系或者很难,后续不能在此基础上做一些骚操作为了解决这两个问题,我们以创建js文件以json格式定义scss变量,然后通过配置webpack的解析规则来达到即能像普通scss一样使用,又能作为js变量使用的目的。scss变量使用规范变量创建所有scss变量在style/variables.scss...

weixin_33728774的博客 2245

scss引入其他scss变量,且通过js动态修改scss变量(亲测,已修改)

先展示结果 统一用的html <template> <div class="home"> <h1>Gordon-Liu</h1> <h2 ref="h2">Gordon-Liu</h2> <h3>Gordon-Liu</h3> </div> </template> 1、scss引入其他scss变量 test.scss文件 //定义scss变量

weixin_46547740的博客 1万+
上一篇: vite vue3 规范化与Git Hooks - 基于 vite 创建 vue3 全家桶项目(续篇)
下一篇: Vue3 SFC 和 TSX 方式调用子组件中的函数
程序员优雅哥
博客等级 码龄4年 52粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

程序员优雅哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值