You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MUI ToggleButton选中状态下的SVG图标颜色

问题原因

你自定义的SVG图标样式没有绑定ToggleButton的选中状态,MUI的ToggleButton被选中时会自动添加.Mui-selected类名修改自身文字和背景色,但子元素SVG图标默认不会同步继承这个状态下的颜色值。

解决方案

方案1:调整图标样式继承父级选中状态颜色(推荐,代码改动最小)

直接修改你所有Styled图标的定义,增加父级选中时的颜色规则即可:

export const StyledDetailsIcon = styled(MenuIcon)`
  margin-right: 1.3rem;
  /* 父ToggleButton选中时修改图标颜色 */
  .Mui-selected & {
    /* 可以替换为你需要的任意色值,也可以从theme中取对应颜色 */
    color: ${({ theme }) => theme.palette.warning.contrastText};
  }
`;

如果你的SVG图标没有默认使用currentColor作为填充色,需要额外加fill规则强制同步:

export const StyledDetailsIcon = styled(MenuIcon)`
  margin-right: 1.3rem;
  fill: currentColor; // 强制让SVG填充跟随当前元素的color属性
  .Mui-selected & {
    color: #fff;
  }
`;

其余的StyledLinesIcon、StyledWheelIcon、StyledServiceIcon全部按照同样的规则修改即可。

方案2:通过选中状态动态传入color属性

如果你不想批量修改样式定义,也可以在业务代码中通过判断当前选中值和按钮value是否匹配,动态给图标传入color属性:

<StyledToggleButton
  aria-label={DetailsTranslation}
  onClick={() => handleGoToDetails()}
  value={Routes.TrainsDetails.path}
>
  <StyledDetailsIcon color={alignment === Routes.TrainsDetails.path ? "warning" : "inherit"} />
  {DetailsTranslation}
</StyledToggleButton>

该方案需要给每个图标都添加判断逻辑,更适合仅需个别图标特殊处理的场景。

补充说明

如果修改后样式仍不生效,可以检查你导入的SVG源文件是否写死了fill属性,如果是,需要把SVG代码中固定的fill值删除,替换为fill="currentColor",才能跟随外部color属性动态变化。

内容的提问来源于stack exchange,提问作者marcinb1986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:45:03