安装命令
# 安装 UnoCSS
npm install -D unocss
# 如果使用 Vue 3,还需要安装预设
npm install -D @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
配置步骤
1.创建uno.config.ts文件(项目根目录)
import { defineConfig } from 'unocss'
import presetUno from '@unocss/preset-uno'
import presetAttributify from '@unocss/preset-attributify'
import presetIcons from '@unocss/preset-icons'
export default defineConfig({
presets: [
presetUno(),
presetAttributify(),
presetIcons({
collections: {
// 可以配置图标集合
}
})
],
// 其他配置...
})
2.修改vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import UnoCSS from 'unocss/vite'
import path from 'path'
export default defineConfig({
plugins: [
vue(),
UnoCSS() // 添加 UnoCSS 插件
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
}
})
3.在main.ts中引入样式
import 'virtual:uno.css'
4.在index.html或者style.css中添加
/* 或者直接在 style.css 中 */
@import 'uno.css';
最新用法和文档
官方文档
-
官网:unocss.dev/
-
GitHub:github.com/unocss/unoc…
核心特性
- 原子化 CSS:按需生成,体积小
- 即时编译:开发时即时生成样式
- 预设系统:支持多个预设组合
- 图标支持:内置图标预设
常用预设
-
@unocss/preset-uno:默认预设(Tailwind 兼容)
-
@unocss/preset-attributify:属性化模式
-
@unocss/preset-icons:图标支持
-
@unocss/preset-typography:排版预设
-
@unocss/preset-web-fonts:Web 字体
使用示例
<template>
<!-- 原子化类名 -->
<div class="flex items-center justify-center p-4 bg-blue-500 text-white">
Hello UnoCSS
</div>
<!-- 属性化模式 -->
<div flex items-center p="4" bg="blue-500" text="white">
Hello UnoCSS
</div>
<!-- 图标 -->
<div class="i-carbon-sun" />
</template>
流程
# 1. 安装依赖
npm install -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
# 2. 创建 uno.config.ts(手动创建)
# 3. 修改 vite.config.ts(添加 UnoCSS 插件)
# 4. 在 main.ts 中引入 'virtual:uno.css'
Vue 3 + Vite + TypeScript + Element Plus,建议配置:
// uno.config.ts
import { defineConfig } from 'unocss'
import presetUno from '@unocss/preset-uno'
import presetIcons from '@unocss/preset-icons'
export default defineConfig({
presets: [
presetUno(),
presetIcons()
],
// 安全列表(确保某些类名不会被清除)
safelist: [],
// 快捷方式
shortcuts: {
'btn': 'px-4 py-2 rounded bg-blue-500 text-white hover:bg-blue-600'
}
})
UnoCss规范写法
一、UnoCss规范
- 解析规则:属性-数值,格式便于识别。
- 避免冲突:区分属性名和数值。
- 统一规范:与其他工具(如Tailwind)保持一致。
二、自定义可以不用字符串
除非是自定义用无连字符串,就要自己去定义css。
三、或者使用UnoCss的任意值
<!-- 使用任意值语法 -->
<div class="pt-[3rem] pb-[3rem] pl-[4rem] pr-[4rem]">内容</div>
再来讲解一下配置uno.config.ts(项目中常用)
核心特点
1.使用前缀(Prefix0)
presetUno({ prefix: "ly-" })
//所有UnoCss类名都需要加ly-前缀
//避免与其他css框架冲突
对比:
<!-- 没有前缀(默认) -->
<div class="p-4 bg-blue-500">内容</div>
<!-- 有前缀(这个配置) -->
<div class="ly-p-4 ly-bg-blue-500">内容</div>
2.Transfromers(转换器)
transformers: [
transformerDirectives(), // 指令转换器
transformerVariantGroup() // 变体组转换器
]
说明:
transformerDirectives:支持@apply指令
transformerVariantGroup:支持辩题组语法
使用示例:
<!-- transformerDirectives:支持 @apply -->
<style>
.custom {
@apply p-4 bg-blue-500;
}
</style>
<!-- transformerVariantGroup:支持变体组 -->
<div class="hover:(bg-blue-500 text-white)">
内容
</div>
3.快捷方式(Shortcuts)
shortcuts: {
"ly-common-border": "ly-border-1px ly-border-solid ly-border-#D6DCE1",
"ly-common-border-b": "ly-border-b-1px ly-border-b-solid ly-border-b-#D6DCE1",
"ly-bg-primary": "ly-bg-#F5F7FA",
"ly-tip-gray": "ly-bg-#F3F6F8 ly-rounded-8px ly-px-12px ly-py-7px ly-w-full ly-flex ly-items-center ly-gap-24px ly-text-14px ly-my-24px",
}
整体配置uno.config.ts
import { defineConfig, presetAttributify, presetUno, transformerDirectives, transformerVariantGroup } from "unocss";
export default defineConfig({
shortcuts: {
"ly-common-border": "ly-border-1px ly-border-solid ly-border-#D6DCE1",
"ly-common-border-b": "ly-border-b-1px ly-border-b-solid ly-border-b-#D6DCE1",
"ly-bg-primary": "ly-bg-#F5F7FA",
"ly-tip-gray":
"ly-bg-#F3F6F8 ly-rounded-8px ly-px-12px ly-py-7px ly-w-full ly-flex ly-items-center ly-gap-24px ly-text-14px ly-my-24px",
},
presets: [presetUno({ prefix: "ly-" })],
transformers: [transformerDirectives(), transformerVariantGroup()],
});
presetUno被弃用了.
弃用原因
UnoCSS(框架)
└── presetUno(预设,已重命名为 preset-wind3)
└── 提供 Tailwind CSS 兼容的工具类
UnoCSS(框架,继续使用)
├── preset-wind3(新名称,替代 presetUno)
├── preset-icons(图标预设)
├── preset-attributify(属性模式)
└── 其他预设...
1.重命名
@unocss/preset-uno → @unocss/preset-wind3
原因: 1.更清晰的命名 2.明确表示这是 Tailwind CSS/Windi CSS 的兼容预设 3.与 UnoCSS 的其他预设命名保持一致
如何迁移:
1.安装新包
npm install -D @unocss/preset-wind3
2.更新导入
// 旧写法(已弃用)
import presetUno from '@unocss/preset-uno'
// 新写法
import presetWind3 from '@unocss/preset-wind3'
3.更新配置
// 旧配置
import { defineConfig } from 'unocss'
import presetUno from '@unocss/preset-uno'
export default defineConfig({
presets: [
presetUno({ prefix: "ly-" })
]
})
// 新配置
import { defineConfig } from 'unocss'
import presetWind3 from '@unocss/preset-wind3'
export default defineConfig({
presets: [
presetWind3({ prefix: "ly-" })
]
})
更新配置之前与更新配置以后:
//更新之前
import { defineConfig, presetAttributify, presetUno, transformerDirectives, transformerVariantGroup } from "unocss";
export default defineConfig({
presets: [presetUno({ prefix: "ly-" })],
// ...
});
//更新之后
import { defineConfig, presetAttributify, presetWind3, transformerDirectives, transformerVariantGroup } from "unocss";
export default defineConfig({
presets: [presetWind3({ prefix: "ly-" })],
// ...
});
功能对比:
presetUno 与 presetWind3
- 功能相同:提供相同的工具类
- API 相同:配置方式完全一样
- 只是重命名:内部实现没有变化
使用方式
<!-- 使用方式完全一样 -->
<div class="ly-p-4 ly-bg-blue-500">内容</div>
迁移步骤:
1.安装新包
npm install -D @unocss/preset-wind3
2.更新导入
import presetWind3 from '@unocss/preset-wind3'
3.更新配置
presets: [presetWind3({ prefix: "ly-" })]
4.可选:移除旧包
npm uninstall @unocss/preset-uno