Всякий раз, когда вы пытаетесь переопределить стили Material-UI и он не работает так, как вы ожидаете, лучшим ресурсом является исходный код.Вот URL для исходного кода ListItem
: https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/ListItem/ListItem.js. В большинстве случаев вам нужно только посмотреть на переменную styles
в верхней части исходного файла.
Ниже яСкопированы все части переменной styles
, которые имеют дело с backgroundColor
и textDecoration
:
export const styles = theme => ({
/* Styles applied to the (normally root) `component` element. May be wrapped by a `container`. */
root: {
textDecoration: 'none',
'&$selected, &$selected:hover, &$selected:focus': {
backgroundColor: theme.palette.action.selected,
},
},
/* Styles applied to the inner `component` element if `button={true}`. */
button: {
transition: theme.transitions.create('background-color', {
duration: theme.transitions.duration.shortest,
}),
'&:hover': {
textDecoration: 'none',
backgroundColor: theme.palette.action.hover,
// Reset on touch devices, it doesn't add specificity
'@media (hover: none)': {
backgroundColor: 'transparent',
},
},
'&:focus': {
backgroundColor: theme.palette.action.hover,
},
},
/* Styles applied to the root element if `selected={true}`. */
selected: {},
});
Основными вызывающими трудности стилями являются button
стили наведения и фокуса.Чтобы успешно их переопределить, не прибегая к «! Important», вам необходимо иметь соответствующую специфику CSS.
Кажется, что сработает следующее:
listItemDone: {
borderRadius: "1em",
"&,&:focus,&:hover": {
backgroundColor: "#F6F6E8",
textDecoration: "line-through"
}
},
Однако вышеприведенноепредотвращает какой-либо эффект наведения на «готовые» предметы, поэтому вместо этого вы можете захотеть сделать что-то более похожее на:
listItemDone: {
borderRadius: "1em",
"&,&:focus": {
backgroundColor: "#F6F6E8",
textDecoration: "line-through"
},
"&:hover": {
textDecoration: "line-through"
}
},
Это позволяет цвету фона наведения на готовых предметах по-прежнему быть theme.palette.action.hover
.Если вы хотите, чтобы цвет наведения был другим для готовых элементов, вы можете указать его явно вместе с textDecoration.
Есть еще одна деталь, о которой нужно позаботиться.Если щелкнуть элемент списка, чтобы перевести его в состояние «готово», а затем снова щелкнуть по нему, он больше не будет находиться в состоянии «готово», но к нему будут применены стили фокусировки button
.Чтобы удалить этот стиль фокуса, вам также необходимо следующее:
listItem: {
borderRadius: "1em",
"&,&:focus": {
backgroundColor: theme.palette.background.paper // or whatever color you want this to be
}
},
Вот моя модифицированная версия вашей песочницы: