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

如何通过CSS Modules为MUI SpeedDial的tooltipTitle设置悬停显示样式?

关于MUI SpeedDial组件的两个问题:Tooltip样式定制与hover时单独显示提示框

使用MUI的SpeedDial组件时遇到两个问题:

  • 无法通过CSS Modules为tooltipTitle设置样式
  • 当前所有提示框会同时显示,需要改为仅在鼠标悬停对应Action时显示提示框

现有代码

JSX组件代码

export const WidgetsMenu = () => {
    return (
        <StyledEngineProvider injectFirst>
        <SpeedDial
            ariaLabel="SpeedDial openIcon example"
            icon={<SpeedDialIcon openIcon={<CloseIcon />} />}
            className={styles.speedDial}
        >
            {actions.map((action) => (
                <SpeedDialAction
                    key={action.name}
                    icon={action.icon}
                    tooltipTitle={action.name}
                />
            ))}
        </SpeedDial>
        </StyledEngineProvider>
    );
};

CSS Modules样式代码

.speedDial :global {
  position: absolute;
  bottom: 3rem;
  right: 3rem;
  @media only screen and (max-width: 600px) {
    bottom: 2rem;
    right: 1.5rem;
  }

  .MuiSpeedDial-fab {
    color: #070707;
    background-color: #ffffff;
    width: 3rem;
    height: 3rem;
  }

  .MuiSpeedDialAction-fab {
    color: #ffffff;
    background-color: #070707;
    width: 3rem;
    height: 3rem;
  }
}

解决方案

1. 实现hover时单独显示提示框

通过tooltipOpen属性结合鼠标事件,控制单个SpeedDialAction的提示框显示状态:

import { useState } from 'react';

export const WidgetsMenu = () => {
  const [hoveredKey, setHoveredKey] = useState(null);

  return (
    <StyledEngineProvider injectFirst>
      <SpeedDial
        ariaLabel="SpeedDial openIcon example"
        icon={<SpeedDialIcon openIcon={<CloseIcon />} />}
        className={styles.speedDial}
      >
        {actions.map((action) => (
          <SpeedDialAction
            key={action.name}
            icon={action.icon}
            tooltipTitle={action.name}
            tooltipOpen={hoveredKey === action.name}
            onMouseEnter={() => setHoveredKey(action.name)}
            onMouseLeave={() => setHoveredKey(null)}
          />
        ))}
      </SpeedDial>
    </StyledEngineProvider>
  );
};

2. 通过CSS Modules定制Tooltip样式

在现有CSS Modules代码中,添加:global包裹的MUI Tooltip类名来覆盖默认样式:

.speedDial :global {
  position: absolute;
  bottom: 3rem;
  right: 3rem;
  @media only screen and (max-width: 600px) {
    bottom: 2rem;
    right: 1.5rem;
  }

  .MuiSpeedDial-fab {
    color: #070707;
    background-color: #ffffff;
    width: 3rem;
    height: 3rem;
  }

  .MuiSpeedDialAction-fab {
    color: #ffffff;
    background-color: #070707;
    width: 3rem;
    height: 3rem;
  }

  /* 自定义Tooltip样式 */
  .MuiTooltip-tooltip {
    background-color: #2d2d2d;
    color: #ffffff;
    font-size: 0.875rem;
    padding: 8px 12px;
    border-radius: 4px;
  }

  .MuiTooltip-arrow {
    color: #2d2d2d;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:25