Ответ 1
После некоторого времени, пытаясь запустить ваш код, я обнаружил, что не так с вашим кодом.
Кажется, все в порядке, селектор для rootListItem работает прямо из коробки, проблема в том, что вы не можете использовать псевдоселектор :hover
на элемент с display: none
. Вместо этого вы должны использовать opacity: 0 and opacity: 1
, он скроет ваш ListItemSecondaryAction, но в то же время он позволит вам навести курсор. Таким образом, элементы с дисплеем: нет, технически не отображаются и, следовательно, вы не можете их навестить.
О вашем псевдоселекторе в глобальном, вы просто написали его неправильно. Использование двоеточия вместо точки после div и изменение backgroundColor на "желтый" вместо "желтый",
'li > div:nth-of-type(1)': {
display: 'block !important',
backgroundColor: 'yellow',
},
Я не знал, как ваш TreeMenu выглядит как компонент, поэтому я просто создал список с узлами ul/li/div.
const styles = {
root: {
backgroundColor: 'white',
'&:hover': {
backgroundColor: '#99f',
},
},
hoverEle: {
visibility: 'hidden',
'&:hover': {
visibility: 'inherit',
},
},
rootListItem: {
backgroundColor: 'white',
opacity: 0,
'&:hover': {
opacity: 1,
backgroundColor: '#99f',
},
},
'@global': {
'li > div:nth-of-type(1)': {
display: 'block !important',
backgroundColor: "yellow",
},
},
};
А также:
<div>
{treeNode.map(node => (
<ListItem
key={'${node.Type}|${node.NodeID}'}
id={'${node.Type}|${node.NodeID}'}
className={classes.root}
button
divider
disableGutters={false}
dense
onClick={() => {}}
title={''}
onMouseOver={() => {}}
>
<ListItemText primary={node.NodeName} />
<ListItemSecondaryAction classes={{ root: classes.rootListItem }}>
<ul><li><div>Elem 1</div></li><li><div>Elem 2</div></li></ul>
</ListItemSecondaryAction>
<div className={classes.hoverEle}>
<ul><li><div>Elem 1</div></li><li><div>Elem 2</div></li></ul>
</div>
</ListItem>
))}
</div>
* Я использую treeNode, который является массивом для меня, и я удалил остальные функции и TreeMenu.