通常,当使用纯 CSS 时,我有一个样式表,其中包含:
html {
height: 100%;
}
body {
font-size: 14px;
}
在我的 React 项目中使用styled-components
时,如何设置html
orbody
标签的样式?我是否为此目的维护一个单独的 CSS 文件?
通常,当使用纯 CSS 时,我有一个样式表,其中包含:
html {
height: 100%;
}
body {
font-size: 14px;
}
在我的 React 项目中使用styled-components
时,如何设置html
orbody
标签的样式?我是否为此目的维护一个单独的 CSS 文件?
当然,您可以维护一个单独的 CSS 文件,通过<link>
标签将其包含在 HTML 中。
v4
:使用Styled-components 中的createGlobalStyle。
import { createGlobalStyle } from 'styled-components'
const GlobalStyle = createGlobalStyle`
body {
color: ${props => (props.whiteColor ? 'white' : 'black')};
}
`
<React.Fragment>
<GlobalStyle whiteColor />
<Navigation /> {/* example of other top-level stuff */}
</React.Fragment>
v4
:Styled-components 还导出了一个injectGlobal
帮助器来从 JavaScript 中注入全局 CSS:
import { injectGlobal } from 'styled-components';
injectGlobal`
html {
height: 100%;
width: 100%;
}
`
有关更多信息,请参阅API 文档!
截至 2018 年 10 月。
笔记
在 styled-components v4 中,injectGlobal API 被移除并被 createGlobalStyle 取代。
根据文档createGlobalStyle
是
用于生成处理全局样式的特殊 StyledComponent 的辅助函数。通常,样式化组件会自动限定为本地 CSS 类,因此与其他组件隔离。在 createGlobalStyle 的情况下,这个限制被移除,并且可以应用诸如 CSS 重置或基本样式表之类的东西。
例子
import { createGlobalStyle } from 'styled-components'
const GlobalStyle = createGlobalStyle`
body {
color: ${props => (props.whiteColor ? 'white' : 'black')};
}
`
// later in your app
<React.Fragment>
<Navigation /> {/* example of other top-level stuff */}
<GlobalStyle whiteColor />
</React.Fragment>
阅读更多官方文档。
如果你使用material-UI,那么你不需要styled-components
实现这个。您可以简单地覆盖 theme.js 文件中设置的默认背景:
overrides: {
palette: {
background: {
default: "#fff"
}
}
}
然后,您只需将根组件包装在Material-UI CssBaseLine 组件中:
<MuiThemeProvider theme={muiTheme}>
<CssBaseline />
<App />
</MuiThemeProvider>
该基线组件设置元素的默认背景<body>
。
也看看这个问题:https ://github.com/mui-org/material-ui/issues/10764