
UI 库 Bootstrap 很早就在提供大量原子化 CSS 工具类。不过在应用开发中,由于原子化 CSS 自身的劣势——原子类的编写缺少提示、原子类的定义使 CSS 最终产物膨胀、原子类的大量堆叠降低 html 的可读性,语义化 CSS 逐渐成为了主流,原子 CSS 慢慢被边缘化,成为一种辅助的手段。
现代的原子化 CSS 方案——Tailwind CSS、Windi CSS、UnoCSS,之所以将原子化 CSS 方案再度推向高潮,是因为其解决了上述的三大痛点:
@apply 语法支持在 CSS 中对多个原子类进行合并,与语义化 CSS 实现了很好的配合。UnoCSS 和 Tailwind CSS 有一些区别和特点:

按需生成


性能

从结果来看,UnoCSS 可以比 Tailwind 的 JIT 引擎快 200 倍!说实话,在按需生成的情况下,Windi 和 Tailwind JIT 都已经算是超快了,UnoCSS 的性能提升感知度可能没有那么高。然而,几乎为零的开销意味着你可以将 UnoCSS 整合到你现有的项目中,作为一个增量解决方案与其他框架一同协作,而不需要担心性能损耗。


# 安装unocss和三个预设,第一个是工具类预设,第二个是属性化模式支持,第三个是icon支持
npm i -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
# or
yarn add -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
# or
pnpm i -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 引入Unocss
import Unocss from 'unocss/vite';
import { presetUno, presetAttributify, presetIcons } from 'unocss'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
Unocss({ // 使用Unocss
presets: [
presetUno(),
presetAttributify(),
presetIcons()],
})
]
})
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import 'uno.css' // focus code
createApp(App).mount('#app')

// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import Unocss from "unocss/vite";
import { presetUno, presetAttributify, presetIcons } from "unocss";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
Unocss({
presets: [presetUno(), presetAttributify(), presetIcons()],
rules:[
['m-1', { margin: '1px' }] // 这里可以自定义
]
}),
],
});

可以通过配置使用Webpack打包Unocss,这里就不详细展开啦
使用风险:UnoCSS 仍处于实验阶段,但由于其精简的设计,生成的结果已经非常可靠了。需要注意的一点是,API 还没有最终定案,虽然我们会遵循 semver 的进行版本发布,但是还请为破坏性改动做好准备。