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

StyleX

Meta 开源、在构建时编译为原子 CSS 的类型安全样式系统。

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

项目概述

StyleX 让开发者用共置的 JavaScript 或 TypeScript 对象编写样式,通过编译器生成静态原子 CSS,并提供可预测组合、类型约束和主题能力。

StyleX 是 Meta 开源、采用 MIT 许可证的样式系统,目标是在 CSS 的表达能力、组件内共置和大规模应用的可维护性之间取得平衡。开发者通过 stylex.create 定义静态样式,以 stylex.props 组合并应用到元素;编译器在构建阶段把可分析的声明转换成可复用的原子 CSS,让跨文件、简写与长写属性之间的覆盖顺序保持确定。@stylexjs/stylex 运行时包仍是必需依赖,但同一文件中的静态 create 与 props 调用可以被完全编译掉,跨文件组合则只保留轻量对象和类名合并逻辑。StyleX 还提供 defineVars、createTheme、keyframes 和类型化 Style Props,适合构建长期演进的 React 产品、组件库与多主题设计系统。

当前稳定版v0.19.0
编写方式Typed Style Objects
输出Atomic CSS
FEATURES

主要特点

StyleX 用少量核心 API 连接静态样式对象、确定性组合、类型系统、主题变量和构建时原子 CSS。

01

构建时原子 CSS

编译器把静态声明提取为细粒度、可复用的 CSS 类,减少重复规则,并避免在浏览器中动态创建 Style Tag。

02

确定性的样式组合

stylex.props 按传入顺序组合样式,后应用的声明获胜,即使规则来自不同文件或涉及简写与长写属性,也能保持可预测。

03

类型安全的样式对象

官方包包含 Flow 和 TypeScript 类型,可检查属性、值、伪类、媒体查询与 Style Props,减少拼写错误和无效声明。

04

组件内共置

样式可与组件放在同一模块中,复用 JavaScript 模块边界和依赖关系,而最终仍输出可缓存的静态 CSS。

05

精简的核心 API

日常编写主要围绕 stylex.create 与 stylex.props;条件样式直接使用布尔值、数组或三元表达式,无需额外条件 DSL。

06

变量与主题

defineVars 创建带类型的 CSS Variable 契约,createTheme 可覆盖变量值,实现深浅模式、品牌主题和局部主题。

07

受约束的组件扩展

StyleXStyles 与 StyleXStylesWithout 等类型可精确规定组件接受哪些外部样式,在可定制性和封装之间建立清晰边界。

08

面向大型代码库

跨文件和跨包样式可以组合,原子规则保持全局复用,适合 Monorepo、共享组件库和长期维护的产品界面。

USE CASES

适用场景

适合重视组件样式共置、跨包组合、主题治理和低浏览器运行时成本的 React 应用与设计系统。

大型 React 产品

适合包含大量页面和组件、需要稳定覆盖规则与低运行时成本的社交、协作、内容和 SaaS 应用。

企业设计系统

用类型化变量、主题和受约束 Style Props 建立颜色、间距、排版与组件扩展规范。

共享组件库

组件与样式可一起发布到 npm 包,并在消费应用中参与编译和原子规则复用。

多品牌与深浅主题

通过 defineVars 和 createTheme 复用组件结构,只替换语义变量即可切换品牌或颜色模式。

性能敏感界面

将主要样式工作移动到构建阶段,生成静态 CSS,降低客户端渲染时创建和注入样式的成本。

需要严格扩展边界的组件

组件可以接受外部 StyleX 样式,同时用类型排除布局、尺寸或其他不应被调用方覆盖的属性。

EVALUATION

优点与注意事项

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

主要优点

StyleX 擅长的地方

  • 跨文件、简写和长写属性的组合结果确定,样式覆盖更容易推理
  • 静态声明编译为原子 CSS,浏览器端只保留必要的轻量组合逻辑
  • 样式、变量、主题和组件 Style Props 都可获得类型检查
  • 样式与组件共置,同时保留普通 CSS 的缓存和开发者工具体验
  • defineVars 与 createTheme 适合多品牌、深浅模式和局部主题
  • 跨包组合与受约束 Style Props 有利于大型组件库长期治理

需要注意

采用前应考虑的问题

生产构建依赖编译器

仅安装运行时包不足以获得静态 CSS 和优化结果,必须为 Babel、PostCSS、Vite 或目标框架正确配置 StyleX 编译流程。

静态分析限制写法

stylex.create 通常应位于模块顶层,属性和值需要在构建时可确定;任意运行时对象、动态属性名或隐藏在未知函数中的样式无法可靠提取。

React 支持最成熟

StyleX 的理念不限定框架,但当前文档、类型与使用模式最贴近 React;其他框架可能需要适配层,并应先验证 SSR 和属性绑定方式。

动态值需要换一种表达

来自用户数据的尺寸、位置或颜色通常需要 CSS Variable、内联样式或受控组件参数,而不能直接塞进静态样式对象。

服务端渲染要正确收集 CSS

框架集成必须在服务端构建、客户端水合和 CSS 输出之间保持一致;自定义工具链应覆盖开发、测试与生产三种环境。

不鼓励远距离选择器

依赖父级选择器修改任意后代或大量全局覆盖的旧 CSS 架构,需要重构为显式组件状态、Style Props 或主题变量。

生态规模仍在成长

相较 Tailwind CSS,现成组件、教程和第三方集成更少;升级编译器时还需关注静态分析规则与构建插件变化。

CSS 拆分策略需要评估

StyleX 倾向让原子规则在一个小型样式集合中高度复用,与按路由切分大量独立 CSS Chunk 的策略不同,应按真实应用测量缓存和加载表现。

QUICK START

快速开始

使用官方脚手架创建已配置编译器的项目,再通过 stylex.create、stylex.props 和 defineVars 编写类型安全样式。

1使用官方脚手架创建项目
bash
npm create @stylexjs my-app
cd my-app
npm install
npm run dev
2手动安装运行时和编译依赖
bash
npm install @stylexjs/stylex
npm install -D @stylexjs/babel-plugin @stylexjs/postcss-plugin postcss
3定义可复用的主题变量
typescript
import * as stylex from "@stylexjs/stylex";

export const colors = stylex.defineVars({
  brand: "#4b67ff",
  surface: "#ffffff",
  text: "#0f172a",
  muted: "#64748b",
});
4创建并组合组件样式
tsx
import * as stylex from "@stylexjs/stylex";
import { colors } from "./tokens.stylex";

const styles = stylex.create({
  page: {
    minHeight: "100vh",
    display: "grid",
    placeItems: "center",
    backgroundColor: colors.surface,
    color: colors.text,
  },
  card: {
    width: "min(32rem, calc(100vw - 2rem))",
    padding: "2rem",
    borderRadius: "1rem",
    boxShadow: "0 20px 60px rgb(15 23 42 / 0.12)",
  },
  button: {
    marginTop: "1rem",
    paddingBlock: "0.75rem",
    paddingInline: "1rem",
    borderRadius: "0.75rem",
    backgroundColor: colors.brand,
    color: "white",
    cursor: "pointer",
    ":hover": { opacity: 0.9 },
    ":focus-visible": { outline: "3px solid currentColor" },
  },
  disabled: {
    cursor: "not-allowed",
    opacity: 0.5,
  },
});

export function App({ disabled = false }: { disabled?: boolean }) {
  return (
    <main {...stylex.props(styles.page)}>
      <section {...stylex.props(styles.card)}>
        <h1>StyleX</h1>
        <p>静态原子 CSS,也能保持组件化组合。</p>
        <button
          disabled={disabled}
          {...stylex.props(styles.button, disabled && styles.disabled)}
        >
          开始使用
        </button>
      </section>
    </main>
  );
}
5创建深色主题
typescript
import * as stylex from "@stylexjs/stylex";
import { colors } from "./tokens.stylex";

export const darkTheme = stylex.createTheme(colors, {
  brand: "#8b7cff",
  surface: "#0f172a",
  text: "#f8fafc",
  muted: "#94a3b8",
});

// 在主题容器上使用:
// <div {...stylex.props(darkTheme)}>...</div>
6运行检查与生产构建
bash
npm run lint
npm run build
npm run preview

下一步:生产项目必须启用 StyleX 编译器。把 stylex.create 放在模块顶层,并保持样式值可被静态分析;运行时数据优先通过条件样式、CSS Variable 或组件 Style Props 传入。

ALTERNATIVES

类似项目

这些方案同样把组件化作者体验转换成静态 CSS,但在编译模型、设计令牌、框架范围和组件变体抽象上不同。

COMPARISON

StyleX vs Panda CSS

StyleX 和 Panda CSS 都希望保留 JavaScript 对象的组件化体验,同时在构建阶段输出静态原子 CSS。StyleX 更强调极小 API、确定性组合和跨包共置;Panda CSS 更强调代码生成、设计令牌、Recipe、Pattern 与可配置的设计系统工作流。

比较维度StyleXPanda CSS
作者语法stylex.create 静态对象与 stylex.props 组合css、cva、Recipe、Pattern、styled 与 JSX Style Props
构建模型编译器静态提取并生成原子 CSSAST 静态分析、PostCSS 与 styled-system Codegen
类型来源包内 Flow / TypeScript 类型与类型化 Style Props根据项目 Token、Recipe 和 Pattern 生成专属类型
主题系统defineVars、createTheme 与类型化 CSS VariableToken、Semantic Token、条件和多主题配置
组件变体使用普通 JavaScript 条件组合静态样式内置 cva、Config Recipe 与 Slot Recipe
组合原则后传入样式获胜,跨文件覆盖结果确定通过生成类、Recipe 与 Cascade Layer 管理组合
框架范围理念可跨框架,目前 React 体验最成熟支持 React、Vue、Solid、Qwik 等多种 JSX 集成
更适合大型 React 产品、跨包组件和可预测样式组合强 Token 治理、复杂 Recipe 和多框架设计系统
如何选择

如果团队主要维护 React 应用,希望核心 API 足够小、组件样式自然共置,并把可预测的跨文件组合放在首位,StyleX 很有吸引力;如果项目需要由配置生成完整 Token 类型、内置 Recipe、Slot Recipe、布局 Pattern 和多框架 styled-system,Panda CSS 的设计系统工具箱更完整。两者都依赖静态分析,选择前应先用真实组件验证构建集成、动态值表达和发布包消费方式。

VERIFICATION

资料核验

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

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

本页依据 StyleX 官方首页、安装指南、Thinking in StyleX、变量与主题 API,以及 Meta 官方源码仓库整理。版本通过 npm 官方 Registry 核验;快速开始优先使用官方脚手架,手动集成时必须按目标构建工具补齐编译和 CSS 提取配置。

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

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

查看官方仓库