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

news2024/11/13 11:08:11

系列文章目录

  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.coloradmin.cn/o/2149280.html

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

相关文章

Debian 12上安装google chrome

当前系统&#xff1a;Debian 12.7 昨天在Debian 12.7上安装Google Chrome时&#xff0c;可能由于网络原因&#xff0c;导入公钥始终失败。 导致无法正常使用命令#apt install google-chrome-stable来安装google chrome; 解决办法&#xff1a; Step1.下载当前google chrome稳…

C++性能优化-代码角度

减少跳转/分支语句和函数调用 原因 分支语句&#xff1a;当 CPU 执行到分支语句时&#xff0c;将会进行分支预测&#xff08;对大部分PC&#xff09;。如果分支预测错误&#xff0c;就会清空已经预取和执行的部分指令&#xff0c;重新从正确的分支开始取指和执行&#xff0c;…

某东-h5st参数逆向分析

目标&#xff1a;商品搜索翻页接口 直接搜索h5st就可以搜到&#xff0c;所有可疑位置都打上断点&#xff0c;然后翻页&#xff0c;最终断点位置&#xff1a; window.PSign.sign(colorParamSign)是异步代码&#xff0c;colorParamSign是传入的参数&#xff0c;执行后把包含h5st…

基于YOLOv5的教室人数检测统计系统

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量&#xff0c;适用于多种应用场景&#xff0c;比如 自动考勤、安全监控或空间利用分析 以下是如何构建这样一个系统的概述&#xff0c;包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入…

【机器学习】--- 序列建模与变分自编码器(VAE)

在机器学习领域&#xff0c;序列建模与变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09; 是两个至关重要的技术&#xff0c;它们在处理时间依赖性数据与复杂数据生成任务中都发挥着关键作用。序列建模通常用于自然语言处理、语音识别等需要保持顺序关系的任务…

【老板必看!】电脑怎么看使用软件时间记录?一文读懂5种超实用的方法!

在企业管理中&#xff0c;电脑虽不善言语、不会说话&#xff0c;但会留下无数线索&#xff0c;就像一场未解之谜&#xff0c;等待着各位福尔摩斯得到来&#xff0c;去揭开它的秘密面纱。 你是否曾好奇过&#xff0c;当你不在的时候&#xff0c;员工都在用电脑都在忙些什么&…

基于python+django+vue的影视推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的影…

大表数据如何在OceanBase中进行表分区管理的实践

背景 将Zabbix的数据库迁移至OceanBase后&#xff0c;以其中的几个大表作为案例&#xff0c;本文将分享如何利用ODC&#xff08;OceanBase 开发者工具&#xff09;&#xff0c;来进行自动管理OB数据库中的表分区的方案。 因为原始表里已经有大量的数据&#xff0c;如果贸然对…

快速掌握Postman接口测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器 描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中&#xff0c;并例化。 优先编码器Ⅰ的代码如下&#xff1a; module…

BERT模型解读与简单任务实现(论文复现)

BERT模型解读与简单任务实现&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 概述 相关背景 语言模型&#xff1a;语言模型是指对于任意的词序列&#xff0c;它能够计算出这个序列是一句话的概率。 预训练&#xff1a;预训练是一种迁移学习的概念…

c++类和对象(6个默认成员函数)第二级中阶

目录 6个默认成员函数介绍 构造函数 构造函数是什么&#xff1f; 构造函数的6种特性 析构函数 析构函数是什么&#xff1f; 析构函数的特性 拷贝构造函数 什么是拷贝构造函数 拷贝函数的特性 四.默认生成的拷贝构造实行的是浅拷贝&#xff08;值拷贝&#xff09;&am…

【2024】前端学习笔记9-内部样式表-外部导入样式表-类选择器

学习笔记 内部样式表外部导入样式表类选择器&#xff1a;class 内部样式表 内部样式表是将 CSS 样式规则写在 HTML 文档内部。通过<style>标签在 HTML 文件的<head>部分定义样式。 简单示例&#xff1a; <!DOCTYPE html><html><head><style…

【linux】基础IO(上)

1. 共识原理 文件 内容 属性文件分为 打开的文件 没打开的文件打开的文件 &#xff1a; 是进程打开的 ----- 本质是要研究文件和进程的关系没打开的文件 &#xff1a; 没打开的文件储存在磁盘上&#xff0c;由于没打开的文件很多&#xff0c;所以需要分门别类的防止好&…

常用函数式接口的使用

FunctionalInterface注解 函数式接口在java中是指:有且仅有一个抽象方法的接口。 虽然知道怎么使用&#xff0c;但是没有搞懂使用场景&#xff0c;暂且记录下使用方法吧&#xff0c;不至于看到源码的时候不知所云。 要我自己写代码&#xff0c;我是想不起来这样用的&#xff0…

YOLOv9改进策略【注意力机制篇】| 2024 SCSA-CBAM 空间和通道的协同注意模块

一、本文介绍 本文记录的是基于SCSA-CBAM注意力模块的YOLOv9目标检测改进方法研究。现有注意力方法在空间-通道协同方面未充分挖掘其潜力&#xff0c;缺乏对多语义信息的充分利用来引导特征和缓解语义差异。SCSA-CBAM注意力模块构建一个空间-通道协同机制&#xff0c;使空间注…

C语言 结构体和共用体——典型实例:洗发牌模拟

目录 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如何模拟洗牌&#xff1f; 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如…

窗户检测系统源码分享

窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

十大常用加密软件排行榜|2024年好用的加密软件推荐(企业必备)

在数字化时代&#xff0c;数据安全已经成为企业生存和发展的关键因素之一。随着网络攻击和数据泄露事件的频发&#xff0c;企业对数据加密的需求日益增长。选择一款可靠的加密软件&#xff0c;不仅能保护企业的核心数据&#xff0c;还能确保业务的连续性和合规性。本文将为您介…

Stable Diffusion 使用详解(11)--- 场景ICON制作

目录 背景 controlNet 整体描述 Canny Lineart Depth 实际使用 AI绘制需求 绘制过程 PS打底 场景模型选择 设置提示词及绘制参数 controlnet 设置 canny 边缘 depth 深度 lineart 线稿 效果 背景 这段时间不知道为啥小伙伴似乎喜欢制作很符合自己场景的ICON。…