Styled Components
Theme UI itself doesn’t expose an API for styled components, but works
seamlessly with the styled
API from the @emotion/styled package.
Components written with it should have access to the same theming context that
Theme UI uses.
Instead of using the ThemeProvider
component from @emotion/react
, import and
use the Theme UI provider at your app’s root level.
/** @jsxImportSource theme-ui */import { ThemeUIProvider } from 'theme-ui'import theme from './theme'import SomeComponent from './SomeComponent'export default (props) => (<ThemeUIProvider theme={theme}><SomeComponent /></ThemeUIProvider>)
If you’re using the Styled Components library, these can usually be
converted to use Emotion with a single line change to the import
statement.
// beforeimport styled from 'styled-components'
// afterimport styled from '@emotion/styled'
Using the sx
prop
Theme UI is actively working on removing its internal dependency on
@emotion/styled
to reduce bundle size. While Styled Components made with the
package will continue to work into the future, we recommend using the
sx
prop instead for simpler styling with
object styles.
Edit the page on GitHub/** @jsxImportSource theme-ui */const Section = ({ width, color, bg, ...props }) => (<section{...props}sx={{width,color,bg,// additional styles...}}/>)