loading...

5 steps to change antd theme on runtime using create-react-app

christianandrei profile image Christian Andrei Updated on ・3 min read

Before we start, install antd on your app (create-react-app) and add some layout, components and toggle switch to it. We will also use antd.css for the default styling of components but we will remove it later and use less instead.

Alt Text

Step 1 - Install packages needed

  1. react-app-rewired
  2. customize-cra
  3. babel-plugin-import
  4. less
  5. less-loader
  6. antd-theme-webpack-plugin
npm install react-app-rewired customize-cra babel-plugin-import less less-loader antd-theme-webpack-plugin  --save-dev
Enter fullscreen mode Exit fullscreen mode

explanation:

  • react-app-rewired: tweak the create-react-app webpack config(s) without using 'eject' and without creating a fork of the react-scripts.
  • customize-cra: we need customize-cra along with react-app-rewired due to new react-app-rewired@2.x issue.
  • babel-plugin-import: for importing components on demand.
  • less: default development language for styling in antd.
  • less-loader: compiler for translating less into css.
  • antd-theme-webpack-plugin: a webpack plugin to generate color specific less/css and inject into your index.html file so that you can change Ant Design specific color theme in browser.

Step 2 - Create vars.less file

Create a vars.less file somewhere inside the src folder and inside the file, import the default less that used by antd:

Alt Text

Step 3 - Create config-overrides.js file

On the root directory of your app (where package.json reside), create config-overrides.js file and add the following code:

Some options explanation:

  • stylesDir: path of the parent directory of vars.less file that you created on Step 2
  • varFile: path of vars.less file that you created on Step 2
  • themeVariables: listed values on this are the only less variables that you can modify on Step 5. Here (default less used by antd) are the list of variables that you can add to it.

Note: if you are using less-loader@5 please check this

Step 4 - Modify package.json

On the script part of package.json, we will use react-app-rewired instead of react-scripts:

Alt Text

Note: Do NOT flip the call for the eject script.

You can now start your app:

npm start
Enter fullscreen mode Exit fullscreen mode

Step 5 - Modify less vars in javascript

If the app started without errors, then you are good to go to the final step.

Here is a sample code on how to modify a less variables:

//less variables that will be used here must be declared in themeVariables on config-overrides.js
window.less
    .modifyVars({
        "@primary-color": "#52c41a"
     })
    .then(() => {
        //do other stuff here
     })
     .catch(error => {
         console.error(error);
     });
Enter fullscreen mode Exit fullscreen mode

Alt Text

You can now remove your import antd.css

Live preview: https://antd-change-theme-color.netlify.app/
Code: https://github.com/christianandrei/antd-change-theme-color

Happy coding!

Discussion

pic
Editor guide
Collapse
julsbenandiel profile image
julsbenandiel

will definitely try this on! thanks for sharing! :D

Collapse
kamo profile image
KAIDI

It looks interesting, time to try, thanks for sharing