在 Vue 3 + TS + Vite + TSX 项目中配置 UnoCSS
以下是给你的 Vue 3 + TypeScript + Vite + TSX 项目添加 UnoCSS 支持的完整步骤:
1. 安装 UnoCSS 及其相关依赖
bash
npm install -D unocss @unocss/reset @unocss/vite
2. 配置 vite.config.ts
修改你的 vite.config.ts
文件:
typescript
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import UnoCSS from 'unocss/vite'
export default defineConfig({
plugins: [
vue(),
vueJsx(),
UnoCSS(), // 添加 UnoCSS 插件
],
})
3. 创建 UnoCSS 配置文件
在项目根目录创建 uno.config.ts
文件:
typescript
import { defineConfig, presetAttributify, presetUno, presetIcons } from 'unocss'
export default defineConfig({
presets: [
presetUno(), // 默认预设
presetAttributify(), // 属性化模式支持
presetIcons(), // 图标支持(可选)
],
// 自定义规则
rules: [
['m-1', { margin: '0.25rem' }],
// 添加你的自定义规则...
],
// 快捷方式
shortcuts: {
'btn': 'py-2 px-4 font-semibold rounded-lg shadow-md',
'btn-green': 'text-white bg-green-500 hover:bg-green-700',
// 添加你的快捷方式...
},
// 主题
theme: {
colors: {
primary: 'var(--color-primary)',
secondary: 'var(--color-secondary)',
// 添加你的主题颜色...
},
fontFamily: {
// 添加字体
JetBrains: 'JetBrains',
},
}
})
4. 添加 UnoCSS 重置样式
在 main.ts
或 main.js
中导入 UnoCSS 重置样式:
typescript
import '@unocss/reset/tailwind.css' // 可以使用其他重置样式,如 normalize.css
import 'uno.css'
5. 配置 TSX 支持 UnoCSS(可不配置)
确保你的 tsconfig.json
包含以下配置:
json
{
"compilerOptions": {
"types": ["unocss/types/global"]
}
}
6. 在组件中使用 UnoCSS
在 .vue
文件中使用:
vue
<template>
<div class="p-4 bg-blue-500 text-white rounded">
UnoCSS in Vue SFC
</div>
</template>
在 .tsx
文件中使用:
typescript
import { defineComponent } from 'vue'
export default defineComponent({
setup() {
return () => (
<div class="p-4 bg-red-500 text-white rounded">
UnoCSS in TSX
</div>
)
}
})
7. 可选:配置 VS Code 智能提示
安装 VS Code 的 UnoCSS 扩展
或者在项目根目录创建 .vscode/settings.json
:
json
{
"unocss.root": ".",
"unocss.include": [
"**/*.vue",
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.jsx"
]
}
8. 运行项目
bash
npm run dev
额外配置(按需选择)
图标支持
- 安装图标依赖:
bash
npm install -D @iconify/json
- 在
uno.config.ts
中配置:
typescript
import presetIcons from '@unocss/preset-icons'
export default defineConfig({
presets: [
presetIcons({
scale: 1.2,
warn: true,
// 其他选项...
}),
// 其他预设...
]
})
动画支持
bash
npm install -D @unocss/preset-wind
然后在 uno.config.ts
中使用 presetWind
替代 presetUno
。
注意事项
-
UnoCSS 的类名优先级可能与现有 CSS 冲突,可以通过调整
uno.config.ts
中的layers
配置解决 -
生产构建时,UnoCSS 会自动提取使用的工具类,无需额外配置
-
如果遇到类名不生效的问题,检查文件是否被包含在扫描范围内
-
对于动态类名,可以使用
class
绑定或class
属性(在 TSX 中)
现在你的项目已经完整支持 UnoCSS 了,可以在 Vue SFC 和 TSX 文件中使用原子化 CSS 工具类了!