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

news2024/11/18 9:29:16

封装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.coloradmin.cn/o/1234972.html

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

相关文章

SpringBoot趣探究--1.logo是如何打印出来的

一.前言 从本篇开始,我将对springboot框架做一个有趣的探究,探究一下它的流程,虽然源码看不懂,不过我们可以一点一点慢慢深挖,好了,下面我们来看一下本篇的知识,这个logo是如何打印出来的&#…

2014年2月24日 Go生态洞察:FOSDEM 2014上的Go演讲精选

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

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

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

gitlab安装以及创建用户创建组,修改密码 邮箱配置 数据备份与恢复--保姆级教学!

GitLab是一种基于Web的Git仓库管理工具,它允许您在组织或个人级别上创建和管理Git仓库,以便在一个中心位置上执行代码管理和协作工作。GitLab提供了强大的功能,如代码审查、问题跟踪、CI/CD、容器注册表、Wiki和持续集成等。 以下是GitLab的…

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安…

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

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

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

【代数学习题4.1】从零理解范数与迹 —— 求极小多项式

从零理解范数与迹 —— 求极小多项式 写在前面概念解释题目解答 1. 极小多项式极小多项式的求法1. 对 α \alpha α 的极小多项式python求解 2. 对 α 1 \alpha 1 α1 的极小多项式python找到多项式python找到极小多项式 3. 对 α 2 α 1 \alpha^2 \alpha 1 α2α1 的…

高校档案室建设标准-高校数字档案室建设需考虑哪些因素

高校档案室是高等教育机构所建立的档案存放与管理的机构,主要负责高校行政、教学、科研、文化和保密等方面的档案的收集、整理、保存、利用和管理工作。高校档案室是高等教育机构的重要组成部分,旨在为高校的历史研究、管理和服务提供必要的档案资源。同…

STM32F4串口USART发送为00的解决方案

检查接线是否正确检查TX是否为复用推挽输出 3.检查是否将TX和RX引脚重映射为USART功能 在STM32中,每个GPIO引脚可以配置为不同的复用功能,例如UART、SPI、I2C等。具体来说,GPIO_PinAFConfig函数用于配置GPIO引脚的复用功能。它的参数包括GPIO…

Java使用x-www-form-urlencoded发请求

平常在开发过程中用的最多的就是JSON格式&#xff0c;请求编码就是 application/json&#xff0c;但偏偏有些接口是 x-www-form-urlencoded&#xff0c;怎么办呢&#xff0c;重新封装喽 在POSTMan工具是叫 x-www-form-urlencoded 在 APIpost工具中是叫 urlencoded Map<Str…

Monoxide relay机制和连弩挖矿

这篇文章就两个点&#xff0c;relay机制 、 连弩挖矿 relay 最终原子性 Eventual Atomicity 一笔跨链交易&#xff0c;从取款shard中发出&#xff0c;到存款shard中. 当收款shard中将这笔夸片交易打包上链后&#xff0c;原子性才执行结束。 这样做的延迟是比较小的。 如何应…

uniapp、微信小程序返回上页面刷新数据

目录 前言&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 方法3&#xff1a; 前言&#xff1a; 返回上页面刷新数据这个功能主要用于在当前页面点击跳转到另一个页面之后&#xff0c;在另一个页面对数据进行了操作&#xff0c;比如&#xff1a;阅读量&#xff0c;然后返…

接入电商数据平台官方开放平台API接口获取商品实时信息数据,销量,评论,详情页演示

要接入电商数据平台官方开放平台API接口获取商品实时信息数据、销量、评论和详情页演示&#xff0c;需要按照以下步骤进行操作&#xff1a; 找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。可以在电商数据平台的官方开放平台上查找相应的AP…

react等效memo的方法

视频教程 前端技术&#xff5c;Dan博客&#xff5c;在你写memo()之前_哔哩哔哩_bilibili 把与ExpensiveTree的无关的dom做成一个组件 第二种情况&#xff0c;color在ExpensiveTree组件的父级dom 创建一个组件&#xff0c;将state的color和input写上&#xff0c;而ExpensiveTr…

【智能优化算法】从蚁群到动物园

目录 引言蚁群优化算法&#xff08;ACO&#xff09;ACO 机理ACO 模型描述ACO 移动策略 粒子群优化算法&#xff08;PSO&#xff09;PSO 机理PSO 模型描述 萤火虫群优化算法&#xff08;GSO&#xff09;GSO 机理GSO 模型描述 群智能优化算法 引言 21世纪&#xff0c;人类社会已经…

梯度引导的分子生成扩散模型- GaUDI 评测

GaUDI模型来自于以色列理工Tomer Weiss的2023年发表在预印本ChemRxiv上的工作 《Guided Diffusion for Inverse Molecular Design》。原文链接&#xff1a;Guided Diffusion for Inverse Molecular Design | Materials Chemistry | ChemRxiv | Cambridge Open Engage GaUDI模型…

问题 R: 胜利大逃亡(HUST)

#include <deque> #define inf 200000 #include<iostream> #include<queue> using namespace std;// 迷宫坐标 int map[59][59][59] { 0 };// 可访问标记 int visit[51][51][51] { 0 }; // 移动方式 int next1[7][4] { {1,0,0},{-1,0,0}, {0,1,0},{0,-1,…

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

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