如何更改所选ItemList Material-Ui的背景颜色

时间:2016-11-14 14:29:51

标签: javascript reactjs material-ui

我使用Material-UI

创建了一个可选择的组件
let SelectableInfiniteList = makeSelectable(Infinite);

并将ListItem放入其中,现在我想更改所选项目的默认灰色,但我不知道如果我给它一个className

<ListItem className="list-item" primaryText={i}/>

并使用list-item:焦点选择器我可以改变背景颜色,只要它被聚焦(但是如果我点击应用程序中的其他地方)焦点会丢失并且灰色显示在(仍然)选中项目,

有没有办法更改所选的项目背景颜色?

7 个答案:

答案 0 :(得分:6)

在您的高阶组件中添加新属性selectedItemStyle!

 - (void)layoutSubviews
{
    [super layoutSubviews];
    //...custom layout here
}

其中selectedItemStyle是

<ComposedComponent selectedItemStyle={selectedItemStyle} value={this.state.selectedIndex} onChange={this.handleRequestChange} containerHeight={this.props.containerHeight} elementHeight={40}>
   {this.props.children}
</ComposedComponent>

答案 1 :(得分:3)

我必须使用“全局主题”替代:https://material-ui.com/customization/components/#global-theme-override

const muiTheme = createMuiTheme({
  overrides: {
    MuiListItem: {
      root: {
        "&$selected": {
          backgroundColor: "red",
          "&:hover": {
            backgroundColor: "orange",
          },
        },
      },
      button: {
        "&:hover": {
          backgroundColor: "yellow",
        },
      },
    },
  },
});

答案 2 :(得分:1)

如果您对不全局覆盖样式的方法感兴趣,

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

const useStyles = makeStyles({
  root: {
    '&$selected': {
      backgroundColor: 'red',
      '&:hover': {
        backgroundColor: 'yellow',
      }
    },
  },
  selected: {},
});

const CustomSelectedListItem = (
  <ListItem
    button
    classes={{ root: classes.root, selected: classes.selected }}
    selected
  >
    <ListItemText primary="List Item" />
  </ListItem>
);

Codesandbox。 Material-UI docs

答案 3 :(得分:0)

通过传递selected这样的样式来更改默认选择的灰色。

<ListItem
        button
        selected={true}
        classes={{ selected: classes.active }}>
  <ListItemText primary={item.name} />
</ListItem>

样式对象应该是这样的。

active: {
  backgroundColor: "red"
}

答案 4 :(得分:0)

如果您喜欢本地自定义样式,则可以用material-uihttps://material-ui.com/customization/components/#overriding-styles-with-classes)覆盖classes的组件样式

...
selected    .Mui-selected   Pseudo-class applied to the root element if selected={true}.
...

The rule name we would override is: selected
  • 根据需要创建自定义样式
// For example
const useStyles = makeStyles((theme) => ({
  listItemSelected: {
    color: 'red',
  },
}));
  • 覆盖ListItem的{​​{1}}
classes

如果您要为其覆盖全局样式,请遵循:

答案 5 :(得分:0)

您可以使用Mui全局主题覆盖,该覆盖将基本上使用样式属性覆盖项目中的所有ListItems-

 MuiMenuItem: {
            root: {
              fontFamily: 'Aria....',
              '&$selected': {
                backgroundColor: '#B2D0EB!important'
              },
              '&:hover': {
                backgroundColor: '#B2D0EB!important',
                color: '#707070!important',
              }
            },
          }

但是,如果希望所选组件具有不同的样式,也可以使用id /类名

答案 6 :(得分:0)

您可以使用Mui全局主题覆盖,该覆盖将基本上使用样式属性覆盖项目中的所有ListItems-

MuiMenuItem: {
          root: {
            fontFamily: 'Aria....',
            '&$selected': {
              backgroundColor: '#B2D0EB!important'
            },
            '&:hover': {
              backgroundColor: '#B2D0EB!important',
              color: '#707070!important',
            }
          },
        }

但是,如果希望所选组件具有不同的样式,也可以使用id /类名