【Nova UI】七、SASS 全局变量体系:组件库样式开发的坚固基石
序言
咱们已经实现了 SASS 中一系列实用的函数和混入,可它们究竟如何在实际的组件库样式开发里大展身手,尤其是在构建全局变量体系这一关键环节呢🧐?这篇文章将为你揭晓答案,带你深入了解怎样利用这些工具实现 SASS 全局变量的巧妙定义、灵活运用,进而让整个组件库的样式焕发出更加协调统一的光彩🌟。
全局变量
主题类型
为了有序管理主题相关的样式变量,我们在packages/theme-chalk/src/mixins目录下创建了variable.scss文件📄。通过参考 element UI 组件中优秀的设计模式,我们着手定义一系列主题类型及其对应的颜色变量。
$types: default, primary, success, warning, danger, error, info;
$color: () !default;
$color: map.deep-merge(('white': #ffffff,'black': #000000,'default': ('base': inherit,),'primary': ('base': #4285F4,),'success': ('base': #0F9D58,),'warning': ('base': #F4B400,),'danger': ('base': #DB4437,),'error': ('base': #B00020,),'info': ('base': #616161,),),$color
);
$color-white: map.get($color, 'white') !default;
$color-black: map.get($color, 'black') !default;
$color-default: map.get($color, 'default', 'base') !default;
$color-primary: map.get($color, 'primary', 'base') !default;
$color-success: map.get($color, 'success', 'base') !default;
$color-warning: map.get($color, 'warning', 'base') !default;
$color-danger: map.get($color, 'danger', 'base') !default;
$color-error: map.get($color, 'error', 'base') !default;
$color-info: map.get($color, 'info', 'base') !default;
通过定义$types变量,我们构建了一个清晰的主题类型集合,这为后续在不同场景下区分和应用样式提供了明确的指引🧭。而$color变量的构建则是通过深度合并操作,将基础颜色(如白色和黑色)与各个主题类型所对应的颜色信息,有条不紊地整合到一个映射中。每个主题类型下的base属性,精准地指定了该主题的基础颜色值。最后,利用map.get函数从$color映射中提取出各个颜色值,并将其定义为独立变量,这使得在组件库样式编写过程中,无论是设置文本颜色、背景颜色,还是处理其他与颜色相关的样式属性,都能轻松实现,有力地确保了样式的一致性与可维护性。
这样的设计,犹如搭建了一个井然有序的 “颜色管理库”🎨,极大地提升了主题类型和颜色变量的管理效率,在实际的样式开发应用中,显著提高了开发效率与灵活性,让开发者能够更加专注于样式的创意与实现。
字体颜色
在字体颜色的管理方面,我们同样追求高效与统一。以下是在variable.scss文件中对字体颜色变量的定义。
$font-color: () !default;
$font-color: map.merge(('default': #333333,'primary': getVariableValue('color', 'primary'),'success': getVariableValue('color', 'success'),'warning': getVariableValue('color', 'warning'),'danger': getVariableValue('color', 'danger'),'error': getVariableValue('color', 'error'),'info': getVariableValue('color', 'info'),),$font-color
);
这段代码首先将$font-color初始化为空映射,然后通过map.merge函数,将一个包含默认字体颜色以及基于不同主题颜色衍生的字体颜色映射与原有的$font-color进行合并。其中,默认字体颜色设置为#333333,这是一种广泛应用于正文文本,能提供良好可读性的深灰色。而其他主题对应的字体颜色,则巧妙地借助getVariableValue函数,从之前定义的$color变量中获取相应主题的颜色值。这种设计不仅体现了变量的复用性,还确保了在主题颜色发生变化时,相关的字体颜色能够自动同步更新,极大地增强了样式的一致性与可维护性。
类似地,对于组件库中的其他样式属性,我们也采用了相同的设计思路与方法进行管理。由于具体实现方式较为相似,在此不一一赘述,若你想深入了解更多细节,可以前往下方提到的Nova UI组件仓库地址中查看🔍。
初始化css自定义属性
为了在整个项目中方便地使用我们定义的全局变量,我们需要将其转化为 CSS3 变量。在packages/theme-chalk/src/mixins目录下,我们新创建了_root.scss文件,并运用上篇文章中精心编写的混入方法,实现变量的声明。
@use 'variable.scss' as *;
@use 'variable-mixins.scss' as *;:root {@include set-base-variable-from-keys('color', $types, $color);@include set-variable-from-keys('font-color', $types, $font-color);
}
在这段代码中,我们首先通过@use语句引入了variable.scss和variable - mixins.scss文件,以便能够使用其中定义的变量和混入。在:root选择器中,利用set-base-variable-from keys和set-variable-from-keys混入,分别将$color和$font-color映射中的变量,以 CSS3 变量的形式进行声明。这样,在整个项目的 CSS 样式中,都可以方便地通过var()函数来引用这些全局变量,实现样式的统一控制与灵活调整。
合并引入
在实际的开发过程中,如果每次使用相关内容都需要导入多个文件,无疑会增加开发的复杂性与繁琐性。为了简化这一流程,我们在packages/theme-chalk/src/mixins目录下,创建了一个统一的入口文件index.scss。
@forward 'config';
@forward 'bem';
@forward 'variable';
@forward 'variable-mixins';
@forward 'function';
@forward 'root';
通过这个index.scss文件,我们使用@forward指令将项目中所需的各个文件内容统一暴露出去。在其他 SASS 文件中,只需导入这一个index.scss文件,即可轻松获取到所有相关的配置、混入、函数以及变量定义等内容。这一设计极大地简化了文件导入的过程,提高了开发效率,同时也使得项目的文件结构更加清晰、易于管理📁。
通过以上一系列精心的设计与实现,我们成功构建了一套功能强大、灵活高效的 SASS 全局变量体系,为组件库的样式开发与管理提供了坚实的基础,助力打造出风格统一、易于维护的优质组件库。
🦀🦀感谢看官看到这里,如果觉得文章不错的话🙌,点个关注不迷路⭐。
诚邀您加入我的微信技术交流群🎉,群里都是志同道合的开发者👨💻,大家能一起交流分享摸鱼🐟。期待与您在群里相见🚀,咱们携手在开发路上共同进步✨ !
👉点我
感谢各位大侠一路相伴,实在感激! 不瞒您说,在下还有几个开源项目 📦,它们就像精心培育的幼苗 🌱,急需您的浇灌。要是您瞧着还不错,麻烦动动手指,给它们点亮几颗 Star ⭐,您的支持就是它们成长的最大动力,在此谢过各位大侠啦!
Nova UI组件库:https://github.com/gmingchen/nova-ui- 基于 Vue3 + Element-plus 管理后台基础功能框架
- 预览:https://admin.gumingchen.icu
- Github:https://github.com/gmingchen/agile-admin
- Gitee:https://gitee.com/shychen/agile-admin
- 基础版后端:https://github.com/gmingchen/java-spring-boot-admin
- 文档:http://admin.gumingchen.icu/doc/
- 基于 Vue3 + Element-plus + websocket 即时聊天系统
- 预览:https://chatterbox.gumingchen.icu/
- Github:https://github.com/gmingchen/chatterbox
- Gitee:https://gitee.com/shychen/chatterbox
- 基于 node 开发的后端服务:https://github.com/gmingchen/node-server
相关文章:
【Nova UI】七、SASS 全局变量体系:组件库样式开发的坚固基石
序言 咱们已经实现了 SASS 中一系列实用的函数和混入,可它们究竟如何在实际的组件库样式开发里大展身手,尤其是在构建全局变量体系这一关键环节呢🧐?这篇文章将为你揭晓答案,带你深入了解怎样利用这些工具实现 SASS 全…...
第七篇:linux之基本权限、进程管理、系统服务
第七篇:linux之基本权限、进程管理、系统服务 文章目录 第七篇:linux之基本权限、进程管理、系统服务一、基本权限1、什么是权限?2、为什么要有权限?3、权限与用户之间的关系?4、权限对应的数字含义5、使用chmod设定权…...
Windows 同步技术-一次性初始化
组件通常设计为在首次调用时执行初始化任务,而不是加载它们时。 一次性初始化函数可确保此初始化仅发生一次,即使多个线程可能尝试初始化也是如此。 Windows Server 2003 和 Windows XP: 应用程序必须使用 互锁函数 或其他同步机制提供自己的…...
爬虫案例-爬取某企数据
文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…...
VAE-LSTM异常检测模型复刻报告
VAE-LSTM异常检测模型复刻报告 复刻背景 本报告记录了我复刻VAE-LSTM异常检测模型的完整过程。原论文提出了一种结合变分自编码器(VAE)和长短期记忆网络(LSTM)的异常检测方法,用于时间序列数据。 环境配置 复刻过程中使用的环境配置如下: Python 3.…...
学习笔记—C++—string(一)
目录 string 为什么学习string的类 string类的常用接口 string类对象的常见构造 string类对象的访问及遍历操作 operator[] 迭代器 范围for auto 迭代器(二) string类对象的容量操作 size,length,max_size,capacity,clear基本用法 reserve 提…...
OpenCV 图形API(55)颜色空间转换-----将图像从 RGB 色彩空间转换为 I420 格式函数RGB2I420()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 RGB 色彩空间转换为 I420 色彩空间。 该函数将输入图像从 RGB 色彩空间转换为 I420。R、G 和 B 通道值的常规范围是 0 到 255。 输出图…...
GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)
今天偶然发现天梯赛的代码还保存着,于是决定写下这篇题解,也算是复盘一下了 L1本来是打算写的稳妥点,最后在L1-6又想省时间,又忘记了insert,replace这些方法怎么用,也不想花时间写一个文件测试,…...
MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典(一)
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、简介 1.1. 为什么要使用联合查询 1.2. 多表联合查询时的计算 1.3. 示例 二、内连接 2.1. 语法 2.2. 示例 三、外连接 4.1. 语法 4.2. 示例 一、简介 1.1. 为什么要使用联合查询 一次查询需…...
zkPass案例实战之合约篇
目录 一、contracts/contracts/ProofVerifier.sol 1. License 和 Solidity 版本 2. 导入依赖 3. 合约声明和默认分配器地址 4. 验证证明 5. 验证分配器签名 6. 验证验证者签名 7. 签名前缀处理 8. 签名恢复 总结 二、contracts/contracts/SampleAttestation.sol 1. …...
15.FineReport动态展示需要的列
1.首先连接自带的sqlite数据库,具体方法参考下面的链接 点击查看连接sqlite数据库 2.文件 – 新建普通报表 3.新建数据库查询 4.查询自带的销售明细表 5.把数据添加到格子中,并设置边框颜色等格式 6.查询新的数据集:column 7.点笔 8.全部添…...
Windows云主机远程连接提示“出现了内部错误”
今天有人反馈说有个服务器突然连不上了,让我看下什么问题,我根据他给的账号密码试了下发现提示“出现了内部错误”,然后就是一通排查 先是查看安全组,没发现特别的问题,因为也没有调过这块的配置 然后通过控制台登录进…...
最新扣子(Coze)案例教程:Excel数据生成统计图表,自动清洗数据+转换可视化图表+零代码,完全免费教程
大家好,我是斜杠君。 知识星球群有同学和我说每天的工作涉及很多数据表的重复操作,想学习Excel数据表通过大模型自动转数据图片的功能。 今天斜杠君就带大家一起搭建一个智能体,以一个销售行业数据为例,可以快速实现自动清洗Exc…...
如何安装Visio(win10)
首先下载下面这些文件 HomeStudent2021Retail.img officedeploymenttool_17531-20046.exe office中文语言包.exe 确保这些文件都在一个文件夹内(我已经上传这些资源,这些资源都是官网下载的) 官网资源下载教程 1.下载Office镜像࿰…...
建筑安全员 A 证与 C 证:差异决定职业方向
在建筑行业的职业发展道路上,安全员 A 证和 C 证就像两条不同的岔路,它们之间的差异,在很大程度上决定了从业者的职业方向。 从证书性质和用途来看,A 证是从业资格证书,更像是一把开启安全管理高层岗位的 “金钥匙”。…...
Java Arrays工具类解析(Java 8-17)
一、Arrays工具类概述 java.util.Arrays是Java集合框架中提供的数组操作工具类,包含各种静态方法用于操作数组(排序、搜索、比较、填充、复制等)。自Java 8到17版本,Arrays类不断增强了功能,特别是引入了并行操作和St…...
(19)VTK C++开发示例 --- 分隔文本读取器
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 本例采用坐标和法线(x y z nx ny nz)的纯文本文件,并将它们读入vtkPolyData并显示…...
Redis从入门到实战先导篇
前言:本节内容包括虚拟机VMware的安装,Linux系统的配置,FinalShell的下载与配置,Redis与其桌面客户端的安装指导,便于后续黑马Redis从入门到实战的课程学习 目录 主要内容 0.相关资源 1.VMware安装 2.Linux与CentOS安装 3.Fi…...
WebSocket是h5定义的,双向通信,节省资源,更好的及时通信
浏览器和服务器之间的通信更便利,比http的轮询等效率提高很多, WebSocket并不是权限的协议,而是利用http协议来建立连接 websocket必须由浏览器发起请求,协议是一个标准的http请求,格式如下 GET ws://example.com:3…...
uniapp中使用<cover-view>标签
文章背景: uniapp中遇到了原生组件(canvas)优先级过高覆盖vant组件 解决办法: 使用<cover-view>标签 踩坑: 我想实现的是一个vant组件库中动作面板的效果,能够从底部弹出框,让用户进行选择,我直…...
JavaScript 防抖和节流
方法一:使用lodash库的debounce方法 方法二:手写防抖函数 function debounce(fn,t){// 1.声明一个定时器变量 因为需要多次赋值 使用let声明let timer // 返回一个匿名函数return function(){if(timer){// 如果定时器存在清除之前的定时器 clearTimeout(…...
Spring Boot 启动时 `converting PropertySource ... to ...` 日志详解
Spring Boot 启动时 converting PropertySource ... to ... 日志详解 1. 日志背景 在 Spring Boot 应用启动过程中,会加载并处理多种 配置源(如 application.properties、系统环境变量、命令行参数等)。这些配置源会被封装为 PropertySource…...
分割数据集中.json格式标签转化成伪彩图图像
一、前言 图像分割任务中,分割数据集的转换和表示方式对于模型训练至关重要。目前主要有两种常见的分割结果表示方法: 1. 转化为TXT文件 这种方式通常使用一系列的点(坐标)来表示图像中每个像素的类别标签。每个点通常包含像素…...
Linux之彻底掌握防火墙-----安全管理详解
—— 小 峰 编 程 目录: 一、防火墙作用 二、防火墙分类 1、逻辑上划分:大体分为 主机防火墙 和 网络防火墙 2、物理上划分: 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…...
SwiftUI 常用控件简介
SwiftUI 是苹果公司推出的现代化声明式 UI 框架,用于构建 iOS、macOS、watchOS 和 tvOS 应用程序用户界面。以下是一些常用的 SwiftUI 控件: 1. 文本控件 Text: 显示一段文本。 2. 图像控件 Image: 显示图片,可以从系统图标、网络或本地资…...
HCIP-H12-821 核心知识梳理 (6)
ospf dr-priority命令默认值为1,取值范围为0~255.DHCPv6使用IPv6组播地址FF05::1:3用于中继代理和服务器之间的通信。VRF路由表里的OSPF外部路由允许被路由汇总(asbr-summary)在IS-IS网络中,直连的两台路由器不管是P2P网络类型或是Broadcast网…...
Docker 安装配置教程(配置国内源)
## 一、Windows 安装 Docker Desktop 1. 系统要求: - Windows 10 64位:专业版、企业版或教育版 - 必须开启 Hyper-V 和容器功能 - 至少 4GB 内存 2. 安装步骤: - 访问 Docker 官网下载 Docker Desktop - 双击安装程序 - 按照向导完成安装 - 重启电脑 ## 二、macOS 安装 Dock…...
初识分布式事务原理
事务是指符合ACID特性的操作就是事务,在同一个数据库中,如果要分别对表A和表B进行插入和删除操作,如果其中一个操作执行失败,可以对当前数据库进行回滚,使其回滚到执行操作前的状态,但是现有的系统架构都是…...
# 构建和训练一个简单的CBOW词嵌入模型
构建和训练一个简单的CBOW词嵌入模型 在自然语言处理(NLP)领域,词嵌入是一种将词汇映射到连续向量空间的技术,这些向量能够捕捉词汇之间的语义关系。在这篇文章中,我们将构建和训练一个简单的Continuous Bag of Words…...
Qt本地化-检测系统语言
获取系统语言,可以通过QLocale的接口 // 获取系统默认区域设置QLocale systemLocale QLocale::system();// 获取语言代码 (例如 "zh", "en", "ja" 等)QString language systemLocale.name().split(_).first(); //输出zh// 或者直接…...
