在 createTheme 中覆盖 Box 组件
Override Box component in createTheme
我有一个应用程序利用框代替通常放置 div 的位置以保留在 MUI 生态系统中。我的问题是,是否可以对所有框组件进行全局主题覆盖,就像如何使用主题提供程序全局覆盖所有卡片的背景颜色一样。
您可以使用 createTheme()
全局覆盖 Card
样式,因为 Card
有一个 name and a styleOverrides
callback when it is styled using the styled()
API. However, the Box
does not, as you can see from the definition here.
const theme = createTheme({
components: {
// this works
MuiCard: {
styleOverrides: {
//
}
},
// this does not work
MuiBox: {
styleOverrides: {
//
}
}
}
});
如果你想创建一个像Box
这样可以被createTheme
全局设置样式的基础组件,你需要在调用styled()
[时在选项中定义以下属性=28=]
name
: 样式引擎可以识别你的组件。
overridesResolver
:让MUI知道如何解析最终的样式(通过与组件的自定义变量、属性和状态创建的其他样式结合)。
下面是演示的最小示例:
const theme = createTheme({
components: {
MuiDiv: {
styleOverrides: {
root: {
backgroundColor: "green"
}
}
}
}
});
const Div = styled("div", {
name: "MuiDiv",
overridesResolver: (props, styles) => {
return [styles.root];
}
})();
<Div sx={{ width: 10, height: 10 }} />
现场演示
参考资料
我有一个应用程序利用框代替通常放置 div 的位置以保留在 MUI 生态系统中。我的问题是,是否可以对所有框组件进行全局主题覆盖,就像如何使用主题提供程序全局覆盖所有卡片的背景颜色一样。
您可以使用 createTheme()
全局覆盖 Card
样式,因为 Card
有一个 name and a styleOverrides
callback when it is styled using the styled()
API. However, the Box
does not, as you can see from the definition here.
const theme = createTheme({
components: {
// this works
MuiCard: {
styleOverrides: {
//
}
},
// this does not work
MuiBox: {
styleOverrides: {
//
}
}
}
});
如果你想创建一个像Box
这样可以被createTheme
全局设置样式的基础组件,你需要在调用styled()
[时在选项中定义以下属性=28=]
name
: 样式引擎可以识别你的组件。overridesResolver
:让MUI知道如何解析最终的样式(通过与组件的自定义变量、属性和状态创建的其他样式结合)。
下面是演示的最小示例:
const theme = createTheme({
components: {
MuiDiv: {
styleOverrides: {
root: {
backgroundColor: "green"
}
}
}
}
});
const Div = styled("div", {
name: "MuiDiv",
overridesResolver: (props, styles) => {
return [styles.root];
}
})();
<Div sx={{ width: 10, height: 10 }} />