Our humble recommendation is to use material-ui, which now interops with styled-components fairly well.
Styled Components inspired library that implements Material Design for stress free React Application scaffolding.
- Inspiration and goals
- Getting Started
- Contributing
- How to use
- Theme Provider
- Component Example
- Decorator Example
- Styled Components is a great way to couple components with styles.
- Material Components is the best implementation of material design spec (it is google afterall)
- We want a native react implementation of the above, and Styled Components gives us that power.
- Sass Mixins can be mostly written as styled component mixins. See src/mixins/ for examples of this.
- Fork the repo
- Run:
yarn install
yarn build
yarn run dev
- Open http://localhost:8081 in your browser
- Check out our Contributing Guide
- Please follow the Code of Conduct
All components in this library are either:
- Already styled components and will work when wrapping with styled()
- Handle the className prop correctly so that wrapping with styled() will work.
Similar to the Styled Components ThemeProvider (its a thin wrapper around it) except that it provides a default theme that matches material design's default theme. You can provide a custom theme here with any option from src/theme/defaultTheme.js overwritten. You can nest ThemeProviers just like with StyledComponents to overwrite portions of the theme for sections of your application
Prior to version 0.1.1-beta we injected global styles behind the scenes. In our use case this lead to us having to override these often. Styled-components v4 created a new createGlobalStyle builder that exports components. So now you can import these global styles manually and add them to your code where and if you want.
- SMCGlobalStyles (includes the app wide styles that are typical in most material apps)
- DrawerGlobalStyles (includes some global styles that push content around on the screen when the presence of a drawer is detected)
This component is for creating a material design button. It has props that match the documentation from Material Components
Example Implementation:
// Flat button with primary text color
<Button primary>I’m a Button</Button>
// Flat button with accent text color
<Button accent>I’m a Button</Button>
// Raised button with primary background color
<Button raised primary>I’m a Button</Button>
This is a decorator (higher order component) to add a javascript ripple effect to any element that can have a className attached to it.
const JSRippleButton = withRipple(Button);
<JSRippleButton raised primary>Test</JSRippleButton>