我在尝试一个很简单的方法:使用Material-UI主题为网站构建两个主题:
一个light
主题和一个dark
主题,但效果不佳:主题在每个Material-UI react元素上,但是html文档上的根元素保持相同的默认白色背景。
当然,它可以通过用pure .css攻击身体来改变:
body {
background-color: #222;
}
但我希望用React动态地更改它,我认为这会起作用,但它没有:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { ThemeProvider } from '@material-ui/styles';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
const themeLight = createMuiTheme({
palette: {
background: {
default: "#e4f0e2"
}
},
});
const themeDark = createMuiTheme({
palette: {
background: {
default: "#222222",
}
},
});
ReactDOM.render(
<MuiThemeProvider theme = { themeDark }>
<App />
</MuiThemeProvider>, document.getElementById('root'));
我在这里迷路了,有没有办法使这个与材料用户界面的主题?
8条答案
按热度按时间3duebb1j1#
CssBaseline是控制这方面的组件,如果你没有使用
CssBaseline
,那么你只看到浏览器提供的默认值。下面是一个正在运行的v4示例(下面是v5示例):
下面是一个Material-UI v5示例。与v4的唯一区别是
ThemeProvider
(尽管此名称在v4中除MuiThemeProvider
外也可用)和createTheme
(而不是createMuiTheme
)的名称更改,以及使用新的@mui/material
程序包名称而不是@material-ui/core
。u1ehiz5o2#
在MUI v5中,还可以使用
GlobalStyles
组件将样式添加到body
元素中:idfiyjo83#
除了@NearHuscarl的回答之外,在CSSBaseLine之后导入GlobalStyles将保留页面默认值(如边距:0等)仍然能够定制根级/全局样式。例如,
(我只是出于习惯使用class组件😅)
嵌套主题MUI Theme toggle的完整示例
kkih6yb84#
我的用例,我只想在React组件中更改
body
的background-color
,而不是整个主题。TL;DR代码:
4ioopgfo5#
MUI版本5
MUI版本4
同样简单的是,改变托盘类型为暗默认设置为亮。2这也将有助于自定义颜色的其他组件,如排版,图标等
bjp0bcyl6#
ReactDOM不会替换目标元素。我个人没有使用过材质ui。但是,如果您将所需的背景色放入App状态中,例如'currentRootColor',则可以在App组件的呈现函数中放入:
这将设置主体的背景色,如果您更改'this.state. currentRootColor',则应用组件将使用新的背景色重新呈现。
但是,如果< body >您的文档中还没有标记,则需要添加一个。
nr9pn0ug7#
在MUI v5中,这似乎对我很有效,我用它只对主页应用特定的样式(覆盖默认样式)。
...
注意:将
<GlobalStyles />
提升为静态常量是一个很好的做法,以避免重新渲染。这将确保生成的标记不会在每次渲染时重新计算。...
....
更多信息:
https://mui.com/material-ui/customization/how-to-customize/
https://mui.com/material-ui/api/global-styles/
cngwdvgl8#
以上所有的答案对我都不起作用,为什么??我不知道。
我用
ScopedCssBaseline
覆盖了我的所有组件,mui
将只对子组件应用调色板样式。以下是我的回答,