动态生成element-plus的scss变量;SCSS中实现动态颜色变体生成

news2025/7/27 13:09:04

文章目录

  • 一、动态css变量
    • 1.生成内容
    • 2.动态生成css变量
      • 2.1新增_color-utils.scss(不推荐)
      • 2.2新增_color-utils.scss(推荐)
      • 2.3theme.scss引入使用


在这里插入图片描述

一、动态css变量

1.生成内容

在我们修改element-plus主题色时候,会自己定义primary、success、warning、danger、error、info状态色;但是对应的细节亮度css变量手动书写太麻烦,且规则不一定是对的。
在这里插入图片描述

2.动态生成css变量

在SCSS中实现动态颜色变体生成,可以通过混合宏(mixin)和函数(function)来实现。以下是完整的SCSS解决方案:

2.1新增_color-utils.scss(不推荐)

// 颜色计算函数
@function tint($color, $percentage) {
  @return mix(white, $color, $percentage);
}

@function shade($color, $percentage) {
  @return mix(black, $color, $percentage);
}

// 生成变体的混合宏
@mixin generate-color-variants($name, $base-color) {
  --el-color-#{$name}: #{$base-color};
  --el-color-#{$name}-light-3: #{shade($base-color, 30%)};
  --el-color-#{$name}-light-5: #{shade($base-color, 50%)};
  --el-color-#{$name}-light-7: #{shade($base-color, 70%)};
  --el-color-#{$name}-light-8: #{shade($base-color, 80%)};
  --el-color-#{$name}-light-9: #{shade($base-color, 90%)};
  --el-color-#{$name}-dark-2: #{tint($base-color, 20%)};
}

// 暗黑模式适配混合宏
@mixin generate-dark-variants($name, $base-color) {
  --el-color-#{$name}: #{tint($base-color, 20%)};
  --el-color-#{$name}-dark-2: #{$base-color};
}

2.2新增_color-utils.scss(推荐)

具有按钮的hover效果,且按钮的disabled颜色也有

@use "sass:color";

// 增强版颜色混合函数
@function adjust-hover($base, $percentage: 10%) {
  @if type-of($base) == "string" and str-index($base, "var(") {
    @return unquote("color-mix(in srgb, #{$base} 90%, white 10%)");
  }
  @return color.mix(white, $base, $percentage);
}

@function adjust-active($base, $percentage: 20%) {
  @if type-of($base) == "string" and str-index($base, "var(") {
    @return unquote("color-mix(in srgb, #{$base} 80%, black 20%)");
  }
  @return color.mix(black, $base, $percentage);
}

@mixin generate-color-variants($name, $base-color) {
  --el-color-#{$name}: #{$base-color};
  --el-color-#{$name}-light-3: #{adjust-hover($base-color, 30%)};
  --el-color-#{$name}-light-5: #{adjust-hover($base-color, 50%)};
  --el-color-#{$name}-light-7: #{adjust-hover($base-color, 70%)};
  --el-color-#{$name}-light-8: #{adjust-active($base-color, 80%)};
  --el-color-#{$name}-light-9: #{adjust-active($base-color, 90%)};
  --el-color-#{$name}-dark-2: #{adjust-active($base-color, 20%)};

  // 专门为按钮添加的hover变量
  --el-button-#{$name}-hover-bg-color: #{adjust-hover($base-color)};
  --el-button-#{$name}-active-bg-color: #{adjust-active($base-color)};
}

2.3theme.scss引入使用

@use './color-utils' as color;

:root {
  @include color.generate-color-variants('primary', #007d7b);
  @include color.generate-color-variants('success', #8bc34a);
  @include color.generate-color-variants('warning', #ffc107);
  @include color.generate-color-variants('danger', #f56c6c);
  @include color.generate-color-variants('error', #ff5722);
  @include color.generate-color-variants('info', #909399);
}

html.dark {
  @include color.generate-color-variants('primary', #0084cb);
  @include color.generate-color-variants('success', #60c888);
  @include color.generate-color-variants('warning', #d7bf0a);
  @include color.generate-color-variants('danger', #b75959);
  @include color.generate-color-variants('error', #cd7b00);
  @include color.generate-color-variants('info', #909399);
}

该方案通过SCSS原生颜色函数实现动态计算,使用时只需修改theme.scss中的基础色值即可自动生成全套主题变量。建议配合PostCSS或Vite等构建工具使用以获得最佳兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 内核内存管理子系统全面解析与体系构建

一、前言: 为什么内存管理是核心知识 内存管理是 Linux 内核最核心也最复杂的子系统之一,其作用包括: 为软件提供独立的虚拟内存空间,实现安全隔离分配/回收物理内存资源,维持系统稳定支持不同类型的内存分配器,最优…

Tableau for mac 驱动

Tableau 驱动程序安装指南 对于希望在 Mac OS 上使用 Tableau 进行数据分析的用户来说,确保正确安装相应的驱动程序至关重要。Tableau 支持多种数据库连接方式,并提供官方文档指导如何设置这些连接。 安装适用于 Mac 的 JDBC 或 ODBC 驱动程序 为了使…

fast-reid部署

配置设置: 官方库链接: https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖: pip install -r docs/requirements.txt 编译:切换到fastreid/evaluation/rank_cylib目录下&a…

大陆4D毫米波雷达ARS548调试

本文介绍了大陆ARS548毫米波雷达的调试与测试流程,主要包括以下内容: 设备参数:最大检测距离301m(可调93-1514m),支持gPTP时间同步。 接线调试: Windows需使用USB-RJ45转换器 Linux可直接连接网…

大语言模型解析

1. Input Embedding embedding:将自然语言翻译成index 每个index对应一个embedding,embedding需要训练,embedding是一个数组

Java在word中指定位置插入图片。

Java使用(Poi-tl) 在word(docx)中指定位置插入图片 Poi-tl 简介Maven 依赖配置Poi-tl 实现原理与步骤1. 模板标签规范2.完整实现代码3.效果展示 Poi-tl 简介 Poi-tl 是基于 Apache POI 的 Java 开源文档处理库,专注于…

可视化图解算法48:有效括号序列

牛客网 面试笔试 TOP101 | LeetCode 20. 有效的括号 1. 题目 描述 给出一个仅包含字符(,),{,},[和],的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列&…

Continue 开源 AI 编程助手框架深度分析

Continue 开源 AI 编程助手框架深度分析 一、项目简介 Continue 是一个模块化、可配置、跨平台的开源 AI 编程助手框架,目标是让开发者能在本地或云端环境中,快速集成和使用自定义的 LLM 编程辅助工具。它通过支持 VS Code 与 JetBrains 等主流 IDE 插件…

MySQL技术内幕1:内容介绍+MySQL编译使用介绍

文章目录 1.整体内容介绍2.下载编译流程2.1 安装编译工具和依赖库2.2 下载编译 3.配置MySQL3.1 数据库初始化3.2 编辑配置文件3.3 启动停止MySQL3.4 登录并修改密码 1.整体内容介绍 MySQL技术系列文章将从MySQL下载编译,使用到MySQL各组件使用原理源码分析&#xf…

网络安全问题及对策研究

摘 要 网络安全问题一直是近年来社会乃至全世界十分关注的重要性问题,网络关乎着我们的生活,政治,经济等多个方面,致力解决网络安全问题以及给出行之有效的安全策略是网络安全领域的一大目标。 本论文简述了课题的开发背景&…

【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】数据链路层——ARP协议 🔖流水不争,争的是滔滔不息 一、网络地址转…

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug? Pug(原名 Jade)是一种高效的网页模板引擎,通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签,使用缩进定义结构,…

【立体匹配】:双目立体匹配SGBM:(1)运行

注:这是一个专题,我会一步步介绍SGBM的实现,按照我的使用和优化过程逐步改善算法,附带实现方法 系列文章【立体匹配】:双目立体匹配SGBM:(1)运行 【立体匹配】:双目立体匹…

< 自用文 OS有关 新的JD云主机> 国内 京东云主机 2C4G 60G 5Mb 498/36月 Ubuntu22

攒了这么久,废话一些: 前几周很多事儿,打算回北京,开个清真的德克萨斯烤肉店,写了一篇 : < 自用文 Texas style Smoker > 美式德克萨斯烟熏炉 从设计到实现 (第一部分&…

《架构即未来》笔记

思维导图 第一部分:可扩展性组织的人员配置 第二部分:构建可扩展的过程 第三部分:可扩展的架构方案 第四部分:其他的问题和挑战 资料 问软件工程研究所: https://www.sei.cmu.edu/ AKF公司博客: http://www.akfpart…

ubuntu2404 gpu 没接显示器,如何保证远程显示的分辨率

1. 使用 xserver-xorg-video-dummy 创建虚拟显示器 如果系统在无物理显示器连接时无法识别显示输出,可以使用 xserver-xorg-video-dummy 驱动程序创建虚拟显示器。以下是设置步骤: 安装虚拟显示器驱动程序: sudo apt install xserver-xorg-v…

【基于阿里云搭建数据仓库(离线)】使用UDTF时出现报错“FlatEventUDTF cannot be resolved”

目录 问题: 可能的原因有: 解决方法: 问题: 已经将包含第三方依赖的jar包上传到dataworks,并且成功注册函数,但是还是报错:“FlatEventUDTF cannot be resolved”,如下&#xff1a…

Pycharm的终端无法使用Anaconda命令行问题详细解决教程

很多初学者在Windows系统上安装了Anaconda后,在PyCharm终端中运行Conda命令时,会遇到以下错误: conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写,如果包括路径,请确保…

SAP学习笔记 - 开发24 - 前端Fiori开发 Filtering(过滤器),Sorting and Grouping(排序和分组)

上一章讲了SAP Fiori开发的表达式绑定,自定义格式化等内容。 SAP学习笔记 - 开发23 - 前端Fiori开发 Expression Binding(表达式绑定),Custom Formatters(自定义格式化)-CSDN博客 本章继续讲SAP Fiori开发…

自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器

🔍 背景介绍 在渗透测试与红队评估过程中,DNS 外带(DNS Exfiltration) 是一种常见且隐蔽的通信通道。由于多数目标环境默认具备外网 DNS 解析能力,即便在 无回显、无文件上传权限 的条件下,仍可通过 DNS 请…