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

如何修改Mantine.ui组件库中菜单的悬停颜色?

如何修改Mantine UI菜单的悬停颜色

以下是几种可靠的修改方式,按优先级推荐:

1. 通过主题配置全局修改(推荐)

这种方式会统一修改所有Menu组件的悬停样式,符合Mantine的设计体系:

import { MantineProvider, createTheme, Menu } from '@mantine/core';

const theme = createTheme({
  components: {
    Menu: {
      styles: (theme) => ({
        item: {
          '&:hover': {
            backgroundColor: theme.colors.blue[2], // 替换为你需要的悬停背景色
            color: theme.colors.blue[8], // 可选:修改悬停时的文字颜色
          },
        },
      }),
    },
  },
});

function App() {
  return (
    <MantineProvider theme={theme}>
      <Menu>
        <Menu.Target>
          <button>打开菜单</button>
        </Menu.Target>
        <Menu.Dropdown>
          <Menu.Item>选项1</Menu.Item>
          <Menu.Item>选项2</Menu.Item>
        </Menu.Dropdown>
      </Menu>
    </MantineProvider>
  );
}

2. 给单个Menu组件局部修改

如果只需要修改特定菜单的样式,直接用sx属性:

import { Menu } from '@mantine/core';

function CustomMenu() {
  return (
    <Menu
      sx={(theme) => ({
        '& .mantine-Menu-item:hover': {
          backgroundColor: '#e0f7fa',
          color: '#00796b',
        },
      })}
    >
      <Menu.Target>
        <button>打开菜单</button>
      </Menu.Target>
      <Menu.Dropdown>
        <Menu.Item>选项1</Menu.Item>
        <Menu.Item>选项2</Menu.Item>
      </Menu.Dropdown>
    </Menu>
  );
}

3. 使用自定义CSS类

通过全局CSS或CSS模块定义样式,适合习惯传统CSS写法的场景:

全局CSS示例

.custom-menu .mantine-Menu-item:hover {
  background-color: #ffebee;
  color: #c62828;
}

组件中引用

<Menu className="custom-menu">
  <Menu.Target>
    <button>打开菜单</button>
  </Menu.Target>
  <Menu.Dropdown>
    <Menu.Item>选项1</Menu.Item>
    <Menu.Item>选项2</Menu.Item>
  </Menu.Dropdown>
</Menu>

注意事项

  • 避免使用!important提升优先级,优先通过Mantine主题或更具体的选择器实现样式覆盖
  • 确保你的样式没有被其他全局CSS或组件样式覆盖,可以通过浏览器开发者工具检查元素样式优先级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:45:33