Material-UI的Badge徽章怎么自定义颜色?
我用Material-UI的Badge组件时,想改徽章的背景色,但官方文档里只看到primary、secondary这些预设值。试了color="error"可以变红,但我想用自定义的颜色比如#ff6b6b,直接写进去没效果,该怎么搞?
我查了下源码,好像得用sx或者styled API,但试了下面这样也不行:
<Badge badgeContent={4} sx={{ '& .MuiBadge-badge': { backgroundColor: '#ff6b6b' } }}>
<MailIcon />
</Badge>
问题原因:Badge 组件的 badge 元素是通过 Portal 渲染到 body 下面的,不在同一个 DOM 层级,所以普通的子选择器有时候不生效。
解决方案有几种:
第一种是用 slotProps,这是 MUI v5 推荐的方式:
第二种是用 styled 封装一下:
第三种如果你想更灵活,可以直接用 badgeContent 传一个自定义元素:
我个人推荐第一种,slotProps 是官方推荐的方式,写法最简洁。你试下第一种,应该能解决。如果还不行,检查下是不是有其他样式覆盖了你的设置,可以用浏览器开发者工具看下 badge 元素的 computed 样式。