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

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

​​​​​​🌟前言

🌟定义全局样式

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

​编辑

中性色及其他变量 

🌟样式重置

🌟总结


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

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

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

前一篇文章完整讲解了项目框架的搭建,在读本篇文章前建议先阅读前一篇从零封装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组件库完整篇

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

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

相关文章

在c#中如何将多个点位(Point)转换为多边形(Polygon)并装换为shp图层

👻如图,我现在有一组经纬度点位Point,接下来我们将他装换为多边形Polygon格式 👻使用QGIS > 图层 > 添加图层 > 添加分隔文本图层 > 打开这个csv点位文件 👻打开后如左下图,csv文件中的四个点位…

C++ DAY03 类与对象

概述 对象:真实存在的事物 类: 多个对象抽取其共同点形成的概念 静态特征提取出的概念称为成员变量, 又名属性 动态特征提取出的概念称为成员函数, 又名方法 类与对象的关系 在代码中先有类后有对象 一个类可以有多个对象 多个对象可以属于同一个…

shell脚本之条件语句

条件语句 linux测试 test 测试 测试表达式是否成立(用echo $? 检测是否正确) 语法:test [选项] [文件名] 选项作用-e测试文件是否存在-r查看文件有无读的权限-d测试是否为目录-f测试是否为文件-w测试当前用户有无写的权限-x测试是否有执…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—同济大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室,浓厚创新产学研氛围! 教授亲临现场,面对面答疑解惑助攻申请! 一经录取,享全额奖学金1.5万/月! 🕙时间:…

git使用及常用命令

在初入公司中,若使用的是git管理工具,需要做以下步骤: 1,常用命令在: (1),git config --global user.name xxx(名字) //若不设置 那么下次提交代码时会报错 其次该设置名字和…

gitlab安装配置及应用

安装 ##安装依赖 yum install -y curl policycoreutils-python openssh-server perl#上传包 rz gitlab-jh-16.5.2-jh.0.el7.x86_64.rpm 安装 yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 初始化并启动 # 以下两种方法都可以配置访问地址,第一种需要在yum安…

深度学习之二(前馈神经网络--Feedforward Neural Network)

概念 前馈神经网络(Feedforward Neural Network)是一种最基本的神经网络结构,也被称为多层感知器(Multilayer Perceptron,MLP)。它的特点是信息只在网络中单向传播,不会形成环路。每一层神经元的输出都作为下一层神经元的输入,没有反馈回路。 结构: 前馈神经网络通…

小程序中打印机纸张都支持哪些尺寸?

在小程序中添加打印机功能是一项非常实用的功能,它可以让用户方便地将小程序中的内容打印出来。然而,当用户想要打印内容时,他们可能会关心打印纸张支持哪些尺寸。打印机分为四种打印机:小票、标签、发货单和电子面单。下面具体介…

YOLO改进系列之注意力机制(GatherExcite模型介绍)

模型结构 尽管在卷积神经网络(CNN)中使用自底向上的局部运算符可以很好地匹配自然图像的某些统计信息,但它也可能阻止此类模型捕获上下文的远程特征交互。Hu等人提出了一种简单,轻量级的方法,以在CNN中更好地利用上下…

使用VC++设计程序,进行全局固定阈值分割、自适应阈值分割

图像分割 获取源工程可访问gitee可在此工程的基础上进行学习。 文章目录 图像分割实验内容一、全局固定阈值分割全局固定阈值分割的原理全局固定阈值分割的实验代码全局固定阈值分割的实验现象 二、自适应阈值分割自适应阈值分割的实验原理自适应阈值分割的实验代码自适应阈值…

解决 urllib2 中 CookiesMiddleware 的 cookie 问题

1. 问题背景 在网络爬虫开发中,Cookie 是一项关键的技术,用于跟踪用户的身份和状态。Cookie 是服务器在客户端存储的数据,通常用于维护用户会话和保存用户的登录信息。在爬虫应用中,模拟用户行为和保持 Cookie 状态是必要的&…

51单片机应用

目录 ​编辑 1. C51的数据类型 1.1 C51中的基本数据类型 1.2 特殊功能寄存器类型 2. C51的变量 2.1 存储种类 1. C51的数据类型 C51是一种基于8051架构的单片机,它支持以下基本数据类型: 位(Bit):可以表…

超级实用的程序员接单平台,看完少走几年弯路,强推第一个!

”前途光明我看不见,道路曲折我走不完。“ 兜兜转转,心心念念,念念不忘,必有回响。终于找到了....... 网络上好多人都在推荐程序员线上接单,有人说赚得盆满钵满,有的人被坑得破口大骂,还有的人…

STM32踩坑:LAN8720未接网线,上电后再接网线,网络模块无法正常使用

LAN8720未接网线,上电后再接网线,网络模块无法正常使用 一、问题描述 最近因为做的项目出了BUG,STM32 单片机在未接网线的状态下,上电一段时间后,将网线插入网口后,IP地址ping不通,网络模块无…

XDAG同步节点部署

系统环境要求 JDK : v17 Maven : v3.9.1-v3.9.5 MySQL : v8.0系列 1、MySQL8.0安装 1)docker-compose安装详情 MySQL安装 2)配置数据库账号密码及键表 # docker exec -it mysql8 /bin/bash # root0286a1fd60e6:/# mysql -uroot -p Enter password:…

【Echart】Echart设置label太长隐藏:

文章目录 第一种:竖排显示第二种:显示部分第三种:强制显示所有标签并旋转 第一种:竖排显示 xAxis: {type: category,data: res.data.data.sz.xAxis,axisLabel:{fontSize:12,formatter: function(value) {return value.split().joi…

线程池有几种创建方式?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

人员定位系统人员聚集风险监测预警功能为企业安全生产保驾护航!

危化企业生产区域由于装置设施开停工、设备检维修或其它原因,会导致在局部作业区域出现作业操作人员、指挥管理人员不定时、不定点的聚集情况,一旦发生泄漏中毒、火灾爆炸、高温高热物质喷溅等事故,人员聚集将会在一定程度上加重事故后果的严…

【测试开发】学习测试前的基础知识

文章目录 目录 前言 一、什么是软件测试 二、软件测试的发展史 三、软件测试和研发的区别 四、测试人员应该具备的能力 五、测试所需要知道的基本概念 1.需求 六、软件错误(BUG)的概念 前言 本篇文章主要讲解在学习测试前一些需要了解的知识。 一、什…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】模拟考试题及A特种设备相关管理(锅炉压力容器压力管道)作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)模拟考试题参考答案及A特种设备相关管理(锅炉压力容器压力管道)考试试题解析是安全生产模拟考试一点通题库老师及A特种设备相关…