CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量

:root------ 原生CSS 自定义属性(变量)

在 SCSS 文件中定义 CSS 自定义属性。然后通过 JavaScript 读取这些属性。

css 复制代码
// variables.scss  
:root {  
   --login-bg-color: #293146;

  --left-menu-max-width: 200px;

  --left-menu-min-width: 64px;

  --left-menu-bg-color: #001529;

  --left-menu-bg-light-color: #0f2438;

  --left-menu-bg-active-color: var(--el-color-primary);
}

使用示例

在 CSS 中,您可以通过 var() 函数来使用这些变量:

css 复制代码
.login {
  background-color: var(--login-bg-color);
}

.left-menu {
  max-width: var(--left-menu-max-width);
  min-width: var(--left-menu-min-width);
  background-color: var(--left-menu-bg-color);
}

.left-menu-item.active {
  background-color: var(--left-menu-bg-active-color);
}

在 SCSS 中使用变量

生成具体的类名,然后在 JavaScript 中通过类名来引用样式。

css 复制代码
$namespace: 'myNamespace';  
$elNamespace: 'elementNamespace';  
 
.#{$namespace}__header {  
  color: blue;  
}  
 
.#{$elNamespace}__button {  
  background-color: green;  
}

在JavaScript中使用SCSS变量

global.module.scss

css 复制代码
// 命名空间
$namespace: v;
// el命名空间
$elNamespace: el;


// 导出变量
:export {
  namespace: $namespace;
  elNamespace: $elNamespace;
}

:export: 这是一个特殊指令,用于将SASS变量导出到JavaScript中。通过这种方式,你可以在JavaScript代码中访问这些变量。

namespace: 这是导出的变量名,其值为 $namespace 的值,即 v。

elNamespace: 这是另一个导出的变量名,其值为 $elNamespace 的值,即 el。

项目中的使用

useDesign.ts

javascript 复制代码
import variables from '@/styles/global.module.scss'

export const useDesign = () => {
  const scssVariables = variables

  /**
   * @param scope 类名
   * @returns 返回空间名-类名
   */
  const getPrefixCls = (scope: string) => {
    return `${scssVariables.namespace}-${scope}`
  }

  return {
    variables: scssVariables,
    getPrefixCls
  }
}

使用useDesign.ts
Backtop.vue

javascript 复制代码
<script lang="ts" setup>
import { ElBacktop } from 'element-plus'
import { useDesign } from '@/hooks/web/useDesign'

defineOptions({ name: 'BackTop' })

const { getPrefixCls, variables } = useDesign()

const prefixCls = getPrefixCls('backtop')
</script>

<template>
  <ElBacktop
    :class="`${prefixCls}-backtop`"
    :target="`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`"
  />
</template>
相关推荐
kyriewen1 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
林焱_RPAAI2 小时前
影刀RPA操作数据库进阶:事务处理与批量写入优化
css
许彰午3 小时前
政务督办的分合模式:主办协办的并发审批
前端·javascript·政务
易筋紫容3 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
牧艺4 小时前
cos-design PhotoAlbum:用 CSS 3D 做一个「能翻页」的实体相册
前端·css·交互设计
0_Error_5 小时前
猫国建设者 修改资源 自动采集
javascript
贩卖黄昏的熊5 小时前
NestJS简明教程——安全
开发语言·javascript·安全·typescript·nest.js
贩卖黄昏的熊6 小时前
NestJS简明教程——异常处理和日志
javascript·node.js·nest.js
海带紫菜菠萝汤9 小时前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
名字还没想好☜9 小时前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js