Panda CSS
面向设计系统、在构建时提取样式的类型安全 CSS-in-JS 框架。
项目概述
Panda CSS 使用静态分析、PostCSS 和代码生成,把类型安全的样式对象、设计令牌、Recipe 与 Layout Pattern 转换为现代原子 CSS,并避免在浏览器中动态注入样式。
Panda CSS 是 Chakra UI 团队维护、采用 MIT 许可证的构建时 CSS-in-JS 框架。它扫描项目中的 css、cva、Recipe、Pattern 和受支持 JSX Style Props,在构建阶段提取样式并通过 PostCSS 生成原子 CSS、CSS Variables 与 Cascade Layers。panda codegen 会根据配置生成 styled-system 目录,其中包含项目专属的类型、Token、Recipe、Pattern 和轻量类名组合函数;运行时只组合已生成的类名,不在浏览器中创建或注入新样式。Panda 同时支持设计令牌、语义令牌、多主题、响应式条件和可共享 Preset,重点服务于需要类型约束和长期治理的设计系统。
主要特点
Panda CSS 把类型安全的样式编写、设计令牌、组件变体与静态 CSS 输出连接成一套面向设计系统的工作流。
构建时静态提取
分析源码中的 Panda API 和受支持 Style Props,把可识别样式提前转换为 CSS 文件,而不是在浏览器中动态生成 Style Tag。
类型安全与自动补全
Codegen 将 CSS 属性、简写、Token、条件、Recipe 和 Pattern 转换为项目专属 TypeScript 类型,让错误更早暴露。
设计令牌与语义令牌
颜色、间距、字体、圆角和阴影可定义为 Token,并通过 Semantic Token 在不同主题、颜色模式和品牌间映射。
Recipe 与组件变体
cva、Config Recipe 和 Slot Recipe 可描述 Base、Variant、Compound Variant 与默认值,并生成类型安全的组件样式 API。
布局 Pattern
Stack、HStack、VStack、Grid、Flex、Container 和 Container Query 等 Pattern 提供可覆盖、可类型检查的高层布局原语。
现代 CSS 输出
使用原子类、CSS Variables 和 reset、base、tokens、recipes、utilities 等 Cascade Layer 组织最终样式。
JSX Style Props 与 styled
除 css 函数外,还能生成 React、Preact、Qwik、Solid 或 Vue 对应的 JSX 工具,通过 Style Props 和 styled 组件编写界面。
Preset 与共享配置
Token、Recipe、Pattern、Utility、Condition 和 Global CSS 可打包为 Preset,在组件库、Monorepo 和多个产品间复用。
适用场景
适合希望在 TypeScript 中获得样式与 Token 自动补全,同时又不想依赖浏览器端样式注入的产品和组件库。
企业设计系统
把品牌 Token、语义颜色、组件 Variant 和布局规范沉淀为可生成类型、可版本化的设计系统包。
类型安全的 React 产品
适合 SaaS、后台、协作工具和长期维护的 Web 应用,在组件代码中直接获得 CSS 与 Token 自动补全。
组件库与多 Variant 组件
Recipe 和 Slot Recipe 适合按钮、输入框、卡片、菜单等包含尺寸、外观、状态和多部件结构的组件。
多品牌与深浅主题
通过 Token、Semantic Token 与 CSS Variable 切换品牌和颜色模式,而无需复制整套组件样式。
多应用 Monorepo
共享 Preset 与生成配置,让多个应用复用同一设计语言,同时为各项目输出定制的 styled-system。
SSR 与静态渲染应用
样式在构建时输出为普通 CSS,适合服务端组件、服务端渲染和静态生成,但仍需按目标框架配置扫描路径。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Panda CSS 擅长的地方
- CSS 属性、设计令牌、Recipe Variant 和 Pattern 都能获得类型提示
- 样式在构建时生成,不依赖浏览器端动态注入 CSS
- Token、Semantic Token 与 CSS Variable 适合多主题设计系统
- Recipe 和 Slot Recipe 为复杂组件建立明确、可复用的变体 API
- Preset 可在组件库和多个应用之间共享完整设计约束
- 原子 CSS 与 Cascade Layers 让输出复用和样式优先级更可控
需要注意
采用前应考虑的问题
styled-system 由配置生成,Token 或 Recipe 变化后必须重新 codegen;本地、CI、编辑器和发布流程都要保持生成步骤一致。
运行时拼接属性名、从未知数据生成 Token 或隐藏在未识别封装中的样式可能不会被提取,应使用明确分支、Recipe、CSS Variable 或 staticCss。
include 漏掉组件、工作区包或特殊文件扩展会导致生产样式缺失;扫描范围过大则会降低生成速度并引入无关 CSS。
styled-system 是构建产物,修改会在下次 codegen 时丢失。是否提交版本库应由团队统一,并确保发布包包含消费者需要的产物。
Atomic Recipe、Config Recipe 与 Slot Recipe 在共置、按需生成、响应式 Variant 和多部件能力上不同,选错后可能增加 CSS 或重构成本。
Panda 使用 Cascade Layers、CSS Variables 等现代能力,虽然可通过 PostCSS 扩展兼容性,仍应根据真实浏览器范围测试。
相较 Tailwind CSS,现成组件、教程、第三方插件和熟悉该工作流的开发者较少,团队需要承担更多设计系统建设成本。
快速开始
按照官方 Vite + React + TypeScript 流程配置 PostCSS、代码生成、设计令牌与类型安全 Recipe。
bashnpm create vite@latest panda-app -- --template react-ts
cd panda-app
npm install
npm install -D @pandacss/dev
npx panda init --postcsstypescriptimport { defineConfig } from "@pandacss/dev";
export default defineConfig({
preflight: true,
include: ["./src/**/*.{js,jsx,ts,tsx}"],
exclude: [],
jsxFramework: "react",
outdir: "styled-system",
strictTokens: true,
theme: {
extend: {
tokens: {
colors: {
brand: { value: "#6d5dfc" },
surface: { value: "#ffffff" },
text: { value: "#0f172a" },
},
},
},
},
});json{
"scripts": {
"prepare": "panda codegen",
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview"
}
}css@layer reset, base, tokens, recipes, utilities;tsximport { css, cva } from "../styled-system/css";
const button = cva({
base: {
display: "inline-flex",
alignItems: "center",
justifyContent: "center",
borderRadius: "md",
fontWeight: "semibold",
},
variants: {
visual: {
solid: { bg: "brand", color: "white" },
outline: {
borderWidth: "1",
borderColor: "brand",
color: "brand",
},
},
size: {
sm: { px: "3", py: "2", fontSize: "sm" },
md: { px: "4", py: "3", fontSize: "md" },
},
},
defaultVariants: {
visual: "solid",
size: "md",
},
});
export function App() {
return (
<main
className={css({
minHeight: "100vh",
display: "grid",
placeItems: "center",
bg: "surface",
color: "text",
})}
>
<button className={button()}>Hello Panda CSS</button>
</main>
);
}bashnpm run prepare
npm run dev
# 提交前执行完整构建
npm run build
npm run preview下一步:把 panda.config.ts、Preset 和 Token 当作公共 API 管理;配置变化后重新运行 codegen,并在 CI 中验证生成与构建。动态值应使用 CSS Variable、明确的条件分支或 staticCss,不能假设静态分析器会执行任意业务逻辑。
类似项目
这些方案同样关注 Utility CSS、构建时提取或类型安全的设计系统,但在作者语法、代码生成和生态范围上不同。
Panda CSS vs Tailwind CSS
Panda CSS 和 Tailwind CSS 都在构建阶段生成可复用的 Utility CSS。Panda 以类型安全的对象、Codegen、Token 和 Recipe 为中心,Tailwind 则以直接写在模板中的类名和统一官方语法见长。
| 比较维度 | Panda CSS | Tailwind CSS |
|---|---|---|
| 作者语法 | TypeScript 样式对象、函数和 JSX Style Props | HTML、JSX 或模板中的 Utility class 字符串 |
| 类型安全 | Codegen 为 CSS、Token、Recipe 和 Pattern 生成类型 | 主要依赖编辑器补全、类名校验和官方工具链 |
| 设计令牌 | Token、Semantic Token、类型与 CSS Variable 深度集成 | 通过 Theme Variable 和 Utility 构建设计令牌体系 |
| 组件变体 | 内置 Atomic、Config 与 Slot Recipe | 通常在组件层组合类名或搭配 CVA 等工具 |
| 构建模型 | AST 静态分析、PostCSS 与 styled-system Codegen | 扫描候选类名并按需生成官方 Utility |
| 浏览器运行时 | 轻量函数组合已生成类名,不注入样式 | 通常直接使用静态类名,不需要样式运行时 |
| 框架范围 | 重点服务 JavaScript/TypeScript 与受支持 JSX 框架 | 可扫描几乎任何输出 HTML 的模板和技术栈 |
| 更适合 | 类型严格、多主题、复杂组件库与企业设计系统 | 快速产品开发、跨技术栈团队和成熟 Utility 生态 |
如果团队希望在模板中直接组合类名、重视庞大生态和跨语言模板支持,Tailwind CSS 通常更简单;如果核心需求是强类型 Token、Recipe、Slot Recipe、多主题和可发布的设计系统 Preset,Panda CSS 更有结构。两者都能输出高效静态 CSS,最终应以组件复杂度、生成流程、团队习惯和升级治理成本选择。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 Panda CSS 官方概述、Vite 安装、样式编写、Recipe、Pattern 和 Styled System 文档,以及官方源码仓库整理。快速开始采用 @pandacss/dev、PostCSS、prepare codegen 与官方 Layer 顺序;配置和生成 API 会持续演进,生产使用前应再次核对目标框架集成与迁移说明。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 24 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。