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

如何修改带select属性的MUI TextField的弹出菜单Popover背景色

你之前尝试失败的核心原因是MUI Select组件弹出的菜单默认挂载在全局body节点下,不属于当前组件的DOM子树,所以组件内部的后代选择器无法匹配到对应的Popover Paper元素。

解决方案

方案1:透传Props自定义单组件菜单样式(推荐,适合单次自定义场景)

你可以通过TextField的SelectProps属性透传配置到内部的Select组件,直接指定弹出菜单的Paper样式:
首先修改样式定义:

const useStyles = makeStyles({
  root: {
    color: "azure",
    '& .MuiInputLabel-root': { color: "#adadad",}
  },
  // 定义弹出菜单的背景样式
  selectMenuPaper: {
    backgroundColor: 'black',
    // 可额外加其他样式,比如文字颜色、圆角等
    color: 'azure',
  }
})

然后修改TextField组件配置:

const TextFieldBar = (props) => {
  const classes = useStyles();
  return (
    <Stack className={classes.root} >
      <TextField
        select
        // 新增透传配置
        SelectProps={{
          MenuProps: {
            PaperProps: {
              className: classes.selectMenuPaper
            }
          }
        }}
      >
        <MenuItem>Option 1</MenuItem>
        <MenuItem>Option 2</MenuItem>
        <MenuItem>Option 3</MenuItem>
      </TextField>
    </Stack>
  )
}

如果需要修改菜单项的悬浮、选中样式,可以额外定义样式类绑定到MenuItem组件上:

// useStyles中新增
menuItem: {
  '&:hover': {
    backgroundColor: '#2a2a2a'
  },
  '&.Mui-selected': {
    backgroundColor: '#3d3d3d'
  }
}
<MenuItem className={classes.menuItem}>Option 1</MenuItem>

方案2:全局主题定制(适合全站统一修改Select菜单样式)

如果项目中所有带Select的TextField都需要统一的菜单样式,可以在主题配置中修改默认样式:

import { createTheme, ThemeProvider } from '@mui/material/styles';

const theme = createTheme({
  components: {
    MuiMenu: {
      styleOverrides: {
        paper: {
          backgroundColor: 'black',
          color: 'azure'
        }
      }
    }
  }
});

// 然后用ThemeProvider包裹根组件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03