Material UI Theming
Let's Test it out!
Getting started
First things first, use create-react-app
to create a new project.
Next, let's use Material UI. In their 'Getting Started' section on their website, they give you the code to install it in your React project.
The next thing they require is the Roboto font and—if you want to use the <Icon>
component—Material icons which can be included in the head of your html
Now let's render some stuff. Create a new component called Header.js
and copy this block of code into it.
Now replace the App component in your index.js
with your fancy new Header component et VOILA! You should have a header with two buttons. Very exciting.
The buttons have a lovely ripple effect and they are blue. Why? Because that is Material UI's default theme. You can see the full details of the default styles.
Enter the Theme
The first thing that needs to be done is to add a theme.js
file in your src folder. In this file, the first thing we want to do is import some things. The first thing we want to import is the theme!
We're going to import the createMuiTheme, then export it again with the values we want.
Let's change the color of our AppBar. We're going to import a couple of color values from @material-ui/core/colors
and put them into the palette
section.
So, we've customised our theme, now what?
First, we have to import the theme provider
MuiThemeProvider
.Next, we'll have to import the our theme file.
Finally, we'll have to encapsulate our app inside the provider and pass our theme in as a prop.
Rather than apply our theme to a modular component like a header, let's clear out our App.js
and import our MuiThemeProvider and Header in there.
Your App.js
should now look like this:
And if you look at your page, your AppBar is now pink!
The next step
This is super rad, but what if you want to customise all instances of a particular component, like a button or icon?
To do this, we'll need to head back to our theme.js
file and add another section to our theme object.
You will need to provide the name and class of the component you want to customize. If you're not sure what this is, you can find it in the Material UI API documentation in the CSS section. You should be able to see all the customisable options. (Here is the documentation for the Button component)
Let's override some button style shall we?
In your theme section, below the palette
object, add an overrides
object. Within your overrides
object, add the name of the component to be overridden (in our case MuiButton
) and open an object. In your MuiButton
object, give it a root
object. This will be where we play around with the CSS properties. We'll give the root
object two values: 1. color: white,
will change the color of the button text to be white 2. '&:hover': { backgroundColor: 'purple' }
will apply background-color: 'purple'
styling when a cursor hovers over it.
Your theme.js
should now look like this:
Save the file and go check out your swanky new AppBar!
What Now?
With theming, you can easily change lots of components very quickly. Making a theme for your site can expedite the styling process and keep it simple and clean.
But there is more to theming than just changing colors on buttons! So test it out! Investigate the docs! Make the ugliest website you can imagine! Make the prettiest!
Research a different React Framework. Do they have themes? If so, how is their theming different? Is it easier or harder to use?
Last updated