Demo using Gatsby, styled-components, and wrapping the root element to use ThemeProvider
// gastby-browser.js
import React from 'react'
import { ThemeProvider } from 'styled-components'
const theme = {
main: '#c6797e',
}
export const wrapRootElement = ({ element }) => (
<ThemeProvider theme={theme}>{element}</ThemeProvider>
)
// src/components/layout.js
import React from 'react'
import PropTypes from 'prop-types'
import { useStaticQuery, graphql } from 'gatsby'
import styled from 'styled-components'
import Header from './header'
import './layout.css'
const Container = styled.div`
background-color: ${props => props.theme.main};
margin: 0 auto;
max-width: 960px;
padding: 0px 1.0875rem 1.45rem;
padding-top: 0;
`
const Layout = ({ children }) => {
const data = useStaticQuery(graphql`
query SiteTitleQuery {
site {
siteMetadata {
title
}
}
}
`)
return (
<>
<Header siteTitle={data.site.siteMetadata.title} />
<Container>
<main>{children}</main>
<footer>
© {new Date().getFullYear()}, Built with
{` `}
<a href="https://www.gatsbyjs.org">Gatsby</a>
</footer>
</Container>
</>
)
}
Layout.propTypes = {
children: PropTypes.node.isRequired,
}
export default Layout