返回项目目录
开发工具精选项目

UnoCSS

高度可定制、即时按需生成样式的原子 CSS 引擎。

主要语言TypeScript
开源许可MIT
项目类型开发工具
维护状态活跃维护
OVERVIEW

项目概述

UnoCSS 本身不预设固定的工具类体系,而是通过 Preset、Rule、Variant、Shortcut 和 Transformer 组合出项目需要的原子 CSS,并只为源码中实际匹配到的标记生成样式。

UnoCSS 是由 Anthony Fu 发起、采用 MIT 许可证的即时按需原子 CSS 引擎。它的核心保持无预设立场,不内置一套不可替换的工具类;常见的 Tailwind/Windi 风格、Attributify、图标、排版和 Web Font 能力都由 Preset 提供。构建工具从模板和组件中提取候选标记,匹配静态或动态 Rule 后生成实际需要的 CSS。团队可以用 Shortcut 封装重复组合,用 Variant 表达响应式与状态,用 Transformer 扩展分组语法和指令,并通过 Vite、Nuxt、Astro、Webpack、PostCSS、CLI 等集成接入不同技术栈。

当前稳定版v66.7.5
核心模式On-demand Atomic CSS
配置基础Presets + Rules
FEATURES

主要特点

UnoCSS 把原子 CSS 拆成可组合的引擎、规则、预设与源码转换层,让团队能够选择现成语法或建立自己的样式体系。

01

即时按需生成

只有当源码中出现可匹配标记时才生成对应 CSS,不需要预先构建整套工具类,也不会把未使用规则全部加入产物。

02

无预设立场的核心

核心引擎不强制颜色、间距或类名体系,团队可使用官方 Preset、社区 Preset,或只定义自己的 Rule。

03

静态与动态 Rule

既能把固定标记映射为 CSS,也能用正则和处理函数生成带参数的动态工具类,并读取 Theme 等上下文。

04

Preset 组合生态

preset-mini、preset-wind3、preset-wind4、Attributify、Icons、Typography 和 Web Fonts 覆盖常见样式需求。

05

Shortcut 与设计抽象

可把多条 Utility 合并为有语义的 Shortcut,也能使用动态 Shortcut,把重复组件模式沉淀成统一入口。

06

Transformer 扩展语法

Variant Group、Directives、Compile Class 和 Attributify JSX 等 Transformer 可在生成前转换源码表达。

07

多构建工具集成

官方支持 Vite、Nuxt、Astro、Webpack、PostCSS、CLI 和 Runtime,并为多种框架提供针对性的顺序和提取建议。

08

图标与开发工具

preset-icons 可把 Iconify 图标生成为纯 CSS,Inspector、Playground、VS Code、JetBrains 与 ESLint 集成帮助查找和调试规则。

USE CASES

适用场景

适合重视生成速度、跨框架集成或需要深度定制 Utility 语法、图标与设计令牌的前端项目。

现代组件化 Web 应用

在 Vue、React、Svelte、Solid、Astro 或 Nuxt 项目中按需生成 Utility CSS,并通过组件封装复杂组合。

自定义 Utility 设计系统

使用 Theme、Rule、Shortcut 和 Preset 把品牌令牌、布局规则与组件模式整理为团队自己的样式语言。

大量图标的产品界面

通过 preset-icons 和所需 Iconify 集合按类名生成图标,避免手工维护大量 SVG 组件或完整图标包。

多框架 Monorepo

共享 UnoCSS Preset 和 Theme,让多个应用在保留各自框架工具链的同时复用设计令牌与 Utility 约定。

文档、内容站和静态生成

结合 Astro、Nuxt、VitePress 或 CLI,从 Markdown、模板和组件中提取标记并生成较精简的静态 CSS。

渐进替换既有 Utility 方案

preset-wind3 或 preset-wind4 可提供熟悉语法,团队可先验证页面,再逐步加入 UnoCSS 专属能力。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

UnoCSS 擅长的地方

  • 只为匹配到的标记生成 CSS,开发反馈和产物控制较直接
  • 核心、Preset、Rule、Variant 与 Transformer 的组合能力很强
  • 既能采用熟悉的 Wind 风格,也能设计完全自定义的 Utility 体系
  • 图标、Attributify、Variant Group 和 Shortcut 等能力可按需启用
  • Vite、Nuxt、Astro、Webpack、PostCSS 和 CLI 等集成覆盖广
  • 配置可打包为共享 Preset,适合跨应用复用设计令牌和约定

需要注意

采用前应考虑的问题

动态拼接可能无法被提取

类似 `bg-${color}-500` 的不完整字符串通常无法静态识别,应映射到完整类名、配置 safelist,或编写明确的动态 Rule。

Preset 决定实际语法

UnoCSS 核心没有固定工具类。更换或组合 Preset 会影响可用类名、Preflight、Theme 和生成结果,团队必须锁定配置。

Wind 兼容不代表完全等同

preset-wind3、preset-wind4 与 Tailwind CSS 在细节、插件、默认值和边缘语法上可能不同,迁移应以真实页面回归验证。

高度自由会增加治理成本

Rule、Shortcut 和自定义 Variant 过多时容易形成只有少数人理解的方言,应限制扩展入口并记录命名约定。

框架集成存在顺序要求

React Compiler、Svelte、Solid、Marko 和其他插件可能要求特定顺序或额外 Extractor,配置前应查阅对应集成说明。

Attributify 是额外语法

属性式 Utility 能缩短 class,但会改变模板阅读方式,并可能影响类型检查、格式化或第三方工具,应先统一团队选择。

开发与生产提取需一致

DevTools 中临时添加的类和运行时生成内容可能只在开发期生效,应通过 safelist、生产构建检查和视觉回归避免漏样式。

QUICK START

快速开始

在 Vite TypeScript 项目中配置 Wind3、Attributify、Icons 和 Variant Group,生成一个最小产品卡片。

1创建 Vite 项目并安装 UnoCSS
bash
npm create vite@latest uno-app -- --template vanilla-ts
cd uno-app
npm install
npm install -D unocss @iconify-json/carbon
2注册 Vite 插件
typescript
import { defineConfig } from "vite";
import UnoCSS from "unocss/vite";

export default defineConfig({
  plugins: [UnoCSS()],
});
3配置 Preset、Shortcut 和 Transformer
typescript
import {
  defineConfig,
  presetAttributify,
  presetIcons,
  presetWind3,
  transformerVariantGroup,
} from "unocss";

export default defineConfig({
  presets: [
    presetWind3(),
    presetAttributify(),
    presetIcons(),
  ],
  theme: {
    colors: {
      brand: "#6d5dfc",
    },
  },
  shortcuts: {
    "btn-primary":
      "inline-flex items-center gap-2 rounded-lg bg-brand px-4 py-2 text-white hover:opacity-90",
  },
  transformers: [transformerVariantGroup()],
  safelist: ["i-carbon-sun", "i-carbon-moon"],
});
4引入生成的虚拟样式
typescript
// src/main.ts
import "virtual:uno.css";
import "./style.css";
5使用原子类、分组变体和图标
html
<main class="min-h-screen grid place-items-center bg-slate-950 p-6">
  <article class="max-w-md rounded-2xl bg-white p-8 shadow-xl">
    <div class="i-carbon-flash text-3xl text-brand"></div>
    <h1 class="mt-4 text-3xl font-bold text-slate-950">
      Hello UnoCSS
    </h1>
    <p class="mt-3 text-slate-600">
      即时、按需生成的原子 CSS。
    </p>
    <button class="btn-primary mt-6 focus:(outline-none ring-2 ring-brand)">
      <span class="i-carbon-arrow-right"></span>
      开始构建
    </button>
  </article>
</main>
6启动开发并检查生产构建
bash
npm run dev

# 提交前检查最终生成结果
npm run build
npm run preview

下一步:先选择一种主要 Preset 和统一的设计令牌,再逐步加入 Shortcut、Icon 与 Transformer。动态状态应映射到完整类名或加入 safelist,生产构建后还要检查生成 CSS,避免只在开发模式中可见。

ALTERNATIVES

类似项目

这些工具同样解决 Utility CSS、按需生成或设计系统工程化问题,但默认语法和约束程度不同。

COMPARISON

UnoCSS vs Tailwind CSS

UnoCSS 和 Tailwind CSS 都能按需生成 Utility CSS。Tailwind 提供明确、集成度高的官方设计体系,UnoCSS 则把核心做成可扩展引擎,由 Preset、Rule 和 Transformer 决定实际语法。

比较维度UnoCSSTailwind CSS
核心定位可定制的按需原子 CSS 引擎拥有统一官方语法的 Utility-first CSS 框架
默认能力核心无固定 Utility,能力来自 Preset提供完整且一致的官方 Utility 与设计令牌体系
生成方式提取候选标记并按 Rule 即时生成扫描源码并生成实际使用的官方 Utility
扩展模型Rule、Variant、Shortcut、Preset、TransformerTheme、Utility、Variant 和官方构建工具
额外语法可选 Attributify、Variant Group、Compile Class主要围绕 class 与 CSS 中的 Tailwind 指令
图标能力preset-icons 将 Iconify 图标生成为 CSS通常使用组件库或独立图标方案
生态一致性选择灵活,但不同 Preset 和配置可能差异很大官方约定集中,教程、组件和人才生态更统一
更适合需要极强定制、多框架共享或专用 Utility 语法的团队希望采用成熟标准、组件生态和一致工作流的团队
如何选择

如果团队希望使用主流 Utility 约定、丰富组件生态和相对统一的升级路径,Tailwind CSS 通常是更稳妥的默认选择;如果需要自定义 Rule、Attributify、CSS 图标、多种 Preset 或跨框架共享专用样式语言,UnoCSS 更灵活。迁移现有 Tailwind 页面时,应逐页核对生成 CSS,而不要把 Wind Preset 当作完全兼容层。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 27 日
核验版本UnoCSS v66.7.5
内容维护Docs100 编辑整理
项目维护状态活跃维护

本页依据 UnoCSS 官方指南、Vite 集成、Preset、Rule、Shortcut 文档和官方源码仓库整理。快速开始采用当前官方导入方式,显式配置 Wind3、Attributify、Icons 与 Variant Group;不同框架的插件顺序和提取规则不同,生产使用前应按目标集成文档再次核对。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 27 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 27 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库