antd v5 https://ant.design/theme-editor-cn
image.png
主题颜色参考

antd v5 token design 主题

Antd5 主题编辑 https://ant-design.antgroup.com/theme-editor-cn

  1. // 绿色主题
  2. {
  3. "token": {
  4. "colorPrimary": "#52C41A",
  5. "fontSize": 12,
  6. "borderRadius": 0,
  7. "wireframe": false
  8. }
  9. }
  10. // 深蓝主题
  11. {
  12. "token": {
  13. // "#0070cc", aliyun
  14. "colorPrimary": "#0052d9", // Tdesign
  15. "colorInfo": "#0052d9",
  16. "fontSize": 14,
  17. "wireframe": true
  18. }
  19. }

紧凑算法 theme.compactAlgorithm

  • height高度 28px
  • 默认高度 32px

antd pro theme

  1. const themePro = {
  2. "navTheme": "light",
  3. "primaryColor": "#722ED1", // "#52C41A"
  4. "layout": "mix",
  5. "contentWidth": "Fluid",
  6. "fixedHeader": false,
  7. "fixSiderbar": true,
  8. "pwa": false,
  9. "logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
  10. "headerHeight": 48
  11. }

ConfigProvider 自定义主题

  1. 全局主题,包裹 App
  2. 局部自定义主题,包裹组件
  3. 组件级主题,例如 ConfigProvider theme=/Table

通过传入不同的主题算法,我们甚至可以控制组件在不同应用场景下的展示形态
自定义主题算法是一个全局风格的调整
好处:通过少的 token 自定义 seedToken,实现风格感受很不一样的主题

全局主题

  1. import { theme } from 'antd';
  2. import type { MappingAlgorithm } from 'antd/es/config-provider/context';
  3. // 定义 studio 暗色模式算法
  4. export const studioDarkAlgorithm: MappingAlgorithm = (seedToken, mapToken) => {
  5. // 使用 antd 默认的暗色算法生成基础token,这样其他不需要定制的部分则保持原样
  6. const baseToken = theme.darkAlgorithm(seedToken, mapToken);
  7. return {
  8. ...baseToken,
  9. colorBgLayout: '#d8d8d8', // Layout 背景色
  10. colorBgContainer: '#282c34', // 组件容器背景色
  11. colorBgElevated: '#32363e', // 悬浮容器背景色
  12. };
  13. };
  14. // 在应用中集成
  15. const Container =()=>{
  16. return (
  17. <ConfigProvider theme={{ algorithm: studioDarkAlgorithm }}>
  18. <App />
  19. </ConfigProvider>
  20. )
  21. }

局部主题

  1. <ConfigProvider theme={{ algorithm: theme.darkAlgorithm }}>
  2. <Table />
  3. </ConfigProvider>

组件主题

component 字段聚合调整每个组件的 token

  1. <ConfigProvider
  2. theme={{ components: {
  3. Button: { colorPrimary: '#f90'},
  4. Checkbox: { colorPrimary: '#f90'},
  5. }
  6. }}
  7. >
  8. <PageContainer></PageContainer>
  9. </ConfigProvider>

antd v4 less 主题

https://ant.design/docs/react/customize-theme-cn
https://ant-design.antgroup.com/docs/react/faq-cn
https://ant-design.antgroup.com/docs/react/customize-theme-cn

默认的主题

https://antdtheme.com/aliyun
image.png

使用 less 提供的 modifyVars 的方式进行覆盖变量

less变量自定义主题

默认less主题
https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less

全局 less变量
https://github.com/ant-design/ant-design/blob/master/components/style/themes/variable.less

建立一个单独的 less 变量文件,引入这个文件覆盖 antd.less 里的变量,缺点

  • 载入了所有组件的样式,
  • 不需要也无法和按需加载插件 babel-plugin-import 的 style 属性一起使用
    1. @import '~antd/lib/style/themes/default.less';
    2. @import '~antd/dist/antd.less'; // 引入官方提供的 less 样式入口文件
    3. @import 'your-theme-file.less'; // 用于覆盖上面定义的变量

Card padding

  1. @card-padding-base: 24px

image.png

动态主题

https://ant.design/docs/react/customize-theme-variable-cn
如果使用了 babel-plugin-import,需要将其去除