当前位置: 首页 > news >正文

Vite React项目引入unocss 及 @unocss/preset-icons的使用

文章目录

    • 安装相关npm包
    • 启用unocss
    • 重中之重!!!
    • 网上大部分的教程都没有指出来!!!
    • 一定要在全局引入unocss的样式文件 !!!
    • 一定要在全局引入unocss的样式文件 !!!
    • 一定要在全局引入unocss的样式文件 !!!
    • 创建unocss 配置文件 uno.config.ts
    • 使用svg图标

安装相关npm包

pnpm add -D unocss @unocss/preset-icons @iconify/utils

启用unocss

// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import unocss from "unocss/vite";export default defineConfig({plugins: [react(),unocss()]
});

重中之重!!!

网上大部分的教程都没有指出来!!!

一定要在全局引入unocss的样式文件 !!!

一定要在全局引入unocss的样式文件 !!!

一定要在全局引入unocss的样式文件 !!!

import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import 'virtual:uno.css';createRoot(document.getElementById('root')!).render(<App />)

创建unocss 配置文件 uno.config.ts

// uno.config.ts
import {defineConfig,presetAttributify,presetIcons,presetTypography,presetWind3,presetWebFonts,transformerDirectives,transformerVariantGroup,
} from "unocss";import { FileSystemIconLoader } from "@iconify/utils/lib/loader/node-loaders";
import fs from "fs";// 本地SVG图标目录
const iconsDir = "./src/assets/icons";// 读取本地 SVG 目录,自动生成 safelist
const generateSafeList = () => {try {return fs.readdirSync(iconsDir).filter((file) => file.endsWith(".svg")).map((file) => `i-svg:${file.replace(".svg", "")}`);} catch (error) {console.error("无法读取图标目录:", error);return [];}
};export default defineConfig({// 自定义快捷类shortcuts: {"wh-full": "w-full h-full","flex-center": "flex justify-center items-center","flex-x-center": "flex justify-center","flex-y-center": "flex items-center","flex-x-start": "flex items-center justify-start","flex-x-between": "flex items-center justify-between","flex-x-end": "flex items-center justify-end",},theme: {colors: {primary: "var(--el-color-primary)",primary_dark: "var(--el-color-primary-light-5)",},breakpoints: Object.fromEntries([640, 768, 1024, 1280, 1536, 1920, 2560].map((size, index) => [["sm", "md", "lg", "xl", "2xl", "3xl", "4xl"][index],`${size}px`,])),},presets: [presetWind3(),presetAttributify(),presetIcons({// 额外属性extraProperties: {display: "inline-block",width: "1em",height: "1em",},// 图表集合collections: {// svg 是图标集合名称,使用 `i-svg:图标名` 调用svg: FileSystemIconLoader(iconsDir, (svg) => {// 如果 `fill` 没有定义,则添加 `fill="currentColor"`return svg.includes('fill="')? svg: svg.replace(/^<svg /, '<svg fill="currentColor" ');}),},}),presetTypography(),presetWebFonts({fonts: {// ...},}),],safelist: generateSafeList(),transformers: [transformerDirectives(), transformerVariantGroup()],
});

使用svg图标

下载的svg文件,放在src\assets\icons\add.svg
在这里插入图片描述

<div className="i-svg:add w-[10px] h-[10px]"></div>
http://www.dtcms.com/a/321002.html

相关文章:

  • Mac安装python、conda环境教程
  • 相机坐标系与世界坐标系的点相互转换:原理、可视化与实践
  • Spring MVC REST API设计详解:从零构建高效接口
  • 2025 TexLive+VScode排版IEEE TGRS论文
  • 使用 Gulp 替换 XML 文件内容
  • SpringMVC(四)
  • 跨平台音乐管理新方案:Melody如何实现一站式音源整合
  • 设计模式(二)——策略模式
  • MySQL 索引详细说明
  • 12. 消息队列-RabbitMQ
  • 行业速览:中国新能源汽车市场格局与关键趋势
  • 【LLM实战】RAG初体验,两种实现方式
  • wstool的一个完整的工作流解析
  • 安全合规1--实验:ARP欺骗、mac洪水攻击、ICMP攻击、TCP SYN Flood攻击
  • 【Day 19】Linux-网站操作
  • mac笔记本如何重新设置ssh key
  • 使用 ECharts GL 实现 3D 中国地图点位飞线效果
  • GoLand 项目从 0 到 1:第六天 —— 权限接口开发与问题攻坚
  • 笔试——Day32
  • pycharm常见环境配置和快捷键
  • 微软XBOX游戏部门大裁员
  • vue项目常见BUG和优化注意事项
  • HTTP 请求返回状态码和具体含义?200、400、403、404、502、503、504等
  • OpenBMC中libgpio架构与驱动交互全解析:从硬件映射到应用控制
  • 智能厨具机器人的革命性升级:Deepoc具身模型外拓板技术解析
  • 【Rust】多级目录模块化集成测试——以Cucumber为例
  • 服务器登上去,显示 failed to send WATCHDOG 重启有效吗?
  • 当服务器多了时,如何管理?
  • 机柜内部除了服务器还有哪些组件?
  • 防火墙概述