npm install --save styled-jss
Install peer dependencies react
and react-dom
in your project.
import styled from 'styled-jss'
const Button = styled('button', {
fontSize: 12,
color: (props) => props.theme.textColor
})
// Composition.
const PrimaryButton = styled(Button, {
color: 'red'
})
Using base Style Sheet we can share classes between styled primitives and render function.
import { Styled, injectStyled } from 'styled-jss'
// Base styles, like a regular jss object.
const styled = Styled({
root: {
margin: 10,
'& $baseButton': {
fontSize: 16
}
},
baseButton: {
padding: 10,
'& + &': {
marginLeft: 10
}
}
})
const NormalButton = styled('button', {
composes: '$baseButton',
border: [1, 'solid', 'grey'],
color: 'black'
})
// Composition - same way.
const PrimaryButton = styled(NormalButton, {
color: 'red'
})
// One can use classes AND styled primitives.
const MyComponent = ({classes}) => (
<div className={classes.root}>
<NormalButton>normal button</NormalButton>
<PrimaryButton>primary button</PrimaryButton>
</div>
)
const MyStyledComponent = injectStyled(styled)(MyComponent)
styled-jss
uses jss-preset-default by default. You can require createStyled
function and provide your custom JSS instance.
import { create as createJss } from 'jss'
import vendorPrefixer from 'jss-vendor-prefixer'
import createStyled from 'styled-jss/createStyled'
const jss = createJss()
jss.use(vendorPrefixer())
// Create a custom Styled function, that allows to set BaseStyles.
export const Styled = createStyled(jss)
// Create a custom styled function that allows to create styled components.
const styled = Styled()
export default styled
MIT