【VUE3.0】动手做一套像素风的前端UI组件库---先导篇

系列文章目录

  1. 【VUE3.0】动手做一套像素风的前端UI组件库—Button
  2. 【VUE3.0】动手做一套像素风的前端UI组件库—Radio

目录

  • 系列文章目录
  • 引言
  • 准备素材
    • 字体
    • 鼠标手势图
  • 创建vue3项目
    • 构建项目
      • 1. 根据命令行提示选择如下:
      • 2. 进入项目根目录下载依赖并启动。
      • 3. 设置项目src路径别名,方便后期应用路径。
      • 4. 将素材按照自己的规则放置在assets文件夹下:
      • 5. 初始化全局css样式,在项目初始化之后,在src下会自动生成一个style.css文件,清空所有内容,设置我们自己的样式规则
      • 6. 初始化app.vue文件内容,测试字体及鼠标样式。
      • 7. 设置全局组件注册方法
    • 测试效果
  • 总结

引言

闲暇时间逛github时发现了一个有趣的前端UI样式库 NES.css ,个人非常喜欢这种类型的东西,虽然可能无法在工作中实际应用,但是如果能仔细研究清楚如何去实现效果,倒也是对提升css技术能力有所帮助。
NES.css
我将在接下来的几篇文档中,完成以下几个内容:

  1. 参考NES.css研究各类组件样式如何编写。
  2. 基于vue3框架编写组件库。
  3. 将组件库发布npm仓库提供下载。

准备素材

一个像素风格的UI库除了组件样式之外,一些必要的图片、字体素材也会把整个像素风格提升一个等级。所以我先扒了一下NES.css官网提供的素材,比如鼠标样式图片、字体。

字体

  • NES.css官网首推的字体为 Press Start 2P,由于这种字体只支持英文,因此还需要一款中文字体。英文字体地址:Press Start 2P
  • 官网同时推荐了中文、日文、韩文等字体,这里只说中文,例如:zpix-pixel-font。
  • 经过体验后我发现zpix-pixel-font这个字体不是很符合我对像素风的想象,所以我又搜寻了另一种中文字体目哉像素体,我已将中英两种字体均打包好了放在文章末尾提供下载。

鼠标手势图

  • 鼠标手势图片我觉得NES.css提供的素材就非常棒,他提供了普通模式和选中模式两种手势的png图片。后续我又新增了禁用手势图片,制作像素风图片的方法参考:【VUE3.0】如何得到一张像素风格的图片?
  • 我在之前的文章提到了一种新的图片格式AVIF,因为像素风对于画质要求极低,所以在不考虑画面细节的前提下,我更推荐大家使用AVIF格式的图片格式,转换的方法参考:【CSS Tricks】一种基于AV1视频格式的现代图像格式-AVIF,但是在我实际转换后发现我错了,无论是我将图片转为svg、webp、avif等格式,都会比现有png格式体积变大不少。有懂行的老兄帮忙解释下为啥?
  • 因为转换后反而图片体积变大了,所以就只将原图片打包好放在文章末尾提供下载。

创建vue3项目

本项目使用vite构建vue3项目,使用yarn包管理工具,使用JavaScript语法,(我觉得TS太麻烦了,虽然对于团队协作提供了不少的帮助,但是个人项目讲究灵活性),不使用css预处理,总之项目一切从简。

构建项目

yarn create vite

1. 根据命令行提示选择如下:

命令行

2. 进入项目根目录下载依赖并启动。

# 进入项目根目录
cd pixelUI
# 下载依赖
yarn install
# 启动项目
yarn dev

3. 设置项目src路径别名,方便后期应用路径。

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "src"),
    },
  },
});

4. 将素材按照自己的规则放置在assets文件夹下:

assets

5. 初始化全局css样式,在项目初始化之后,在src下会自动生成一个style.css文件,清空所有内容,设置我们自己的样式规则

/* 全局样式变量 */
:root {
  /* 鼠标样式 */
  --cursor_normal: url("@/assets/images/cursor/cursor.png"), auto;
  --cursor_pointer: url("@/assets/images/cursor/cursor-click.png"), auto;
}
/* 字体 */
@font-face {
  font-family: "pixel_en";
  src: url("@/assets/fonts/pixel_en.ttf");
}
@font-face {
  font-family: "pixel_ch";
  src: url("@/assets/fonts/pixel_ch.ttf");
}
/* 根节点重置样式 */
html,
body,
#app {
  margin: 0;
  padding: 0;
  width: 100vw;
  height: 100vh;
  cursor: var(--cursor_normal);
  scroll-behavior: smooth;
}

6. 初始化app.vue文件内容,测试字体及鼠标样式。

<template>
  <div class="cursor">测试鼠标选中状态</div>
  <div class="font_ch"># 测试中文</div>
  <div class="font_en"># Test English Error</div>
</template>
<script setup></script>
<style scoped>
.cursor {
  cursor: var(--cursor_pointer);
  margin-top: 20px;
  margin-left: 20px;
}
.font_ch {
  font-family: pixel_ch;
  font-size: 18px;
  font-weight: bold;
  margin-top: 20px;
  margin-left: 20px;
}
.font_en {
  font-family: pixel_en;
  font-size: 18px;
  margin-top: 20px;
  margin-left: 20px;
}
</style>

7. 设置全局组件注册方法

这里主要是为了方便测试组件时直接使用组件名称不需要单独引入组件文件。

  1. src\components目录下创建install.js文件
// 引入项目中的全局组件
import pButton from "./button/index.vue"; // 引入自定义的svg组件
// 引入其他全局组件
const allGloablCom = {
  pButton,
 // 其他全局组件
}; // 将自定义组件放入对象中

// 对外暴露插件对象
export default {
  // 只能叫做 install 方法
  install(app) {
    // 循环遍历,注册 allGloablCom 中全部组件
    Object.keys(allGloablCom).forEach((key) => {
      // 注册为全局组件
      app.component(key, allGloablCom[key]);
    });
  },
};

  1. 在src下的main.js中新增内容
// 其他引用
import globalComponent from "@/components/install.js";
const app = createApp(App);
// 注册自定义全局组件
app.use(globalComponent);
app.mount("#app");

测试效果

测试

总结

  1. 至此完成了项目构建的前期准备工作,后续的组件库样式研究将分批次整,欢迎各位指导交流分享。
  2. 素材分享地址:
    • 夸克链接
    • 提取码:8pGe
  3. 另外我也上传了素材内容到csdn的资源分享,位于文章顶部位置,也欢迎各位帮我点点下载关注。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL函数介绍--日期与时间函数(二)

我相信大家在学习各种语言的时候或多或少听过我们函数或者方法这一类的名词&#xff0c;函数在计算机语言的使用中可以说是贯穿始终&#xff0c;那么大家有没有思考过到底函数是什么&#xff1f;函数的作用又是什么呢&#xff1f;我们为什么要使用函数&#xff1f;其实&#xf…

什么是上层封禁海外流量

上层封禁海外流量&#xff08;Upper-layer Blocking of Overseas Traffic&#xff09;是一种网络安全策略&#xff0c;旨在通过在网络传输的上层进行流量控制和过滤&#xff0c;从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务&#xff08;DDoS…

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Ret…

【深度学习】(3)--损失函数

文章目录 损失函数一、L1Loss损失函数1. 定义2. 优缺点3. 应用 二、NLLLoss损失函数1. 定义与原理2. 优点与注意3. 应用 三、MSELoss损失函数1. 定义与原理2. 优点与注意3. 应用 四、BCELoss损失函数1. 定义与原理2. 优点与注意3. 应用 五、CrossEntropyLoss损失函数1. 定义与原…

【觅图网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

Java集合(Map篇)

一.Map a.使用Map i.键值&#xff08;key-value&#xff09;映射表的数据结构&#xff0c;能高效通过key快速查找value&#xff08;元素&#xff09;。 ii.Map是一个接口&#xff0c;最常用的实现类是HashMap。 iii.重复放入k-v不会有问题&#xff0c;但是一个…

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

【计算机网络】计算机网络基础二

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 以太网的通信原理令牌环网的通信原理网络传输基本流程 数据包封装和分用 网络传输流程图 局域网通信&#xff08;同一个网段内的两台…

Java基础笔记1】Java基础语法

目录 一、Java简介 二、JDK和Java初体验 三、配置环境变量 四、IDEA快捷键 五、Java语法基础 1. 注释 2. 字面量 3. 变量 4. 关键字和标识符 5. 变量详解 a. 数值数据在计算机中的存储​编辑 b. 文本、图片、音频等数据在计算机中的存储 c. 八进制和十六进制 6. 数据类型 a. …

Java多线程(1)—线程基础

一、关于线程 1.1 简介 计算机线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位。线程的优势在于提高了程序的效率和响应能力&#xff0c;尤其在处理 I/O 操作或多任务时。多线程编程能够充分利用多核处理器的计算能力&#xff0c;达到更高的性能。 …

electron-updater实现electron全量版本更新

在 Electron 应用中使用 electron-updater 来实现自动更新功能时&#xff0c;通常你会在一个专门的模块或文件中管理更新逻辑。如果你想要使用 ES6 的 import 语法来引入 electron-updater&#xff0c;你需要确保你的项目已经配置好了支持 ES6 模块的构建工具&#xff08;如 We…

【Fastapi】参数获取,json和query

【Fastapi】参数获取&#xff0c;json和query 前言giteegithub query形式json传递同步方法使用json 前言 花了半个月的时间看了一本小说&#xff0c;懈怠了…今天更新下fastapi框架的参数获取 gitee https://gitee.com/zz1521145346/fastapi_frame.git github https://git…

828华为云征文|Flexus云服务器X实例实践:部署Alist文件列表程序

828华为云征文&#xff5c;Flexus云服务器X实例实践&#xff1a;部署Alist文件列表程序 引言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 主要使用场景 二、购买Flexus云服务器X实例2.1 购买规格参考2.2 查看Flexus云服务器X实例状态 三、远程连接Flexus云服务…

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火&#xff0c;可有人提问&#xff0c;这么火的语言它的底层又是什么语言编写的呢&#xff1f; python是C语言编写的&#xff0c;它有很多包也是用C语言写的。 所以说&#xff0c;C语言还是很…

二分查找算法(5) _山脉数组的峰顶索引

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 二分查找算法(5) _山脉数组的峰顶索引 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c;…

二分算法——优选算法

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 本章我们来学习的是二分查找算法&#xff0c;二分算法的应用非常广泛&#xff0c;不仅限于数组查找&#xff0c;还可以用于解决各种搜索问题、查找极值问题等。在数据结构和算…

海外仓商品退换货管理:选择系统为何至关重要?

随着跨境电商的蓬勃发展&#xff0c;退换货问题成为了卖家们不得不面对的挑战。退换货处理不仅繁琐&#xff0c;而且对效率和服务质量的要求极高。因此&#xff0c;许多卖家选择海外仓来简化退换货流程。然而&#xff0c;海外仓在处理退换货时同样面临诸多难题&#xff0c;涉及…

openeuler 22.03 lts sp4 使用 kubeadm 部署 k8s-v1.28.2 高可用集群

文章目录 [toc]废话篇这篇文章什么时候写的为什么是 openeuler为什么是 22.03 lts sp4高可用架构题外话 干活篇环境介绍系统初始化相关关闭防火墙关闭 selinux关闭 swap开启内核模块开启模块自动加载服务 sysctl 内核参数调整清空 iptables 规则安装各种依赖和工具修改 .bashrc…

【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器

注意事项 uni.request 请求封装 请求和上传文件拦截器 uniapp 拦截器&#xff1a; uni.addInterceptor 接口说明&#xff1a;接口文档 实现需求 拼接基础地址设置超时时间添加请求头标识添加 token 参考代码 // src/utils/http.ts// 请求基地址 const baseURL https://pca…

ArcGIS Desktop使用入门(三)图层右键工具——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…