如何更改所选 ItemList Material-Ui 的背景颜色
How to change background color of a selected ItemList Material-Ui
我使用 Material-UI
创建了一个可选组件
let SelectableInfiniteList = makeSelectable(Infinite);
并将 ListItem 放入其中,现在我想更改所选项目的默认灰色,但我不知道如何,如果我给它一个 className
<ListItem className="list-item" primaryText={i}/>
并使用 list-item:focus 选择器我可以更改背景颜色,只要它被聚焦(但如果我单击应用程序中的其他地方)焦点丢失并且灰色显示在(仍然) 所选项目,
有没有办法改变所选项目的背景颜色?
在您的高阶组件中添加新的 属性 selectedItemStyle!
<ComposedComponent selectedItemStyle={selectedItemStyle} value={this.state.selectedIndex} onChange={this.handleRequestChange} containerHeight={this.props.containerHeight} elementHeight={40}>
{this.props.children}
</ComposedComponent>
其中 selectedItemStyle 是
const slectedItemStyle = {
backgroundColor: 'red'
}
通过像这样传递 selected
样式来更改默认选择的灰色。
<ListItem
button
selected={true}
classes={{ selected: classes.active }}>
<ListItemText primary={item.name} />
</ListItem>
样式对象应该是这样的。
active: {
backgroundColor: "red"
}
我不得不使用全局主题覆盖: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",
},
},
},
},
});
如果您对无需全局覆盖样式的方法感兴趣,
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.
如果您更喜欢本地自定义样式,可以通过classes
(https://material-ui.com/customization/components/#overriding-styles-with-classes)
覆盖material-ui
的组件样式
- 查看
ListItem
的 CSS 部分 https://material-ui.com/api/list-item/#css,我们知道
...
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
的 classes
// Override rule "selected" by "listItemSelected"
<ListItem classes={{selected: listItemSelected}}>
<ListItemText primary={"Hi"} />
</ListItem>
如果你想为它覆盖全局样式,请按照:
使用 Material UI v4 这对我有用:
<ListItem button classes={{ root: classes.listItemRoot }}>
...
</ListItem>
与:
const useStyles = makeStyles((theme) => ({
listItemRoot: {
"&.Mui-selected": {
backgroundColor: 'red',
}
},
}));
const theme = createTheme({
components: {
MuiListItem: {
styleOverrides: {
root: {
backgroundColor: 'blue',
'&.Mui-selected': {
backgroundColor: 'red',
},
},
},
},
},
});
我使用 Material-UI
创建了一个可选组件let SelectableInfiniteList = makeSelectable(Infinite);
并将 ListItem 放入其中,现在我想更改所选项目的默认灰色,但我不知道如何,如果我给它一个 className
<ListItem className="list-item" primaryText={i}/>
并使用 list-item:focus 选择器我可以更改背景颜色,只要它被聚焦(但如果我单击应用程序中的其他地方)焦点丢失并且灰色显示在(仍然) 所选项目,
有没有办法改变所选项目的背景颜色?
在您的高阶组件中添加新的 属性 selectedItemStyle!
<ComposedComponent selectedItemStyle={selectedItemStyle} value={this.state.selectedIndex} onChange={this.handleRequestChange} containerHeight={this.props.containerHeight} elementHeight={40}>
{this.props.children}
</ComposedComponent>
其中 selectedItemStyle 是
const slectedItemStyle = {
backgroundColor: 'red'
}
通过像这样传递 selected
样式来更改默认选择的灰色。
<ListItem
button
selected={true}
classes={{ selected: classes.active }}>
<ListItemText primary={item.name} />
</ListItem>
样式对象应该是这样的。
active: {
backgroundColor: "red"
}
我不得不使用全局主题覆盖: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",
},
},
},
},
});
如果您对无需全局覆盖样式的方法感兴趣,
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.
如果您更喜欢本地自定义样式,可以通过classes
(https://material-ui.com/customization/components/#overriding-styles-with-classes)
material-ui
的组件样式
- 查看
ListItem
的 CSS 部分 https://material-ui.com/api/list-item/#css,我们知道
...
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
的classes
// Override rule "selected" by "listItemSelected"
<ListItem classes={{selected: listItemSelected}}>
<ListItemText primary={"Hi"} />
</ListItem>
如果你想为它覆盖全局样式,请按照:
使用 Material UI v4 这对我有用:
<ListItem button classes={{ root: classes.listItemRoot }}>
...
</ListItem>
与:
const useStyles = makeStyles((theme) => ({
listItemRoot: {
"&.Mui-selected": {
backgroundColor: 'red',
}
},
}));
const theme = createTheme({
components: {
MuiListItem: {
styleOverrides: {
root: {
backgroundColor: 'blue',
'&.Mui-selected': {
backgroundColor: 'red',
},
},
},
},
},
});