bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十四)

231 阅读5分钟

UnoCSS使用指南

等级: 进阶 | 阅读时间: 6分钟

前言

UnoCSS 是一个强大的原子 CSS 引擎,集成在 Robot_Admin 项目中,提供以实用为先的样式、属性化模式和图标功能。本文档将指导你如何配置 UnoCSS 以及如何在组件中有效使用它。


🚀 核心特性

该项目中的 UnoCSS 配置了以下几个关键特性:

  • ✅ 通过 presetWind3 实现实用为先的 CSS(类似于 Tailwind)
  • 属性化模式,允许基于属性的样式设置
  • ✅ 与 Material Design Icons 集成的图标功能
  • ✅ 常用实用组合的自定义快捷方式
  • ✅ 用于直接 CSS 操作的指令转换器

📝 参考资料:unocss.config.ts


🛠️ 基本设置

UnoCSS 在项目的入口文件中全局导入:

// 来自 main.ts
import 'virtual:uno.css'

此导入包含了所有 UnoCSS 功能,包括实用类、属性化模式和图标。

📝 参考资料:main.ts#L13


⚙️ 配置说明

UnoCSS 配置定义了可用的实用类、快捷方式和安全列表项。让我们探讨主要的配置选项:

// unocss.config.ts
export default defineConfig({
  presets: [
    presetWind3(),
    presetAttributify(),
    presetIcons({
      scale: 1.2,
      warn: true,
      extraProperties: {
        display: 'inline-block',
        'vertical-align': 'middle',
      },
    }),
  ],
  transformers: [transformerDirectives()],
  shortcuts: shortcutsArr,
  safelist: iconSafelist,
})

📝 参考资料:unocss.config.ts#L22-L38


🎯 自定义快捷方式

快捷方式是预定义的实用类组合,创建可重用的模式。项目在 shortcuts-arr.ts 中定义了自定义快捷方式:

export const shortcutsArr = {
  // HACK: 01-icon
  'icon-container': 'flex flex-wrap items-center w-full',
  'icon-container-item':
    'w-1/5 flex flex-col justify-center items-center mb-8 cursor-pointer transition-all duration-300 hover:rounded hover:opacity-60 hover:scale-120 box-border',
  'icon-container-item-info': 'mt-2',
}

使用快捷方式

你可以在组件中直接使用这些快捷方式:

<div class="icon-container">
  <div class="icon-container-item">
    <!-- 图标内容 -->
    <div class="icon-container-item-info">标签</div>
  </div>
</div>

📝 参考资料:shortcuts-arr.ts#L11-L17


📝 TypeScript 集成

UnoCSS 包含 TypeScript 定义,为实用类提供自动补全和类型检查。项目通过自定义快捷方式扩展了这些定义:

declare module 'unocss' {
  interface UserShortcuts {
    /** 垂直居中的 flex 布局 */
    'flex-col-center': string
    /** 标题文本样式 */
    'text-header': string
    /** 按钮基础样式 */
    btn: string
    /** 水平垂直居中的 flex 布局 */
    'flex-center': string
 
    // 可以继续添加其他自定义快捷方式
  }
}

📝 参考资料:unocss.d.ts#L23-L36


🎨 图标使用指南

Robot_Admin 中的 UnoCSS 通过 presetIcons 集成为使用图标提供了强大的方式。项目主要使用 Material Design Icons (MDI)

图标安全列表

为确保图标在生产构建过程中不被树摇移除,项目使用图标安全列表:

export const iconSafelist = [
  // 原有动态生成的图标
  ...Object.entries(IconsIconifyMdi.chars)
    .slice(0, 100)
    .map(([, name]) => `i-mdi:${name}`),
 
  // 新增静态图标类名
  'i-mdi:home-assistant',
  'i-mdi:monitor-dashboard',
  // ... 更多图标
]

📝 参考资料:icon-safelist.ts#L15-L68

在组件中使用图标

在项目中使用图标主要有两种方式:

方式一:直接使用 UnoCSS 类

使用 i-mdi: 前缀后跟图标名称:

<div class="i-mdi:home text-24 text-blue-500"></div>

这将渲染一个大小为 24px、颜色为蓝色的主页图标。

方式二:使用自定义图标组件

项目包含一个与 UnoCSS 集成的自定义 C_Icon 组件:

<C_Icon type="unocss" name="i-mdi-home" size="24" color="#42b883" />

使用示例:

<!-- UnoCSS 图标需要指定 type -->
<C_Icon type="unocss" name="i-mdi-home" />
<C_Icon type="unocss" name="i-mdi-settings" size="24" />
<C_Icon type="unocss" name="i-mdi-user" color="#42b883" size="32" />
 
<!-- 支持交互 -->
<C_Icon type="unocss" name="i-mdi-heart" clickable @click="handleClick" />

📝 参考资料:data.ts#L53-L59


📚 实用类使用

UnoCSS 提供了类似于 Tailwind CSS 的广泛实用类。以下是一些常见的使用模式:

布局

<!-- Flex 布局 -->
<div class="flex flex-col gap-4">
  <div class="flex items-center justify-between">
    <!-- 内容 -->
  </div>
</div>
 
<!-- Grid 布局 -->
<div class="grid grid-cols-3 gap-4">
  <!-- Grid 项目 -->
</div>

间距

<!-- 外边距和内边距 -->
<div class="m-4 p-6">
  <div class="mt-2 px-4">
    <!-- 带有顶部外边距和水平内边距的内容 -->
  </div>
</div>

排版

<!-- 文本样式 -->
<h1 class="text-2xl font-bold text-gray-900">标题</h1>
<p class="text-base text-gray-700">普通段落文本</p>

颜色

<!-- 背景和文本颜色 -->
<div class="bg-blue-500 text-white">
  蓝色背景配白色文本
</div>

交互状态

<!-- 悬停、聚焦和其他状态 -->
<button class="bg-blue-500 hover:bg-blue-600 focus:ring-2 focus:ring-blue-300">
  按钮
</button>

🎭 属性化模式

项目通过 presetAttributify() 启用属性化模式,允许你使用属性而不是类进行样式设置:

传统方式 vs 属性化模式

<!-- 使用常规类 -->
<div class="flex items-center justify-between p-4 bg-gray-100">
  <!-- 内容 -->
</div>
 
<!-- 使用属性化模式 -->
<div 
  flex
  items-center
  justify-between
  p="4"
  bg="gray-100"
>
  <!-- 内容 -->
</div>

这可以使你的标记更干净、更易读,尤其是在样式复杂的情况下。


💡 最佳实践

1. 使用快捷方式处理常见模式

  • shortcuts-arr.ts 中为常用的实用组合创建快捷方式

2. 将图标添加到安全列表

  • 如果动态使用图标,将其添加到 icon-safelist.ts 的安全列表中

3. 必要时与 SCSS 结合使用

  • UnoCSS 可以与 SCSS 一起使用,以满足更复杂的样式需求

4. 利用属性化模式获得更干净的标记

  • 对于具有许多样式属性的组件,使用基于属性的样式设置

5. 考虑组件抽象

  • 对于复杂的 UnoCSS 模式,创建一个 Vue 组件来封装样式

🔧 故障排除

如果 UnoCSS 类未应用,请检查以下几点:

  1. ✅ 检查 virtual:uno.css 是否在主入口文件中导入
  2. ✅ 验证类名是否符合 UnoCSS 语法
  3. ✅ 对于动态类,确保它们在安全列表中
  4. ✅ 检查浏览器控制台是否有任何 UnoCSS 警告或错误

📖 总结

遵循这些指南,你将能够在组件中有效使用 UnoCSS,从而在整个 Robot_Admin 项目中创建一致且可维护的 UI 样式。

UnoCSS 的强大之处在于其灵活性和性能,通过合理的配置和使用,可以大大提升开发效率和代码可维护性。


如果这篇文章对你有帮助,请点赞👍和收藏⭐️支持一下!

期待共建!

如果这套组件系统对你的开发工作有所启发或帮助,请不要吝啬你的 Star!每一个 ⭐ 都是对我最大的鼓励和支持。

👉 点击这里 Star 支持项目 (🧧行大运摸大票💰)

🔗 探索更多资源

📋 资源类型🔗 链接📝 说明
🎯 在线预览robotadmin.cn体验完整功能演示
📚 详细文档tzagileteam.com深入了解实现细节
💻 源码仓库https:/github.com/ChenyCHENYU/Robot_Admin获取完整源代码

非常期待听到你的想法!