UnoCSS 主包 unocss 完全指南:instant on-demand 原子化 CSS 引擎的聚合入口、特性与全生态集成实战
2026/9/13 17:41:41 网站建设 项目流程

UnoCSS 主包 unocss 完全指南:instant on-demand 原子化 CSS 引擎的聚合入口、特性与全生态集成实战

【免费下载链接】unocssThe instant on-demand atomic CSS engine.项目地址: https://gitcode.com/GitHub_Trending/un/unocss

UnoCSS 是一款即时按需生成的原子化 CSS 引擎(instant on-demand Atomic CSS engine),其官方发布的主包unocss是一个面向最终用户的聚合包(meta package):它一次性打包了核心引擎、全部官方预设与转换器,并对外暴露 Vite、Nuxt、Astro、Webpack、PostCSS、CLI、CDN Runtime 等各集成入口。本文将基于本仓库中 packages-presets/unocss/README.md 与对应源码,系统讲解unocss包的设计定位、核心特性、安装接入方式与真实配置示例,读完你即可在自己的项目里落地这套按需原子化 CSS 方案。

一、unocss 是什么:聚合包背后的设计哲学

在 npm 生态中,unocss(本仓库对应目录 packages-presets/unocss,版本 66.10.0,见 package.json)是 UnoCSS 面向最终用户的唯一入口包。其description正是官方对项目本身的定位:"The instant on-demand Atomic CSS engine."——一个即时、按需生成的原子化 CSS 引擎。

它的设计理念可以从两个层面理解:

  • “无核心工具类(no core utilities)”:与 Tailwind 等把大量工具类硬编码进框架不同,UnoCSS 默认不内置任何工具类,所有功能全部通过**预设(presets)**提供。因此它是"完全可定制"的——你可以只启用需要的预设,甚至完全自定义规则。相关配置体系见 docs/config/index.md 与 docs/guide/config-file.md。
  • “不解析、不构建 AST、不扫描(No parsing, no AST, no scanning)”:UnoCSS 通过极轻量的正则匹配从源码中抽取工具类 token,规避了传统 CSS 框架生成时的解析开销,从而获得极快的构建速度。

从包结构看,聚合包的职责非常清晰。以 src/index.ts 为例,它集中完成了三件事:

  1. export * from '@unocss/core'转出核心引擎 API;
  2. 批量转出全部官方预设:presetUnopresetWindpresetWind3presetWind4presetMinipresetAttributifypresetIconspresetTagifypresetTypographypresetWebFonts
  3. 批量转出官方转换器:transformerAttributifyJsxtransformerCompileClasstransformerDirectivestransformerVariantGroup

同时 package.json 的exports字段暴露了./vite./astro./postcss./webpack./rollup./rolldown以及./preset-*等子路径入口,dependencies则聚合了@unocss/core@unocss/vite@unocss/cli及各 preset/transformer 工作区包。也就是说,用户只需安装一个unocss,即可获得整套生态。

二、核心特性逐一拆解

README 中列举了该引擎最受关注的特性。以下逐条结合本仓库源码与文档说明其实质与用法。

1. 完全可定制:一切皆预设

UnoCSS 没有核心工具类,规则、变体、主题、快捷方式全部通过预设与配置注入。官方提供了presetUnopresetWind3presetWind4presetMini等工具类预设,以及presetIconspresetAttributifypresetWebFontspresetTypographypresetTagify等能力预设,详见 docs/config/presets.md 与 docs/guide/presets.md。

2. INSTANT:即时的性能表现

官方 README 声称其速度是 Windi CSS 或 Tailwind JIT 的5 倍,且包体仅约6kb(min+brotli)、零依赖、对浏览器友好。这些数字来自项目官方自述,其根基在于"无解析、无 AST、无扫描"的极简匹配模型。仓库中 bench 目录保留了与 Tailwind CSS、Windi CSS 的基准对比用例(fixtures 与历次 results 记录),可供读者自行复现验证。

3. Shortcuts:动态别名工具类

通过shortcuts配置可以把一组工具类合并为一个语义化名称,并且支持动态规则。例如将flex items-center定义为center,还可用函数式写法按参数生成组合。完整配置说明见 docs/config/shortcuts.md。

4. Attributify 模式:把工具类写进属性

在 HTML/Vue 中可以用属性(attributes)来分组工具类,例如:

<div flex justify-center items-center>

Attributify 模式允许将其改写为属性形式flex justify-center items-center的分散写法。实现位于 packages-presets/preset-attributify,配套说明见 docs/presets/attributify.md。

5. Pure CSS Icons:一个类名即可使用任意图标

presetIcons让你把任意图标集当作单个类使用,例如i-carbon-search即可输出对应图标的纯 CSS(以 mask/background 方式渲染),无需引入字体或组件。实现见 packages-presets/preset-icons,说明见 docs/presets/icons.md。

6. Variant Groups:公共前缀的简写

把共享前缀的工具类分组书写,例如把hover:bg-gray-100 hover:text-black写成hover:(bg-gray-100 text-black)。实现位于 packages-presets/transformer-variant-group,说明见 docs/transformers/variant-group.md。

7. CSS Directives:在 CSS 中复用工具类

通过@apply指令在 CSS 文件里直接引用工具类,例如:

.btn { @apply px-4 py-2 rounded bg-blue-500 text-white; }

实现位于 packages-presets/transformer-directives,说明见 docs/transformers/directives.md。此外该转换器还支持@screen等指令。

8. Compilation 模式:构建期把多个类合成一个

transformerCompileClass可在构建时把多个工具类合并为一个自定义类名,显著减小 HTML 体积,适合对产物体积敏感的 MPA/SSR 场景。实现见 packages-presets/transformer-compile-class,说明见 docs/transformers/compile-class.md。

9. Inspector:交互式检查与调试

官方提供可视化 Inspector 面板,可实时查看每个工具类生成的 CSS、规则命中情况与耗时统计。实现位于 packages-integrations/inspector(Vue 3 + Vite 构建的客户端),使用说明见 docs/tools/inspector.md,仓库内还有 examples/inspector-vite 与 examples/inspector-next 两个可直接运行的示例。

10. CSS-in-JS Runtime 构建:一行 CDN 引入

通过 packages-integrations/runtime 提供的运行时方案,只需一行 CDN 引入即可在纯浏览器环境(无构建工具)中使用 UnoCSS,详见 docs/integrations/runtime.md。

11. VS Code 扩展

官方 VS Code 扩展提供工具类补全、悬停预览与检查功能,源码位于 packages-integrations/vscode,接入说明见 docs/integrations/vscode.md。

12. CSS 代码分割:为 MPA 输出最小化 CSS

在 Vite 等构建集成中,UnoCSS 针对多页面应用(MPA)做 CSS 代码分割,每个页面只输出其实际使用到的样式,避免首屏加载无关样式。相关机制说明见 docs/integrations/vite.md。

三、安装与集成:八大接入方式

unocss聚合包官方提供以下集成路径(对应 README 的 Installation 列表,各集成说明见 docs/integrations/index.md):

集成方式使用场景仓库依据
ViteVite 构建的项目,最主流接入方式examples/inspector-vite/vite.config.ts、packages-integrations/vite
NuxtNuxt 3/4 应用examples/nuxt3/nuxt.config.ts、packages-integrations/nuxt
AstroAstro 站点examples/astro/astro.config.ts、packages-integrations/astro
WebpackWebpack 构建的项目packages-integrations/webpack
CDN Runtime无构建工具、一行 CDN 引入packages-integrations/runtime
CLI命令行生成 CSS,配合任意构建流程packages-engine/cli
VS Code 扩展编辑器内的补全与检查packages-integrations/vscode
ESLint代码规范与静态检查packages-integrations/eslint-config、packages-integrations/eslint-plugin
PostCSS通过 PostCSS 管道接入packages-integrations/postcss

Vite 接入示例(最常用)

以 Vite 为例,安装后在vite.config.ts中注册插件即可:

// vite.config.ts import UnoCSS from 'unocss/vite' export default { plugins: [ UnoCSS(), ], }

从 src/vite.ts 源码可以看到,unocss/vite的默认导出在转发给@unocss/vite时会自动注入presetWind3()作为默认预设

export default function UnocssVitePlugin(configOrPath?) { return VitePlugin(configOrPath, { presets: [presetWind3()], }) }

也就是说,即便你不配置任何预设,Vite 接入后也能直接使用presetWind3提供的工具类语法。同理,src/astro.ts(Astro 集成)与src/rollup.ts(Rollup/Rolldown 集成)默认同样注入presetWind3(),而src/webpack.ts(Webpack 集成)默认注入的是presetUno()。这一"开箱即用默认预设"的设计,正是聚合包降低上手成本的关键细节。

四、真实配置文件示例:defineConfig 与预设组合

聚合包在 src/index.ts 中提供了类型安全的defineConfig辅助函数:

export function defineConfig<T extends object = Theme>(config: UserConfig<T>) { return config }

它与@unocss/coreUserConfig类型配合,让配置文件获得完整的类型提示。本仓库自身的 docs/uno.config.ts 就是一个可直接参考的真实示例:

import { defineConfig, presetAttributify, presetIcons, presetWind4, transformerDirectives } from 'unocss' export default defineConfig({ theme: { animation: { keyframes: { custom: '{0%, 100% { transform: scale(0.5); } 50% { transform: scale(1); }}', }, durations: { custom: '2s' }, timingFns: { custom: 'cubic-bezier(0.4,0,.6,1)' }, properties: { custom: { 'transform-origin': 'center' } }, counts: { custom: 'infinite' }, }, }, presets: [ presetWind4(), presetIcons(), presetAttributify(), ], transformers: [ transformerDirectives(), ], })

这段配置演示了几个关键点:

  • 预设组合:同时启用presetWind4(Wind 4 语法工具类)、presetIcons(图标)、presetAttributify(属性模式);
  • Transformer 编排:通过transformerDirectives()开启@apply等 CSS 指令能力;
  • 主题扩展:在theme.animation下自定义 keyframes、时长、缓动函数、属性和循环次数,为animate-custom这类工具类提供数据源。

更多配置项(rules、variants、shortcuts、safelist、layers、extractors、processors)分别见 docs/config/rules.md、docs/config/variants.md、docs/config/shortcuts.md、docs/config/safelist.md、docs/config/layers.md 与 docs/config/extractors.md。

五、生态全景:预设、转换器与包布局

作为聚合包,unocss依赖并汇总了本仓库packages-presetspackages-integrations两大目录下的全部核心模块:

  • 工具类预设:preset-mini(基础原子预设)、preset-uno(Uno 预设)、preset-wind3(兼容 Windi CSS 语法的 Wind 3)、preset-wind4(Tailwind CSS v4 风格语法);
  • 能力预设:preset-attributify、preset-icons、preset-tagify、preset-typography、preset-web-fonts;
  • 转换器:transformer-attributify-jsx、transformer-compile-class、transformer-directives、transformer-variant-group;
  • 构建集成:packages-integrations/vite、packages-integrations/rollup、packages-integrations/webpack、packages-integrations/postcss、packages-integrations/astro、packages-integrations/nuxt、packages-integrations/svelte-scoped 等;
  • 工具链:packages-integrations/inspector、packages-integrations/language-server、packages-integrations/vscode、packages-integrations/eslint-config 与 packages-integrations/eslint-plugin;
  • 引擎与 CLI:packages-engine/core(核心引擎与类型)、packages-engine/cli、packages-engine/autocomplete(工具类自动补全)、packages-engine/config。

各预设与转换器的独立用法与配置项,可继续阅读 packages-presets/README.md 及各子包的 README。

六、设计溯源与许可

UnoCSS 的诞生受到多个原子化 CSS 先行者的启发,README 的 Acknowledgement 部分明确致谢了以下项目(按字母序):ACSS、Bootstrap Utilities、Chakra UI Style Props、Semantic UI、Tachyons、Tailwind CSS、Twind 与 Windi CSS。其核心"按需生成、不扫描 AST、极致轻量"的取舍,正是针对这些方案在产物体积与构建速度上的不足而设计。

本包遵循MIT协议(见 LICENSE),README 中标明 © 2021-PRESENT Anthony Fu。UnoCSS 的完整官方文档、交互式文档、在线 Playground 与教程均可在其官网获得;在本仓库内,docs/index.md 是文档的本地入口,playground 目录提供了可在浏览器中运行的在线体验实现。

七、总结

unocss聚合包以"一切皆预设、即时按需生成"为核心,通过一个安装包即可覆盖从 Vite/Nuxt/Astro/Webpack 等构建集成,到 CLI/PostCSS/运行时/CDN 等轻量方案,再到 VS Code、ESLint、Inspector 等开发工具链的完整生态。理解其"默认预设注入""零核心工具类""纯正则抽取"这三条设计主线,是正确配置与调优的前提;而本仓库中 src/index.ts、src/vite.ts 等入口源码与 docs/uno.config.ts 示例,则是从源码层面验证这些行为的最佳参考。

【免费下载链接】unocssThe instant on-demand atomic CSS engine.项目地址: https://gitcode.com/GitHub_Trending/un/unocss

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询