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

如何为MUI Autocomplete Listbox设置自定义滚动条样式?

你当前代码的问题在于React内联样式(style属性)不支持CSS伪元素/嵌套选择器,所以&::-webkit-scrollbar这种写法在style里不会生效。下面给几种可行的解决办法:


方法一:使用CSS类名(推荐,适用于所有MUI版本)

给Listbox添加自定义类名,然后在全局CSS或CSS模块中编写滚动条样式:

组件代码:

<Autocomplete
  fullWidth
  popupIcon={<KeyboardArrowDownIcon />}
  id="combo-box-demo"
  options={allTableData}
  noOptionsText="Məhsul tapılmadı"
  getOptionLabel={(option) => option.name ?? option}
  ListboxProps={{
    className: "custom-autocomplete-listbox",
    style: { maxHeight: "200px" }
  }}
/>

CSS代码:

.custom-autocomplete-listbox {
  max-height: 200px;
  overflow-y: auto;
}

/* 自定义滚动条宽度 */
.custom-autocomplete-listbox::-webkit-scrollbar {
  width: 20px;
}

/* 可选:自定义滚动条轨道样式 */
.custom-autocomplete-listbox::-webkit-scrollbar-track {
  background: #f1f1f1;
  border-radius: 8px;
}

/* 可选:自定义滚动条滑块样式 */
.custom-autocomplete-listbox::-webkit-scrollbar-thumb {
  background: #888;
  border-radius: 8px;
}

.custom-autocomplete-listbox::-webkit-scrollbar-thumb:hover {
  background: #555;
}

方法二:使用MUI v5+的sx属性

MUI的sx属性支持嵌套CSS选择器,可以直接在sx中编写滚动条样式,替换原来的style:

<Autocomplete
  fullWidth
  popupIcon={<KeyboardArrowDownIcon />}
  id="combo-box-demo"
  options={allTableData}
  noOptionsText="Məhsul tapılmadı"
  getOptionLabel={(option) => option.name ?? option}
  ListboxProps={{
    sx: {
      maxHeight: "200px",
      "&::-webkit-scrollbar": {
        width: "20px"
      },
      /* 可选:添加轨道和滑块样式 */
      "&::-webkit-scrollbar-track": {
        background: "#f1f1f1",
        borderRadius: "8px"
      },
      "&::-webkit-scrollbar-thumb": {
        background: "#888",
        borderRadius: "8px"
      }
    }
  }}
/>

方法三:MUI v4使用makeStyles

如果使用的是MUI v4,用makeStyles创建样式钩子:

import { makeStyles } from '@material-ui/core/styles';

const useStyles = makeStyles({
  listbox: {
    maxHeight: "200px",
    "&::-webkit-scrollbar": {
      width: "20px"
    },
    // 可选的滚动条其他样式
    "&::-webkit-scrollbar-track": {
      background: "#f1f1f1"
    },
    "&::-webkit-scrollbar-thumb": {
      background: "#888"
    }
  }
});

// 组件内使用
const classes = useStyles();

<Autocomplete
  fullWidth
  popupIcon={<KeyboardArrowDownIcon />}
  id="combo-box-demo"
  options={allTableData}
  noOptionsText="Məhsul tapılmadı"
  getOptionLabel={(option) => option.name ?? option}
  ListboxProps={{
    className: classes.listbox
  }}
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:35:29