Documents
create-static-styles.zh-CN
create-static-styles.zh-CN
Type
External
Status
Published
Created
Jun 12, 2026
Updated
Jun 12, 2026
Source
View

简介#

createStaticStyles 是一个高性能的样式创建函数,与 createStyles 的主要区别在于:

  • 非 Hook:直接返回样式对象,不是 React Hook
  • 零运行时开销:样式在模块导入时计算一次
  • 使用 CSS 变量:通过 cssVar 使用 antd 的 CSS 变量

基础用法#

import { createStaticStyles } from 'antd-style';

// 模块级别定义,样式在导入时计算一次
const styles = createStaticStyles(({ css, cssVar }) => ({
  container: css`
    padding: 16px;
    background: ${cssVar.colorBgContainer};
    border: 1px solid ${cssVar.colorBorder};
    border-radius: ${cssVar.borderRadius};
  `,
  title: css`
    font-size: 18px;
    color: ${cssVar.colorText};
  `,
}));

// 组件内直接使用,无需调用 Hook
const MyComponent = () => {
  return (
    <div className={styles.container}>
      <h1 className={styles.title}>Hello</h1>
    </div>
  );
};

与 createStyles 对比#

特性createStylescreateStaticStyles
返回值Hook样式对象
token (JS 值)
cssVar (CSS 变量)
customToken
stylish
responsive✅ (动态)✅ (固定断点)
props 参数
isDarkMode
Hooks 数量8+0
性能开销几乎为零

API#

StaticStyleUtils#

createStaticStyles 的参数函数接收一个工具对象,包含以下属性:

属性名类型描述
cssCssUtilCSS 模板函数,将样式转换为 className
cxClassNamesUtil合并多个 className
cssVarCSSVarMapantd CSS 变量映射
responsiveStaticResponsiveMap响应式断点映射

cssVar#

CSS 变量映射对象,将 antd token 转换为对应的 CSS 变量格式。

import { cssVar } from 'antd-style';

// cssVar.colorPrimary => 'var(--ant-color-primary)'
// cssVar.colorBgContainer => 'var(--ant-color-bg-container)'
// cssVar.borderRadius => 'var(--ant-border-radius)'

responsive#

固定的响应式断点映射:

import { responsive } from 'antd-style';

// responsive.xs => '@media (max-width: 479.98px)'
// responsive.sm => '@media (max-width: 575.98px)'
// responsive.md => '@media (max-width: 767.98px)'
// responsive.lg => '@media (max-width: 991.98px)'
// responsive.xl => '@media (max-width: 1199.98px)'
// responsive.xxl => '@media (min-width: 1200px)'

使用示例#

响应式布局#

const styles = createStaticStyles(({ css, responsive }) => ({
  layout: css`
    display: flex;
    flex-direction: row;
    gap: 16px;

    ${responsive.md} {
      flex-direction: column;
    }

    ${responsive.sm} {
      padding: 8px;
    }
  `,
}));

合并 className#

const styles = createStaticStyles(({ css, cx }) => {
  const baseButton = css`
    padding: 8px 16px;
    border-radius: 4px;
  `;

  const primaryButton = css`
    background: blue;
    color: white;
  `;

  return {
    button: cx(baseButton, primaryButton),
  };
});

适用场景#

推荐使用#

  1. 纯 UI 组件样式:不依赖动态 token 值的组件
  2. 布局样式:使用 CSS 变量的间距、圆角等
  3. 高频渲染组件:列表项、表格单元格等性能敏感场景
  4. 大量组件:页面中有大量使用样式的组件

不推荐使用#

  1. 需要自定义 token
  2. 需要 JS 计算的样式(如 token.colorPrimary + '80'
  3. 需要 props 动态样式
  4. 需要 stylish 预设样式
  5. 需要 isDarkMode 进行条件判断

createStaticStylesFactory#

如果你的应用使用了自定义的 CSS 变量前缀(如通过 ConfigProviderprefixCls 配置),可以使用 createStaticStylesFactory 创建自定义实例。

基本用法#

import { createStaticStylesFactory } from 'antd-style';

// 创建自定义前缀的实例
const { createStaticStyles, cssVar, responsive } = createStaticStylesFactory({
  prefix: 'my-app',
});

// 自定义前缀会自动添加 ant fallback,确保即使自定义变量不存在也能正常工作
// cssVar.colorPrimary => 'var(--my-app-color-primary, var(--ant-color-primary))'
// cssVar.colorBgContainer => 'var(--my-app-color-bg-container, var(--ant-color-bg-container))'

const styles = createStaticStyles(({ css, cssVar }) => ({
  container: css`
    background: ${cssVar.colorBgContainer};
  `,
}));

配置选项#

参数类型默认值描述
prefixstring'ant'CSS 变量前缀
hashPriorityHashPriority'high'样式 hash 优先级

与 createInstance 集成#

如果你使用 createInstance 创建了自定义实例,静态样式会自动使用配置的 prefixCls

import { createInstance } from 'antd-style';

const { createStaticStyles, cssVar } = createInstance({
  prefixCls: 'my-app',
});

// cssVar 会自动使用 'my-app' 前缀
// cssVar.colorPrimary => 'var(--my-app-color-primary)'

性能说明#

createStaticStyles 相比 createStyles 有以下性能优势:

  • 零 Hooks 调用:组件渲染时不调用任何 Hook
  • 模块级缓存:样式只在模块导入时计算一次
  • 无 useMemo 开销:不需要记忆化计算

对于性能敏感的场景,建议优先考虑使用 createStaticStyles