Ant Design StyleAnt Design Style
快速上手
最佳实践
API
更新日志
⌘ K

Table of Contents

自定义 Ant Design 的主题
兼容 ConfigProvider 的 theme 用法
函数写法方法
自定义 Token
自定义外观模式
基础知识
简介
CSS in JS 快速入门
CSS in JS 写法对比
设计理念与实施策略
快速上手
书写样式
切换主题
自定义主题
进阶使用
Babel 插件
SSR 集成
组件研发
集成 styled
🚧 stylish 复合样式
CSSinJS 样式库性能对比
从 Less 迁移
Less 应用自动化迁移
Less 应用手动迁移
Less 组件迁移
🚧 CSSinJS 与 Less 的编译差异
上一篇
切换主题
下一篇
Babel 插件

相关资源

Ant Design
Ant Design Pro
Ant Design Pro Components
Umi-React 应用开发框架
Dumi-组件/文档研发工具
qiankun-微前端框架

社区

Medium
Twitter
yuqueAnt Design 语雀专栏
Ant Design 知乎专栏
体验科技专栏
seeconfSEE Conf-SEE Conf-蚂蚁体验科技大会

帮助

GitHub
更新日志
讨论

more products更多产品

yuque语雀-知识创作与分享工具
AntVAntV-数据可视化解决方案
EggEgg-企业级 Node.js 框架
kitchenKitchen-Sketch 工具集
xtech蚂蚁体验科技
Copyright © 2022-2024
Made with ❤️ by 蚂蚁集团 - AFX & 数字科技
‌
‌
‌
‌

自定义主题

antd-style 结合业务研发的完整经验,提供了强大灵活的主题自定义能力,将以下三方面介绍:1) antd 主题定制、2) 自定义应用 Token 、3)自定义外观模式。

自定义 Ant Design 的主题

antd v5 的 ConfigProvider 提供了 theme 配置,可以传入自定义的 theme 对象来实现自定义主题。antd-style 的 ThemeProvider 在 ConfigProvider 基础上做了二次封装,为自定义主题提供了更加便捷的方式。

兼容 ConfigProvider 的 theme 用法

tsx

函数写法方法

对于 antd 来说,为保证功能的原子性和可组合型,ConfigProvider 只会保存一种主题状态,因此如果需要支持常见的亮暗色主题切换,就需要应用层自行封装。

antd-style 作为应用层,定义了 appearance 字段,进而默认支持亮暗色主题切换。因此 theme 配置也支持传入函数分别设定不同外观模式下的主题。

tsx

函数的入参为当前的主题外观,出参为 theme 对象。

ts
使用建议

在实际的应用研发中,由于可能会存在主题配置较多的情况,因此建议将主题配置抽离到单独的文件中,然后统一成一个 getAntdTheme 导出使用。(案例参考)

自定义 Token

在设计之初, Ant Design 默认的 Token 体系并不是面向所有业务定制化的诉求而打造的,它只包含了 Ant Design 设计系统所必须的 token。在绝大多数业务场景中,我们往往需要自定义一些 Token ,以便于在应用中统一消费。可能你会觉得 Token 只有设计师才需要关心,但是实际上 Token 体系是应用规范的基础,大到一个渐变的样式,小到顶部导航栏的宽度,都可以收到 token 体系中统一管理与消费。

因此 antd-style 中提供了自定义 token 的能力,让应用层可以自定义自己的 token,并在 createStyles 、 styled 等样式方法中使用。

在 ThemeProvider 中,可以通过 customToken 字段传入自定义的 token。和 theme 的使用逻辑一样,你既可以传入一个对象,也可以传入一个函数。

tsx

函数的入参为我们内置的一些方法,但出参为 token 对象。在该方法入参中,你可以拿到当前的主题外观、antd 的 token 值,进而实现自定义 token 的主题继承效果。

tsx

关于自定义 Token API 的 demo、Typescript 类型定义集成 等详细介绍,可以查阅 ThemeProvider - 注入自定义 Token 主题。

应用案例

antd-style 所使用的文档主题包,就自定义了主题包所需的一些自定义 Token,若感兴趣可以前往 dumi-theme-antd-style 查看。

自定义外观模式

此外,由于 appearance 可以受控使用,因此也可以自定义 Appearance 模式来扩展不同主题。

WARNING

如果你需要自定义外观模式,建议不要将 themeMode 设为 auto,因为这样会导致外观模式受到系统主题切换的影响,可能会和你的预期不相符。