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

系列文章目录

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

目录

  • 系列文章目录
  • 引言
  • 准备素材
    • 字体
    • 鼠标手势图
  • 创建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.rhkb.cn/news/427952.html

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

相关文章

solana项目counter,测试过程中执行报错记录分享

跟随HackQuest部署counter项目&#xff0c;使用 Solana 官方提供的 playgroud 。这个平台让我们的部署和测试过程变得更加简便高效。 合约代码 lib.rs中复制以下代码 use anchor_lang::prelude::*; use std::ops::DerefMut;declare_id!("CVQCRMyzWNr8MbNhzjbfPu9YVvr97…

Amoco:一款针对二进制源码的安全分析工具

关于Amoco Amoco是一款功能强大的二进制源码静态分析工具&#xff0c;该工具基于Python 3.8开发&#xff0c;可以帮助广大研究人员轻松对二进制程序执行静态符号分析。 工具特性 1、一个通用的指令解码框架&#xff0c;旨在减少实现对新架构的支持所需的时间。例如&#xff0c…

通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制

代码地址 如果对你有帮助请给个start&#xff0c;本项目会持续更新&#xff0c;目标是做一个可用的快速微服务开发平台&#xff0c;成为接私活&#xff0c;毕设的开发神器&#xff0c; 欢迎大神们多提意见和建议 使用的都是spring官方最新的版本&#xff0c;版本如下&#xff1…

F12抓包11:UI自动化 - Recoder(记录器)

课程大纲 使用场景&#xff08;导入和导出&#xff09;: ① 测试的重复性工作&#xff0c;本浏览器录制并进行replay&#xff1b; ② 导入/导出录制脚本&#xff0c;移植后replay&#xff1b; ③ 导出给开发进行replay复现bug&#xff1b; ④ 进行前端性能分析。 1、录制脚…

Virtuoso服务在centos中自动停止的原因分析及解决方案

目录 前言1. 问题背景2. 原因分析2.1 终端关闭导致信号12.2 nohup命令的局限性 3. 解决方案3.1 使用 screen 命令保持会话3.2 使用 tmux 作为替代方案3.3 使用系统服务&#xff08;systemd&#xff09; 4. 其他注意事项4.1 网络配置4.2 日志监控 结语 前言 在使用Virtuoso作为…

mybatisplus映射与数据库表格不一致问题

1.字段映射与属性名不一致 TableField(value"数据库字段名") 2.entity添加了数据库表格不存在的属性 TableField(existfalse) 3.entity对象查询时&#xff0c;有些字段不想要显示在查询结果上 TableField(selectfalse) 4.表名不一致 TableName("数据库表名&…

爬虫--翻页tips

免责声明&#xff1a;本文仅做分享&#xff01; 伪线程 from DrissionPage import ChromiumPage import timepage ChromiumPage() page.get("https://you.ctrip.com/sight/taian746.html") # 初始化 第0页 index_page 0# 翻页点击函数 sleep def page_turn():page…

使用API有效率地管理Dynadot域名,为域名进行隐私保护设置

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

八股文-多线程、并发

八股文-多线程、并发 最近学到了一种方法&#xff0c;可以用于简历项目经验编写以及面试题目的回答 STAR法则&#xff1a;在什么背景下&#xff0c;你需要解决什么问题&#xff0c;你做了啥&#xff0c;得到了什么结果 情境&#xff08;Situation&#xff09;&#xff1a; 描…

电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

5G智能工厂与物联数字孪生平台的融合应用&#xff0c;不仅为电容器制造业注入了新的活力&#xff0c;更为整个制造业的数字化转型树立了新的标杆。电子元件制造过程中&#xff0c;数字孪生平台通过实时监测生产线的各个环节&#xff0c;实现了生产流程的可视化监控。管理人员可…

苹果M4 MacBook Air被曝2025Q1发布 屏幕面板10月出货

9 月 20 日最新消息屏幕供应链咨询公司 DSCC 首席执行官罗斯・杨&#xff08;Ross Young&#xff09;昨日&#xff08;9 月 19 日&#xff09;在 X 平台面向其订阅用户发布推文&#xff0c;透露苹果 M4 MacBook Air 与低成本 iPad 的屏幕预估将于今年 10 月开始出货。 苹果正在…

海外盲盒APP为盲盒出海助力,拓展海外市场

潮玩市场是一个具有全球化的行业在全球都具有非常高的发展潜力&#xff0c;随着国内盲盒市场的饱和&#xff0c;拓展海外市场对盲盒企业至关重要。近年来&#xff0c;盲盒已经在海外市场取得了一定的成绩&#xff0c;这为企业拓展海外市场奠定了发展基础。 目前&#xff0c;在…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及&#xff0c;获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析&#xff0c;以提取有用的信息&#xff0c;进行进一步的应用。遥感图像切片技术应运而生&#xff0c;该技术可以将大型遥感图像分割成…

[苍穹外卖]-10WebSocket入门与实战

WebSocket WebSocket是基于TCP的一种新的网络协议, 实现了浏览器与服务器的全双工通信, 即一次握手,建立持久连接,双向数据传输 区别 HTTP是短连接, WebSocket是长连接HTTP单向通信, 基于请求响应模型WebSocket支持双向通信 相同 HTTP和WebSocket底层都是TCP连接 应用场景…

Go语言练习——语法实践

目录 一、数组 1.多维数组的声明和使用 2.数组与切片的转换 3.数组在函数中的使用 二、切片 1.切片的动态扩容机制 2.切片的复制与修改 3.切片在排序算法中的应用 三、结构体 1.结构体的嵌套与方法 2.结构体与JSON的序列化 3.结构体的工厂模式 四、映射 1.映射的并发访问 2.映射…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

对商品分类系统的若干问题的思考

科学研究的目的就是研究事物的特征&#xff0c;并根据共同的特征加以分类 商品分类是商业&#xff0c;制造业中最普遍的活动&#xff0c;几乎所有的企业&#xff0c;电商平台都要对销售的商品&#xff0c;使用的原材料&#xff08;BOM&#xff09;进行分类和编号。 商品分类貌似…

从零开始学习Linux(12)---进程间通信(信号量与信号)

目录 1.信号量 2.信号 1.core功能 2.信号集 3.内核态和用户态 用户态&#xff08;User Mode&#xff09; 内核态&#xff08;Kernel Mode&#xff09; 4.volatile关键字 1.信号量 信号量是计算机科学中用于同步和互斥的一种抽象数据类型。在并发编程中&#xff…

集群聊天服务器项目【C++】项目介绍和环境搭建

前言&#xff1a;学习一个基于C集群聊天服务器的项目&#xff0c;记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…

感谢老美苦苦相逼,逼出华为鸿蒙PC

文&#xff5c;琥珀食酒社 作者 | 随风 哎&#xff0c;告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…