Getting Started
Install Theme UI.
npm i theme-ui
Create a theme object to include custom color, typography, and layout values.
// example theme.jsexport default {fonts: {body: 'system-ui, sans-serif',heading: '"Avenir Next", sans-serif',monospace: 'Menlo, monospace',},colors: {text: '#000',background: '#fff',primary: '#33e',},}
Add the theme to your application with the ThemeProvider
, passing in the theme
object as a prop.
// basic usageimport React from 'react'import { ThemeProvider } from 'theme-ui'import theme from './theme'export default props => (<ThemeProvider theme={theme}>{props.children}</ThemeProvider>)
sx
prop
Use the sx
prop throughout your application to add styles based on your theme to any component.
Enable the sx
prop by adding the /** @jsx jsx */
comment to the top of your file and importing jsx
from Theme UI.
/** @jsx jsx */import { jsx } from 'theme-ui'export default props => (<divsx={{fontWeight: 'bold',fontSize: 4, // picks up value from `theme.fontSizes[4]`color: 'primary', // picks up value from `theme.colors.primary`}}>Hello</div>)
Responsive styles
The sx
prop also supports using arrays as values to change properties responsively with a mobile-first approach.
/** @jsx jsx */import { jsx } from 'theme-ui'export default props => (<divsx={{// applies width 100% to all viewport widths,// width 50% above the first breakpoint,// and 25% above the next breakpointwidth: ['100%', '50%', '25%'],}}/>)
Components
Theme UI includes a library of primitive UI components, which can be completely customized with your theme and include support for variants. Import and use these components to handle layout, images, forms, and more.
/** @jsx jsx */import {jsx,Box,Label,Input,Button,} from 'theme-ui'export default props =><Box sx={{ mb: 4 }}><Label htmlFor='search'>Search</Label><Inputid='search'name='search'{...props}/><Button>Go</Button></Box>
See the Components documentation for more.
Edit the page on GitHub