reactjs MaterialUI v5 ->如何设置自动完成选项的样式

z18hc3ub  于 2022-12-26  发布在  React
关注(0)|答案(3)|浏览(113)

我尝试将一些基本样式应用于MUI v5中的自动完成组件中的选项。我只是尝试更改悬停时的背景颜色,并基于是否选中它。我尝试了基于文档的两种方法,使用主题,并将sx属性应用于自动完成。
使用主题几乎让我有,代码如下:

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

const theme = createTheme({
  components: {
    MuiAutocomplete: {
      styleOverrides: {
        option: {
          '&[aria-selected="true"]': {
            backgroundColor: '#e3abed',
          },

          '&:hover': {
            backgroundColor: '#9c27b0',
          },
          backgroundColor: '#fff',
        },
      },
    },
  },
})

我将ThemeProvider Package 在整个应用程序中
和组分:

<Autocomplete
  options={['1', '2', '3']}
  renderInput={(params) => <TextField {...params} label="Priority" />}
  onChange={(_e, val) => setPriority(val)}
/>

所以,这几乎是可行的。然而,[aria-selected=“true”]样式只有在我将鼠标悬停在下拉菜单中的另一个选项上时才被应用。否则,组件将默认为灰色,我不明白为什么。
我尝试过的第二种方法是在Autocomplete组件上使用sx prop,在文档中它说你可以通过类名来定位子组件:https://mui.com/material-ui/customization/how-to-customize/#overriding-styles-with-class-names
以下是我的组件:

<Autocomplete
  options={['1', '2', '3']}
  renderInput={(params) => <TextField {...params} label="Priority" />}
  onChange={(_e, val) => setPriority(val)}
  sx={{
    '& .MuiAutocomplete-option': {
      backgroundColor: '#000',
    },
    '& .Mui-focused': {
      backgroundColor: 'red',
    },
  }}
  open
/>

这似乎没有任何效果。我已经在这上面工作了将近2个小时,似乎还不能到达终点线。任何帮助都将不胜感激。

e5njpo68

e5njpo681#

我也有同样的问题我只需要进一步探索Autocomplete API文档的Props部分。如果您不想处理全局主题定制,有几种定制可能性:

  1. PaperComponent属性允许定制 "用于呈现弹出窗口主体的组件"。 请注意,简单地在Autocomplete上使用sx在这里不起作用,因为(如@bnays-mhz所指出的)嵌套PaperComponentPopperComponent位于主DOM树之外(用于z索引/模态UX用途)。
  2. renderGroup属性允许覆盖选项组标题的呈现。
  3. renderOption属性允许覆盖单个选项的渲染。
bvk5enib

bvk5enib2#

可以通过目标类覆盖自动完成选项css
'. Mui自动完成弹出器'
您必须全局应用css,因为这个节点是在DOM的根元素之外创建的。

lmyy7pcs

lmyy7pcs3#

你可以试试这个来设置css的选项,单一选项和悬停(聚焦)
自定义可在Mui V5中使用的自动完成组件的简单方法

<Autocomplete
  limitTags={1}
  disablePortal
  id="simple-search"
  value={select.region}
  onChange={handleChange("region")}
  options={region}
  sx={{
  width: { sm: "100%", md: 340 },
  "& + .MuiAutocomplete-popper .MuiAutocomplete-option": {
        backgroundColor: "#363636",
  },
  "& + .MuiAutocomplete-popper .MuiAutocomplete-option[aria-selected='true']":
       {
          backgroundColor: "#4396e6",
       },
  "& + .MuiAutocomplete-popper .MuiAutocomplete-option[aria-selected ='true'] .Mui-focused":
       {
          backgroundColor: "#3878b4",
       },
      }}
                disableCloseOnSelect
                multiple
                renderInput={(params) => (
                  <TextField {...params} label="Region" color="info" />
                )}
              />

相关问题