![](/img/trans.png)
[英]How change default typography class of a formcontrollabel - material-ui | React?
[英]How can I change styling of all Material UI Typography components in single react component without applying a class to every element?
我正在为您在带有 Material UI 组件的 React SPA 中应用 styles 的方式而苦苦挣扎。 我感觉错过了这个概念的一些关键点。
假设我有以下Header
组件:
const Header = () => (
<AppBar position="fixed" >
<Toolbar>
<Link component={RouterLink} to="/">
<Typography variant="h6" noWrap>
Home
</Typography>
</Link>
<Link component={RouterLink} to="/trainings">
<Typography variant="h6" noWrap>
Trainings
</Typography>
</Link>
</Toolbar>
</AppBar>
);
如何应用一些样式来说明Header
组件中的所有Typography
组件。 我知道我可以像这样使用makeStyles
和useStyles
钩子:
const useStyles = makeStyles((theme: Theme) =>
createStyles({
headerText: {
color: 'white',
},
})
);
const Header: FC = () => {
const classes = useStyles();
return (
<div>
<AppBar position="fixed">
<Toolbar>
<Link component={RouterLink} to="/">
<Typography className={classes.headerText} variant="h6" noWrap>
Home
</Typography>
</Link>
<Link component={RouterLink} to="/trainings">
<Typography className={classes.headerText} variant="h6" noWrap>
Trainings
</Typography>
</Link>
</Toolbar>
</AppBar>
</div>
);
};
export default Header;
但这需要我将className
属性应用于我想要设置样式的每个元素。
我还提出了以下似乎可行的解决方案,它将颜色应用于根div
下的所有h6
元素。
const useStyles = makeStyles((theme: Theme) =>
createStyles({
headerText: {
'& h6': {
color: 'white',
},
},
})
);
const Header: FC = () => {
const classes = useStyles();
return (
<div className={classes.headerText}>
<AppBar position="fixed">
<Toolbar>
<Link component={RouterLink} to="/">
<Typography variant="h6" noWrap>
Home
</Typography>
</Link>
<Link component={RouterLink} to="/trainings">
<Typography variant="h6" noWrap>
Trainings
</Typography>
</Link>
</Toolbar>
</AppBar>
</div>
);
};
但是所有这些解决方案都感觉不太对^^
有没有办法只说'我希望这个Header
组件中white
所有Typography
组件都具有color
?
您可以使用MuiThemeProvider
提供主题 object 并在那里进行更改。 如果您查看文档
const theme = createMuiTheme({
overrides: {
// Style sheet name ⚛️
MuiButton: {
// Name of the rule
text: {
// Some CSS
color: 'white',
},
},
},
});
// ...
return (
<ThemeProvider theme={theme}>
<CssBaseline />
{children}
</ThemeProvider>
);
对于Typography
,您可以在此处找到 class 名称
更新
如果您正在寻找仅在AppBar
中更新Typography
的解决方案,那么您需要设置AppBar
的样式。 您可以在 API 中找到您所需排版的类名(上面的链接)
const useStyles = makeStyles({
root: {
'& .MuiTypography-root': {
color: 'black'
}
}
})
...
const classes=useStyles()
return (
<AppBar classes={{root: classes.root}}>
<Typography>Hello StackBlitz!</Typography>
</AppBar>
);
这是一个活生生的例子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.