gatsby-theme-material-ui
A Gatsby theme for Material-UI: The fastest way to build server-side rendered Material-UI websites
Install
// with npm
npm install gatsby-theme-material-ui @material-ui/core
// with yarn
yarn add gatsby-theme-material-ui @material-ui/core
Theme vs. Plugin
gatsby-plugin-material-ui
solves FOUC, auto prefixing and minification.gatsby-theme-material-ui
uses the plugin under the hood, adds web fonts, meta-viewport, CSS baseline and mui theme support and has material ui styled gatsby link components
How to use
Edit gatsby-config.js
module.exports = {
plugins: [`gatsby-theme-material-ui`],
};
top-layout
You’ll see several references below to the “top-layout” theme. Its role is to prevent the Flash Of Unstyle Content.
Style Library Interoperability
This theme is compatible with other CSS-in-JS solutions out of the box. To prevent unintentional style clobbering, Material-UI styles are injected before those generated by your styling library of choice. Read more about this strategy at the Material-UI docs.
Autoprefixing and minification
By default, the plugin adds vendor-specific prefixes and minimizes the server-side CSS. The following options are available for deactivating:
Option | Default | Description |
---|---|---|
disableAutoprefixing | false | Opt-out Autoprefixing (autoprefixer) |
disableMinification | false | Opt-out minification (clean-css) |
module.exports = {
plugins: [
{
resolve: `gatsby-theme-material-ui`,
options: {
stylesConfig: {
// disableAutoprefixing: true,
// disableMinification: true
},
},
},
],
};
WebFonts
Material-UI was designed with the Roboto font in mind. The Roboto font will be automatically loaded by gatsby-theme-material-ui. You can override this behavior as follows:
Edit theme.js
// src/gatsby-theme-material-ui-top-layout/theme.js
import { createMuiTheme } from "@material-ui/core";
const theme = createMuiTheme({
typography: {
fontFamily: [
'Montserrat',
'sans-serif'
].join(','),
},
...
});
export default theme;
Edit gatsby-config.js
// gatsby-config.js
module.exports = {
plugins: [
{
resolve: `gatsby-theme-material-ui`,
options: {
webFontsConfig: {
fonts: {
google: [
{
family: `Montserrat`,
variants: [`300`, `400`, `500`],
},
],
},
},
},
},
],
};
For more options, have a look at the plugin readme.
Theming
Create & Edit src/gatsby-theme-material-ui-top-layout/theme.js
import { createMuiTheme } from "@material-ui/core";
const theme = createMuiTheme({
// palette: {
// type: 'dark',
// },
});
export default theme;
Gatsby Link
import React from "react";
import { Typography } from "@material-ui/core";
//import { Link } from "gatsby"
import { Link } from "gatsby-theme-material-ui";
const Page = () => (
<div>
<Typography>
Check out my <Link to="/blog">blog</Link>!
</Typography>
</div>
);
export default Page;
The following components have also been adapted for use with Gatsby:
import {
BottomNavigationAction,
Button,
CardActionArea,
Fab,
IconButton,
Link,
} from "gatsby-theme-material-ui";
For <Button>
s with href
URLs, use the to
attribute instead of href
, to enable Gatsby link features.
Customizing
Create & Edit src/gatsby-theme-material-ui-top-layout/components/top-layout.js
import React from "react";
import { Provider } from "react-redux";
import ThemeTopLayout from "gatsby-theme-material-ui-top-layout/src/components/top-layout";
import createStore from "../../state/createStore";
export default function TopLayout({ children, theme }) {
const store = createStore();
return (
<Provider store={store}>
<ThemeTopLayout theme={theme}>{children}</ThemeTopLayout>
</Provider>
);
}