当前位置: 首页 > news >正文

【封装UI组件库系列】全局样式的定义与重置

封装UI组件库系列第二篇·样式

​​​​​​🌟前言

🌟定义全局样式

生成主题色和不同亮度的颜色

​编辑

中性色及其他变量 

🌟样式重置

🌟总结


​​​​​​​​​​​​​​🌟前言

在前端开发中,大家可能已经用过各种各样的UI组件库了,现在市面上热门的有Element-uiAnt Design等等,这些即插即用的组件库确实大大提升了开发效率,避免了很多的重复劳动,但这些组件库再怎么完善,又怎么能满足得了我们可爱的产品经理呢​?所以工作中难免会需要开发公司内部的UI组件库,或者基于已有组件库进行二开。

【封装UI组件库系列】文章,将从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》使用自己封装的组件库。技术方面使用的是Vue3 + Vite + Sass 来完成一个模仿Element Plus的组件库。最终完成效果如下:

从零开始封装UI组件库效果演示

前一篇文章完整讲解了项目框架的搭建,在读本篇文章前建议先阅读前一篇从零封装UI组件库

🌟定义全局样式

生成主题色和不同亮度的颜色

新建src/styles/index.scss vars.scss文件。

idnex.scss是样式的入口文件,vars.scss是负责定义全局的样式变量,例如颜色、字体大小等等。

接下来我们就模仿Element Plus定义主题色:

先定义几大主题色: 

然后就是使用scss语法去生成生成主题色和不同亮度的颜色:

并在main.js中引入:

import './styles/index.scss'

这时就可以看到样式起效了:

那么我们继续生成其他亮度颜色: 

 上面其他亮度的命名也都是参考的Element Plus:

这样就将各亮度的颜色也都生成出来了:

中性色及其他变量 

接下来还有一些中性色以及 border、font、disabled等相关样式的定义,vars.scss代码如下:

// 该文件主要是负责定义全局的样式变量,例如颜色、字体大小等等// 主题色
$colors: (primary: #409eff,success: #67c23a,warning: #e6a23c,danger: #f56c6c,info: #909399
);:root {// 接下来我们需要生成主题色和不同亮度的颜色@each $val, $color in $colors {// 生成主题颜色--visual-color-#{$val}: #{$color};// 还需要生成不同亮度的颜色@for $i from 1 through 4 {--visual-color-#{$val}-light-#{2 * $i + 1}: #{mix(#fff, $color, ((2 * $i + 1) * 10 * 1%))};}// dark2 和 light8 因为不符合上面的规律,我们在下面单独来生成--visual-color-#{$val}-light-8: #{mix(#fff, $color, 80 * 1%)}; // 80% 亮度--visual-color-#{$val}-dark-2: #{mix(#000,$color,20 * 1%)}; // 注意,dark是和黑色进行混合,20% 亮度}// 接下来,还有一些其他的颜色变量// 对应的是 ElementUI 里面的中性色--visual-color-white: #fff;--visual-color-black: #000;--visual-bg-color: #ffffff;--visual-bg-color-page: #f2f3f5;--visual-bg-color-overlay: #ffffff;--visual-text-color-primary: #303133;--visual-text-color-regular: #606266;--visual-text-color-secondary: #909399;--visual-text-color-placeholder: #a8abb2;--visual-text-color-disabled: #c0c4cc;--visual-border-color: #dcdfe6;--visual-border-color-light: #e4e7ed;--visual-border-color-lighter: #ebeef5;--visual-border-color-extra-light: #f2f6fc;--visual-border-color-dark: #d4d7de;--visual-border-color-darker: #cdd0d6;--visual-fill-color: #f0f2f5;--visual-fill-color-light: #f5f7fa;--visual-fill-color-lighter: #fafafa;--visual-fill-color-extra-light: #fafcff;--visual-fill-color-dark: #ebedf0;--visual-fill-color-darker: #e6e8eb;--visual-fill-color-blank: #ffffff;// 和 border 相关的变量--visual-border-width: 1px;--visual-border-style: solid;--visual-border-color-hover: var(--visual-text-color-disabled);--visual-border: var(--visual-border-width) var(--visual-border-style) var(--visual-border-color);--visual-border-radius-base: 4px;--visual-border-radius-small: 2px;--visual-border-radius-round: 20px;--visual-border-radius-circle: 100%;// 和 font 相关的变量--visual-font-size-extra-large: 20px;--visual-font-size-large: 18px;--visual-font-size-medium: 16px;--visual-font-size-base: 14px;--visual-font-size-small: 13px;--visual-font-size-extra-small: 12px;--visual-font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB','Microsoft YaHei', '\5fae\8f6f\96c5\9ed1', Arial, sans-serif;--visual-font-weight-primary: 500;// 和 disabled 相关的变量--visual-disabled-bg-color: var(--visual-fill-color-light);--visual-disabled-text-color: var(--visual-text-color-placeholder);--visual-disabled-border-color: var(--visual-border-color-light);// 和 transition 过渡相关的变量--visual-transition-duration: 0.3s;--visual-transition-duration-fast: 0.2s;
}

🌟样式重置

因为浏览器都有一套默认样式,这就导致在不同浏览器,我们的样式可能会出现偏差,所以需要重置浏览器样式,来避免因浏览器造成的样式污染

新建src/styles/reset.scss 主要是body及a等几大标签的重置,代码如下:

// 这个文件负责重置样式body {font-family: var(--duyi-font-family);font-weight: 400;font-size: var(--duyi-font-size-base);color: var(--duyi-text-color-primary);-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;-webkit-tap-highlight-color: transparent;
}a {color: var(--duyi-color-primary);text-decoration: none;&:hover,&:focus {color: var(--duyi-color-primary-light-3);}&:active {color: var(--duyi-color-primary-dark-2);}
}h1,
h2,
h3,
h4,
h5,
h6 {color: var(--duyi-text-color-regular);font-weight: inherit;&:first-child {margin-top: 0;}&:last-child {margin-bottom: 0;}
}h1 {font-size: calc(var(--duyi-font-size-base) + 6px);
}h2 {font-size: calc(var(--duyi-font-size-base) + 4px);
}h3 {font-size: calc(var(--duyi-font-size-base) + 2px);
}h4,
h5,
h6,
p {font-size: inherit;
}p {line-height: 1.8;&:first-child {margin-top: 0;}&:last-child {margin-bottom: 0;}
}sup,
sub {font-size: calc(var(--duyi-font-size-base) - 1px);
}small {font-size: calc(var(--duyi-font-size-base) - 2px);
}hr {margin-top: 20px;margin-bottom: 20px;border: 0;border-top: 1px solid var(--duyi-border-color-lighter);
}

 到这里项目框架及全局样式都以完成,下一篇将正式开始封装组件!

 🌟总结

 【封装UI组件库系列】文章会持续更新,将带着大家从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》最后使用自己封装的组件库。如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步!该系列文章建议从第一篇开始看,系列专栏地址:从零开始封装UI组件库完整篇

相关文章:

【封装UI组件库系列】全局样式的定义与重置

封装UI组件库系列第二篇样式 ​​​​​​🌟前言 🌟定义全局样式 生成主题色和不同亮度的颜色 ​编辑 中性色及其他变量 🌟样式重置 🌟总结 ​​​​​​​​​​​​​​🌟前言 在前端开发中,大家…...

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候,大多数的图片都是24位深度的(即RGB三通道,一个通道8位),但是也存在少量的32位深的图片(RGBA,三个颜色通道加上A这个透明度通道),32位和24位的格式是不一样…...

华为obs上传下载-Java版 2023-11-23

弄了半天,老师帮弄成功了,经过同意,分享到网上,希望能帮助更多人,至于怎么弄的,我也不知道。 创建idea项目后,项目结构,对应文件没有的创一个 pom.xm 注意改Java版本,我…...

2023年中国农业机器人行业市场规模及发展趋势分析[图]

农业机器人是一种机器,是机器人在农业生产中的运用,是一种可由不同程序软件控制,以适应各种作业,能感觉并适应作物种类或环境变化,有检测(如视觉等)和演算等人工智能的新一代无人自动操作机械。 农业机器人分类 资料来源&#xf…...

12英寸双轴半自动划片机:颠覆传统划切工艺的五大优势

随着科技的飞速发展,半导体行业对精密划切设备的需求日益增长。在这篇文章中,我们将深入探讨12英寸双轴半自动划片机的优势,这种划片机在半导体制造过程中扮演着至关重要的角色。以下是这种划片机的五大优势。 一、高精度划切 12英寸双轴半自…...

动态神经网络时间序列预测

大家好,我是带我去滑雪! 神经网络投照是否存在反锁与记忆可以分为静态神经网络与动态神经网络。动态神经网络是指神经网络带有反做与记忆功能,无论是局部反馈还是全局反锁。通过反馈与记忆,神经网络能将前一时刻的数据保留&#x…...

Unity 三维场景的搭建 软件构造实验报告

实验2:仿真系统功能实现 1.实验目的 (1)熟悉在Unity中设置仿真场景; (2)熟悉在Unity中C#语言的使用; (3)熟悉仿真功能的实现。 2.实验内容 新建一个仿真场景&#x…...

2024贵州大学计算机考研分析

24计算机考研|上岸指南 贵州大学 贵州大学计算机科学与技术学院(贵州大学省级示范性软件学院)位于贵州省贵阳市花溪区贵州大学东校区。 计算机科学与技术学院(软件学院)自1972年创办计算机软件本科专业开始,至今已有…...

Spring高级bean的实例化方法

bean的实例化方法 构造方法 实例化bean第一种:使用默认无参构造函数(常用) 第二种创建bean实例:静态工厂实例化(了解) 第三种:实例工厂(了解)与FactoryBean(实用)...

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…...

加载SSL证书

使用JDK1.8 开发工具包bin目录下的keytool.exe工具生成ssl密钥&#xff1a; keytool -genkey -alias mykey -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.p -genkey&#xff1a; 表示创建密钥。-alias&#xff1a; 保存时的别名。-keyalg&#xff1a;加密算…...

redis 非关系型数据库

redis 非关系型数据库 redis 非关系型数据库&#xff0c;缓存型数据库 关系型数据库和非关系型数据库的区别&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;行和列 列&#xff1a;声明对象 行&#xff1a;记录对象的属性 表与表之间是有关联的&#xff0c;使用…...

Python配置与测试利器:Hydra + pytest的完美结合

简介&#xff1a;Hydra 和 pytest 可以一起使用&#xff0c;基于 Hydra Pytest 的应用可以轻松地管理复杂配置&#xff0c;并编写参数化的单元测试&#xff0c;使得Python开发和测试将变得更为高效。 安装&#xff1a; pip install hydra-core pytest案例源码&#xff1a;my…...

5.基于飞蛾扑火算法(MFO)优化的VMD参数(MFO-VMD)

代码的使用说明 基于飞蛾扑火算法优化的VMD参数 优化算法代码原理 飞蛾扑火优化算法&#xff08;Moth-Flame Optimization&#xff0c;MFO&#xff09;是一种新型元启发式优化算法&#xff0c;该算法是受飞蛾围绕火焰飞行启发而提出的&#xff0c;具有搜索速度快、寻优能力强的…...

爱创科技总裁谢朝晖荣获“推动医药健康产业高质量发展人物”

中国医药市场规模已经成为全球第二大医药市场&#xff0c;仅次于美国。近年来&#xff0c;随着中国经济的持续增长和人民生活水平的提高&#xff0c;医药市场需求不断扩大。政府对医疗卫生事业的投入也在不断加大&#xff0c;为医药行业的发展创造了良好的政策环境。为推动医药…...

055-第三代软件开发-控制台输出彩虹日志

第三代软件开发-控制台输出彩虹日志 文章目录 第三代软件开发-控制台输出彩虹日志项目介绍控制台输出彩虹日志实现原理真实代码 总结 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QM…...

Os-hackNos-3

Os-hackNos-3 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.145 arp-scan -l端口扫描&#xff0c;开放了22和80端口 nmap -P -sV 192.168.80.145二、信息收集 访问80端口 find the Bug You need extra WebSec翻译 找到Bug 你需要额外的网络安全路径扫描 d…...

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测 目录 时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机时间序列预测 1.data为数据集…...

LeetCode:307. 区域和检索 - 数组可修改(树状数组 C++)

目录 307. 区域和检索 - 数组可修改 题目描述&#xff1a; 实现代码与解析&#xff1a; 树状数组&#xff1a; 原理思路&#xff1a; 307. 区域和检索 - 数组可修改 题目描述&#xff1a; 给你一个数组 nums &#xff0c;请你完成两类查询。 其中一类查询要求 更新 数组…...

909-2015-T3

文章目录 1.原题2.算法思想2.1.求树的高度2.2.求路径 3.关键代码4.完整代码5.输出结果 1.原题 试编写算法&#xff0c;求给定二叉树上从根节点到叶子节点的一条路径长度等于树的深度减一的路径&#xff08;即列出从根节点到该叶子节点的节点序列&#xff09;&#xff0c;若这样…...

AppleAI项目解析:Swift与Core ML集成实践指南

1. 项目概述与核心价值最近在GitHub上看到一个名为“AppleAI”的项目&#xff0c;作者是bunnysayzz。这个项目名本身就充满了想象空间&#xff0c;它并非苹果公司的官方产品&#xff0c;而是一个开源社区项目&#xff0c;旨在探索和实现一系列与苹果生态相关的智能应用或工具。…...

告别标准库:用STM32CubeMX+HAL库玩转蓝桥杯CT117E开发板的5个实战项目

告别标准库&#xff1a;用STM32CubeMXHAL库玩转蓝桥杯CT117E开发板的5个实战项目 在嵌入式开发领域&#xff0c;从标准库转向HAL库已成为不可逆转的趋势。对于参加蓝桥杯嵌入式赛项的选手来说&#xff0c;掌握HAL库开发不仅能够提升开发效率&#xff0c;更能适应现代嵌入式开发…...

中兴光猫终极管理指南:zteOnu一键开启工厂模式与永久Telnet的完整教程

中兴光猫终极管理指南&#xff1a;zteOnu一键开启工厂模式与永久Telnet的完整教程 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 中兴光猫是许多家庭和企业网络的核心设备&#xff0c…...

别再踩坑了!Windows下用Code::Blocks搭建LVGL模拟器(V9版)的完整避坑指南

Windows下用Code::Blocks搭建LVGL V9模拟器的完整避坑指南 最近在Windows平台上用Code::Blocks搭建LVGL V9模拟器时&#xff0c;发现网上大部分教程都是针对V8版本的&#xff0c;导致在文件系统访问环节频频踩坑。本文将分享我从环境准备到成功运行的全过程&#xff0c;特别是那…...

POF | 上海理工大学梁梓浩、朱兵等:使用大语言模型进行气泡湍流实验数据处理

使用大语言模型进行气泡湍流实验数据处理 Employing a large language model and a Transformer model for data analysis of turbulent bubble flow 梁梓浩1 张伟2 朱兵1,* 1.上海理工大学能源与动力工程学院&#xff0c;上海 200093&#xff0c;中国 2.中国船舶及海洋工程…...

01-java基础

java基础 创建项目删除项目快捷输入 psvmsout 注释 单行注释多行注释 关键字字面量变量数据类型&#xff08;内存&#xff09; 整数小数字符布尔 标识符键盘录入 java基础 配套完整代码&#xff1a;GitHub仓库 https://github.com/LIN-commit/java-learning 代码所在目录&am…...

具身智能课程整体总结

具身智能课程1. CS188&#xff08;快速过渡期&#xff09;2. 承上启下的基础设施&#xff1a;CS231N 与 CS2293. 跨越鸿沟的关键点&#xff1a;CS285&#xff08;强化学习&#xff09;4. 终极挑战&#xff1a;底层物理与灵巧手操作&#xff08;最底层&#xff09;一、课程体系总…...

D20: 会议效率革命:从准备到跟进的全流程

文章目录 D20: 会议效率革命:从准备到跟进的全流程 🎯 为什么这个话题重要? 现实痛点 真实案例:一场会议的"成本账单" 本章价值 一、会前准备:80% 的会议质量取决于会前 1.1 会议的"投入产出"评估 1.2 AI 辅助的会议准备 传统会议准备的痛点 AI 辅助…...

Steam Deck控制器Windows适配终极指南:SWICD驱动完整教程

Steam Deck控制器Windows适配终极指南&#xff1a;SWICD驱动完整教程 【免费下载链接】steam-deck-windows-usermode-driver A windows usermode controller driver for the steam deck internal controller. 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-window…...

3分钟实战指南:配置智能视频字幕自动化生成方案

3分钟实战指南&#xff1a;配置智能视频字幕自动化生成方案 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows VideoSrt是一款高效的开源…...