升级 Ant Design 5.x,构建项目定制主题,并在 CSS 变量中共享主题样式

Ant Design 5.x 升级后,整体依赖的配置大大减少,更容易引入。

移除 less

Ant Design 5.0 中移除了 less 的使用,改为 css-in-js,这意味着引入它不再需要进行一堆的配置,更容易在更多环境下引入,也不会污染项目原因的全局样式了。

记录一下原有的 4.0 项目升级的过程:

  • 移除 craco,恢复使用 react-scripts
  • 移除脚手架中对 less 的设置
  • 移除 babel-plugin-import
  • 移除对 antd 的 less 文件的引用

定制主题

改为通过设置 theme,传入 token 去设置。

<ConfigProvider
  theme={{
    token: {
      colorPrimary: '#333333',
      colorPrimaryBg: '#fafafa',
      controlOutline: 'rgb(51,51,51,.2)',
      colorLink: '#FFC725',
      colorLinkActive: '#d9a116',
      colorLinkHover: '#ffd94f',
    },
  }}
  locale={zhCN}
>
</ConfigProvider>

使用自定义变量信息

通过 useToken 可读取到当前的变量信息,这样就可以使用到其他的 js 组件中。

import { theme } from 'antd';
const { useToken } = theme;

let { token } = useToken();

token 里的变量值也是自定义主题中的可设置值,发现哪里不合适进行一下设置即可。

在 CSS 变量中共享主题样式

也可以通过 style 标签,把这些变量导入到 css 变量中:

const CssTheme: React.FC = () => {
  let { token } = useToken();
  const globalVars = `html {
    --ant-color-primary: ${token.colorPrimary};
    --ant-color-primary-hover: ${token.colorPrimaryHover};
    --ant-control-outline: ${token.controlOutline};
    --ant-color-link: ${token.colorLink};
    --ant-screen-sm: ${token.screenSM};
    --ant-color-link-active: ${token.colorLinkActive};
    --ant-color-link-hover: ${token.colorLinkHover};
  }`;
  return <style>{globalVars}</style>;
};
export default CssTheme;

这样在原有使用 less 变量的项目样式文件中,就可以改为对应的 CSS 变量了,改动量小。

本文收录于专栏
一些博客建设的记录