如何使用 JSS 向 body 元素添加样式?
How can I add style to the body element with JSS?
我正在构建一个使用 react-jss 来设置组件样式的应用程序,想知道是否可以将样式添加到顶级元素(如 html
或 body
)。
为了说明,我有一个简单的 NotFound 组件,我正在使用 react-jss 进行样式设置。样式工作正常,但问题是 body
元素有一个我想删除的默认边距。
NotFound.js
import React from 'react';
import injectSheet from 'react-jss';
const styles = {
notFound: {
fontFamily: 'Roboto',
backgroundColor: 'blue',
color: 'white'
}
}
function NotFound({ classes }) {
return (
<div className={classes.notFound}>
NOT FOUND
</div>
)
}
export default injectSheet(styles)(NotFound);
有谁知道是否可以使用 css-in-js 删除此边距? (我想避免 css)
您可以使用 jss-plugin-global 引入的语法
'@global': {
body: {...}
}
还建议为此创建一个单独的组件并用它包装您的组件。否则您的特定组件将变得不那么可重用。
为了详细说明 Oleg 的回应,我就是这样做的:
1.Create 我自己的 JssProvider。 注意: 还必须添加 jss-plugin-camel-case
否则它不会将我的属性从 camelCase
解析为 lisp-case
:
import App from './App';
import { create } from 'jss';
import { JssProvider } from 'react-jss';
import globalPlugin from 'jss-global';
import camelCase from 'jss-plugin-camel-case';
const jss = create();
jss.use(globalPlugin(), camelCase());
render(
<JssProvider jss={jss}>
<Router>
<App />
</Router>
</JssProvider>
document.getElementById("app")
);
2.Added 我的全局 属性 到我的顶级组件
import React from "react";
import Main from "./common/ui/components/Main";
import NotFound from "./components/NotFound";
import injectSheet from 'react-jss';
const style = {
'@global': {
body: {
margin: 0
}
}
};
const App = () => {
return (
<Main>
<Switch>
<Route component={NotFound}/>
</Switch>
</Main>
);
};
export default injectSheet(style)(App);
就是这样!工作得很好。
编辑: 经过更多研究,我发现我不需要第 1 步。只需将 @global
样式添加到我的 App
组件即可工作。我想这个 jss-global
插件必须是 react-jss
中的默认插件。 (如果我错了,有人纠正我)
我正在构建一个使用 react-jss 来设置组件样式的应用程序,想知道是否可以将样式添加到顶级元素(如 html
或 body
)。
为了说明,我有一个简单的 NotFound 组件,我正在使用 react-jss 进行样式设置。样式工作正常,但问题是 body
元素有一个我想删除的默认边距。
NotFound.js
import React from 'react';
import injectSheet from 'react-jss';
const styles = {
notFound: {
fontFamily: 'Roboto',
backgroundColor: 'blue',
color: 'white'
}
}
function NotFound({ classes }) {
return (
<div className={classes.notFound}>
NOT FOUND
</div>
)
}
export default injectSheet(styles)(NotFound);
有谁知道是否可以使用 css-in-js 删除此边距? (我想避免 css)
您可以使用 jss-plugin-global 引入的语法
'@global': {
body: {...}
}
还建议为此创建一个单独的组件并用它包装您的组件。否则您的特定组件将变得不那么可重用。
为了详细说明 Oleg 的回应,我就是这样做的:
1.Create 我自己的 JssProvider。 注意: 还必须添加 jss-plugin-camel-case
否则它不会将我的属性从 camelCase
解析为 lisp-case
:
import App from './App';
import { create } from 'jss';
import { JssProvider } from 'react-jss';
import globalPlugin from 'jss-global';
import camelCase from 'jss-plugin-camel-case';
const jss = create();
jss.use(globalPlugin(), camelCase());
render(
<JssProvider jss={jss}>
<Router>
<App />
</Router>
</JssProvider>
document.getElementById("app")
);
2.Added 我的全局 属性 到我的顶级组件
import React from "react";
import Main from "./common/ui/components/Main";
import NotFound from "./components/NotFound";
import injectSheet from 'react-jss';
const style = {
'@global': {
body: {
margin: 0
}
}
};
const App = () => {
return (
<Main>
<Switch>
<Route component={NotFound}/>
</Switch>
</Main>
);
};
export default injectSheet(style)(App);
就是这样!工作得很好。
编辑: 经过更多研究,我发现我不需要第 1 步。只需将 @global
样式添加到我的 App
组件即可工作。我想这个 jss-global
插件必须是 react-jss
中的默认插件。 (如果我错了,有人纠正我)