Chakra UI
简洁、模块化的 React 组件库,以可访问性和开发体验为核心,v3 采用 Ark UI + Panda CSS 全新零运行时架构。
以可访问性和开发体验为核心的 React 组件库,GitHub Stars 超过 40,000。v3 采用 Ark UI + Panda CSS 零运行时架构,支持组合式 API 和跨框架(React/Vue/Solid),提供类型安全的样式系统。
Chakra UI
简洁、模块化的 React 组件库,以可访问性和开发体验为核心,v3 采用 Ark UI + Panda CSS 全新零运行时架构。
技术简介说明
Chakra UI 是一个以「简洁性」和「可访问性」为核心理念的 React 组件库,由 Segun Adebayo(Segun Adebayo)于 2019 年创建。它以直觉式的 API 设计、出色的开发体验和严格的 WAI-ARIA 无障碍标准著称,GitHub Stars 超过 40,000,已成为 React 生态中最受欢迎的组件库之一。
Chakra UI v3(2024 年 10 月发布,持续迭代至 2026 年的 v3.35.0)带来了架构层面的根本性变革——从 v2 的运行时 Emotion CSS-in-JS 迁移到构建时生成的 Panda CSS + Ark UI 组合方案。这一变革使得 Chakra UI 实现了零运行时开销、类型安全的样式系统,同时保持了开发者喜爱的组合式 API。Ark UI 提供无样式的 headless 组件行为层(基于 Zag.js 有限状态机),Panda CSS 负责构建时 CSS 生成和 Design Token 管理。
Chakra UI 的独特之处在于它同时追求「开发体验」和「运行时性能」,这在传统组件库中往往是矛盾的。v3 通过构建时 CSS 生成解决了性能问题,同时通过组合式 API(Compound Components)和语义化命名保持了优雅的开发者体验。跨框架支持(React、Vue、Solid)也使其成为设计系统团队的理想选择。
基本信息
- 官网:https://chakra-ui.com/
- GitHub:https://github.com/chakra-ui/chakra-ui
- License:MIT
- 最新版本:v3.35.0(2026 年 4 月 22 日)
- 主要维护者:Segun Adebayo(个人创作者),社区贡献
- npm 周下载量:约 587,000+
- TypeScript 支持:原生支持,完全类型化
- 跨框架支持:React、Vue、Solid(通过 Ark UI)
快速上手
安装
# 核心包
npm install @chakra-ui/react @emotion/react
# Chakra UI v3 使用 Panda CSS,还需要安装 Panda CSS
npm install @chakra-ui/react @ark-ui/react
# 使用 pnpm
pnpm add @chakra-ui/react @ark-ui/react
# 可选:图标
npm install @chakra-ui/icons
# 注意:v3 不再需要 @emotion/react 和 @emotion/styled注意:Chakra UI v3 要求 React 18+ 版本。从 v2 迁移到 v3 需要较大的改动,请参阅迁移章节。
基础配置
// src/main.tsx
import { ChakraProvider, defaultSystem } from '@chakra-ui/react';
import ReactDOM from 'react-dom/client';
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(
<ChakraProvider value={defaultSystem}>
<App />
</ChakraProvider>
);// 自定义主题系统
import { createSystem, defaultConfig, defineConfig } from '@chakra-ui/react';
const config = defineConfig({
theme: {
tokens: {
colors: {
brand: {
50: { value: '#e6f2ff' },
500: { value: '#0066cc' },
900: { value: '#001a33' },
},
},
fonts: {
heading: { value: '"Inter", sans-serif' },
body: { value: '"Inter", sans-serif' },
},
},
},
});
export const system = createSystem(defaultConfig, config);最小示例
import { Box, Button, Heading, Stack, Text } from '@chakra-ui/react';
function App() {
return (
<Box p={8}>
<Stack gap={4}>
<Heading size="lg">欢迎使用 Chakra UI</Heading>
<Text color="fg.muted">
简洁、模块化、可访问的 React 组件库
</Text>
<Button colorPalette="blue" size="md">
开始使用
</Button>
</Stack>
</Box>
);
}
export default App;核心概念与架构
v3 全新架构
Chakra UI v3 采用全新的分层架构:
┌──────────────────────────────────────────────────┐
│ Chakra UI v3 │
│ 有样式的组合式组件 API │
│ <Accordion.Root> <Dialog.Root> 等 │
├──────────────────────────────────────────────────┤
│ Ark UI │
│ 无样式 headless 组件(行为 + 可访问性) │
│ 基于 Zag.js 有限状态机 │
│ 支持 React / Vue / Solid │
├──────────────────────────────────────────────────┤
│ Panda CSS │
│ 构建时 CSS 生成(零运行时) │
│ Design Token 管理 + 类型安全样式 │
│ 支持 CSS 级联层、:where 选择器 │
├──────────────────────────────────────────────────┤
│ React 18+ │
│ 运行时 │
└──────────────────────────────────────────────────┘
组合式 API(Compound Components)
v3 全面采用组合式 API,所有复杂组件都通过 Root + 子组件的模式构建:
// v3 组合式 API
import { Accordion } from '@chakra-ui/react';
<Accordion.Root defaultValue={['section-1']}>
<Accordion.Item value="section-1">
<Accordion.ItemTrigger>第一部分</Accordion.ItemTrigger>
<Accordion.ItemContent>
<Accordion.ItemBody>
这是第一部分内容
</Accordion.ItemBody>
</Accordion.ItemContent>
</Accordion.Item>
<Accordion.Item value="section-2">
<Accordion.ItemTrigger>第二部分</Accordion.ItemTrigger>
<Accordion.ItemContent>
<Accordion.ItemBody>
这是第二部分内容
</Accordion.ItemBody>
</Accordion.ItemContent>
</Accordion.Item>
</Accordion.Root>样式原语(Style Primitives)
v3 使用 css prop 和语义化样式属性:
import { Box, Stack } from '@chakra-ui/react';
// 使用样式属性
<Box
p={4}
bg="bg.surface"
borderRadius="lg"
borderWidth="1px"
borderColor="border.subtle"
>
卡片内容
</Box>
// 使用 css prop 处理复杂样式
<Box
css={{
'&:hover': {
transform: 'translateY(-2px)',
boxShadow: 'lg',
},
}}
>
悬停动画效果
</Box>
// 响应式样式
<Stack direction={{ base: 'column', md: 'row' }} gap={4}>
<Box flex={1}>左侧</Box>
<Box flex={1}>右侧</Box>
</Stack>Design Token 系统
// Panda CSS 配置
import { defineConfig } from '@chakra-ui/react';
export default defineConfig({
theme: {
tokens: {
// 颜色令牌
colors: {
primary: {
50: { value: '#eff6ff' },
100: { value: '#dbeafe' },
500: { value: '#3b82f6' },
900: { value: '#1e3a5f' },
},
},
// 间距令牌
spacing: {
xs: { value: '0.25rem' },
sm: { value: '0.5rem' },
md: { value: '1rem' },
lg: { value: '1.5rem' },
},
// 语义令牌
semanticTokens: {
colors: {
'text.primary': { value: '{colors.gray.900}' },
'text.muted': { value: '{colors.gray.500}' },
'bg.surface': { value: '{colors.white}' },
},
},
},
},
});核心特性
- 零运行时 CSS:Panda CSS 在构建时生成 CSS,运行时零开销,显著提升性能
- 组合式 API:所有复杂组件采用
Root+ 子组件模式,灵活且可预测 - 严格的无障碍标准:所有组件遵循 WAI-ARIA 规范,内置键盘导航和屏幕阅读器支持
- Ark UI 行为层:基于 Zag.js 有限状态机,提供经过测试的 headless 组件行为
- 跨框架支持:Ark UI 同时支持 React、Vue、Solid,一套行为逻辑多框架复用
- 类型安全样式:Panda CSS 提供完整的 TypeScript 类型推导,样式属性有智能提示
- CSS 现代特性:使用级联层(Cascade Layers)、
:where选择器、CSS 变量等现代特性 - 语义化命名:v3 使用语义化命名(
colorPalette替代colorScheme,open替代isOpen) - Presence 动画:统一的 CSS 动画方案替代旧的 JS 过渡组件
- Command Menu(CMDK):CLI 工具支持快速添加组件代码片段
- 暗色模式:通过
next-themes实现(v3 移除了内置颜色模式工具)
生态图
核心生态
┌──────────────────────────────────────────────────────────┐
│ Chakra UI 生态 │
├────────────────┬────────────────┬─────────────────────────┤
│ 核心库 │ 行为层 │ 样式引擎 │
│ @chakra-ui/ │ @ark-ui/react │ Panda CSS │
│ react │ 35+ headless │ 构建时 CSS 生成 │
│ v3.35.0 │ 组件 │ 零运行时开销 │
├────────────────┼────────────────┼─────────────────────────┤
│ 模板系统 │ 图标 │ 工具 │
│ Park UI │ @chakra-ui/ │ @chakra-ui/codemod │
│ 预设计组件模板 │ icons │ v2 → v3 迁移工具 │
│ React/Vue/ │ │ 50+ 自动转换 │
│ Solid │ │ │
├────────────────┼────────────────┼─────────────────────────┤
│ 付费产品 │ 社区资源 │ 学习资源 │
│ Chakra UI Pro │ Chakra Templates│ 官方文档 │
│ 高级页面模板 │ 社区主题 │ YouTube 教程 │
│ │ 社区扩展 │ 迁移指南 │
└────────────────┴────────────────┴─────────────────────────┘
关键包
| 包名 | 说明 | 版本 |
|---|---|---|
@chakra-ui/react | 核心组件库 | v3.35.0 |
@ark-ui/react | Headless 行为组件 | v5.37.0 |
panda-css / @pandacss/dev | 构建时 CSS 引擎 | v2.x |
@chakra-ui/icons | 官方图标集 | - |
@chakra-ui/codemod | v2→v3 迁移工具 | - |
@zag-js/* | 有限状态机工具 | - |
| Park UI | 预设计组件模板 | - |
Park UI
Park UI 于 2025 年 11 月正式加入 Chakra UI 组织,提供基于 Ark UI + Panda CSS 构建的精美组件模板。开发者可以直接使用这些模板快速搭建页面,支持 React、Vue、Solid 三个框架。
适用场景
- 重视可访问性的项目:Chakra UI 以 WAI-ARIA 为最高标准,所有组件均通过严格的无障碍测试
- 需要零运行时性能的场景:Panda CSS 构建时生成 CSS,运行时零开销,适合对性能敏感的应用
- 跨框架设计系统:Ark UI 同时支持 React/Vue/Solid,适合需要多框架统一行为的设计系统
- SaaS 产品:简洁现代的风格适合各类 SaaS 产品
- 组件灵活组合的项目:组合式 API 提供最大的灵活性,适合需要深度定制组件结构的场景
- 现代 CSS 技术栈:使用级联层、CSS 变量等现代特性,适合新项目
- 设计驱动的开发:Design Token + Panda CSS 类型安全样式,设计到代码一致性好
开发与工程化
开发流程
# 创建新项目
npm create vite@latest my-chakra-app -- --template react-ts
cd my-chakra-app
# 安装 Chakra UI v3
npm install @chakra-ui/react @ark-ui/react
# 安装 Panda CSS(样式引擎)
npm install -D @pandacss/dev
npx panda init
# 开发
npm run dev
# 构建(Panda CSS 在构建时生成 CSS)
npm run buildPanda CSS 配置
// panda.config.ts
import { defineConfig } from '@pandacss/dev';
export default defineConfig({
preflight: true,
include: ['./src/**/*.{ts,tsx}'],
exclude: [],
theme: {
extend: {
tokens: {
colors: {
brand: {
50: { value: '#e6f2ff' },
500: { value: '#0066cc' },
},
},
},
},
},
outdir: 'styled-system',
});CLI 工具
# 使用 Chakra CLI 添加组件代码片段
npx @chakra-ui/cli snippet add Dialog
npx @chakra-ui/cli snippet add Accordion
npx @chakra-ui/cli snippet add DataTableCI/CD 集成
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx panda codegen # 生成 Panda CSS 类型
- run: npm run typecheck
- run: npm run lint
- run: npm run build性能与安全
性能特点
- 零运行时 CSS:Panda CSS 在构建时生成所有 CSS,运行时不需要 JS 计算样式
- 级联层优化:使用 CSS Cascade Layers 管理样式优先级,避免
!important滥用 :where选择器:降低样式特异性,让覆盖更简单- CSS 变量:主题令牌编译为 CSS 变量,主题切换无需重新计算样式
- Tree Shaking:完全支持 ES Module Tree Shaking
性能优化建议
// 1. 使用语义化令牌而非直接值
// ✅
<Box bg="bg.surface" color="text.primary" />
// ❌ 避免硬编码值
<Box bg="#ffffff" color="#1a1a1a" />
// 2. 利用组合式 API 避免不必要的重渲染
<Dialog.Root open={isOpen} onOpenChange={setIsOpen}>
{/* 子组件不会被父组件状态变化影响 */}
<Dialog.Content>
<Dialog.Header>标题</Dialog.Header>
<Dialog.Body>内容</Dialog.Body>
</Dialog.Content>
</Dialog.Root>
// 3. 使用 css 的 :where 特性减少样式冲突
// Panda CSS 默认使用 :where 降低特异性安全注意事项
- XSS 防护:Chakra 组件默认转义文本,避免
dangerouslySetInnerHTML - CSP 兼容:构建时 CSS 方案天然兼容严格的 Content Security Policy
- 依赖审计:定期更新
@ark-ui/react和@zag-js/*依赖
已知性能瓶颈
- 首次组件渲染:v3 初期版本曾有渲染性能争议(GitHub Discussion #9600),后续版本持续优化
- Panda CSS 构建时间:大型项目的 Panda CSS codegen 可能增加构建时间
- 组合式 API 组件数量:复杂组件需要多个子组件包裹,增加 JSX 复杂度
技术对比
| 特性 | Chakra UI v3 | Ant Design v6 | MUI v9 | Mantine v9 |
|---|---|---|---|---|
| 架构 | Ark UI + Panda CSS | CSS-in-JS 内置 | Emotion CSS-in-JS | CSS Modules |
| 运行时开销 | 零(构建时生成) | 有(内置引擎) | 有(Emotion) | 零(CSS Modules) |
| API 风格 | 组合式 API | 传统 props | sx prop + styled | 传统 props |
| 跨框架 | React/Vue/Solid | 仅 React | 仅 React | 仅 React |
| 无障碍 | WAI-ARIA 严格 | WAI-ARIA 支持 | WAI-ARIA 支持 | WAI-ARIA 支持 |
| 类型安全样式 | Panda CSS 类型推导 | Design Token 类型 | sx prop 类型 | CSS 变量类型 |
| 暗色模式 | next-themes | 内置算法 | 内置 | 内置 |
| CLI 工具 | snippet 命令 | Ant Design CLI | 无 | 无 |
| Headless 方案 | Ark UI(独立可用) | 无 | @mui/base | 无 |
| Pro 组件 | Park UI(模板) | ProComponents | Data Grid(付费) | 社区模板 |
| 适合场景 | 可访问性优先项目 | 中后台系统 | Material Design | 通用 Web |
| Bundle Size | 较小 | 中等 | 较大 | 中等 |
选型建议
- 选 Chakra UI:重视无障碍、需要零运行时、跨框架设计系统、现代 CSS 技术栈
- 选 Ant Design:中后台系统、需要 ProComponents、中文市场
- 选 MUI:Material Design、国际市场、需要 Data Grid
- 选 Mantine:丰富 hooks、轻量灵活、日程调度
最佳实践
生产环境建议
- 使用语义化令牌:始终使用
bg.surface、text.primary等语义令牌而非硬编码颜色值 - 组合式组件结构:遵循
Root+ 子组件模式,不要尝试用 props 控制内部结构 - Panda CSS 配置优化:合理配置
include和exclude减少构建时间 - 主题分模块管理:
// tokens/colors.ts
export const colors = {
brand: {
50: { value: '#e6f2ff' },
500: { value: '#0066cc' },
900: { value: '#001a33' },
},
};
// tokens/fonts.ts
export const fonts = {
heading: { value: '"Inter", sans-serif' },
body: { value: '"Inter", sans-serif' },
};
// panda.config.ts
import { colors } from './tokens/colors';
import { fonts } from './tokens/fonts';
export default defineConfig({
theme: {
extend: { tokens: { colors, fonts } },
},
});常见陷阱
// ❌ 错误:使用 v2 风格的 API
<Accordion defaultIndex={[0]} allowMultiple>
<AccordionItem>
<AccordionButton>标题</AccordionButton>
<AccordionPanel>内容</AccordionPanel>
</AccordionItem>
</Accordion>
// ✅ 正确:使用 v3 组合式 API
<Accordion.Root defaultValue={['item-1']}>
<Accordion.Item value="item-1">
<Accordion.ItemTrigger>标题</Accordion.ItemTrigger>
<Accordion.ItemContent>
<Accordion.ItemBody>内容</Accordion.ItemBody>
</Accordion.ItemContent>
</Accordion.Item>
</Accordion.Root>// ❌ 错误:使用 is 前缀(v2 风格)
<Dialog isOpen={isOpen} onClose={onClose}>
// ✅ 正确:v3 语义化命名
<Dialog.Root open={isOpen} onOpenChange={setOpen}>推荐模式
// 表单模式
import { Field, Input, Button, Stack } from '@chakra-ui/react';
function LoginForm() {
return (
<form onSubmit={handleSubmit}>
<Stack gap={4} maxW="400px">
<Field.Root>
<Field.Label>邮箱</Field.Label>
<Input type="email" placeholder="请输入邮箱" />
<Field.HelperText>我们不会分享你的邮箱</Field.HelperText>
</Field.Root>
<Field.Root>
<Field.Label>密码</Field.Label>
<Input type="password" placeholder="请输入密码" />
</Field.Root>
<Button colorPalette="blue" type="submit" size="lg">
登录
</Button>
</Stack>
</form>
);
}技术局限与边界
已知限制
- v3 迁移成本大:从 v2 到 v3 是架构级变更,API 几乎全部重写,需要大量改动
- 社区规模较小:相比 Ant Design(98k Stars)和 MUI(98k Stars),Chakra UI 社区规模偏小
- 无内置中后台组件:没有类似 ProComponents 的高级业务组件,复杂表格/表单需自行构建
- Panda CSS 学习成本:新开发者需要同时学习 Chakra API + Panda CSS + Ark UI
- 暗色模式需外部方案:v3 移除了内置颜色模式,需要配合
next-themes等工具 - 部分组件首次渲染性能:复杂组件(如 DataTable)初始渲染可能不如纯 CSS 方案快
- 文档覆盖不完整:v3 的部分高级用法和社区示例还不够完善
迁移注意事项(v2 → v3)
- 安装迁移工具:
npm install -D @chakra-ui/codemod - 运行自动转换(50+ 变换规则):
npx @chakra-ui/codemod - 关键变更:
colorScheme→colorPaletteisOpen→open,onClose→onOpenChange- 移除
framer-motion,使用Presence组件 - 移除内置颜色模式,使用
next-themes - 组件 API 全面改为组合式(Compound)
- 样式从 Emotion 迁移到 Panda CSS
- 透明色使用 CSS
color-mix替代 JS 计算
学习资源
官方文档
- Chakra UI 官网 - 组件文档与指南
- v3 迁移指南 - 从 v2 迁移
- Chakra UI 博客 - 官方动态
- Q1 2026 回顾 - 最新进展
- Panda CSS 文档 - 样式引擎
- Ark UI 文档 - Headless 组件
教程
社区资源
- GitHub Discussions - 讨论与问答
- Discord - 实时交流
- Stack Overflow (chakra-ui tag) - 技术问答
- Park UI - 预设计组件模板
- Reddit (r/chakra_ui) - 社区讨论
2026 年现状
最新版本
- Chakra UI v3.35.0(2026 年 4 月 22 日):CLI 改进,组件持续优化
- Ark UI v5.37.0(2026 年 5 月):Headless 组件持续迭代
- Panda CSS v2.x:构建时 CSS 引擎持续演进
- Park UI:2025 年 11 月正式加入 Chakra 组织
发展趋势
- Ark UI 生态扩大:Ark UI 作为独立的 headless 组件库,影响力持续扩大,支持更多框架
- Panda CSS v2 演进:社区反馈驱动的改进,更好的框架集成
- CLI 工具增强:组件代码片段快速添加,提升开发效率
- 跨框架统一:通过 Ark UI + Panda CSS 实现 React/Vue/Solid 统一体验
- 性能持续优化:解决社区反馈的渲染性能问题
社区活跃度
- GitHub Stars:40,000+(2025 年 12 月庆祝 40k)
- npm 周下载量:587,000+
- 每周下载量:Ark UI 约 634,700+
- 由 Segun Adebayo 主导开发,Vercel 赞助
- 活跃的 Discord 社区
未来路线图
- Panda CSS v2 稳定版发布
- Ark UI 支持更多框架(Svelte 等)
- Chakra UI Pro 商业产品持续完善
- 性能优化:组件首次渲染性能改进
- 更好的 Next.js App Router 集成
- CLI 工具功能扩展