我一直在努力实现这个简单的事情。我试图用伪选择器在材质UI v1中显示/隐藏我的<TreeMenu/>
组件,但不知何故它不起作用。这是代码:
CSS:
root: {
backgroundColor: 'white',
'&:hover': {
backgroundColor: '#99f',
},
},
hoverEle: {
visibility: 'hidden',
'&:hover': {
visibility: 'inherit',
},
},
rootListItem: {
backgroundColor: 'white',
display: 'none',
'&:hover': {
display: 'block',
backgroundColor: '#99f',
},
},
'@global': {
'li > div.nth-of-type(1)': {
display: 'block !important',
backgroundColor: "'yellow',",
},
},
root css类在列表中工作正常但是rootListItem甚至@global li选择器都不起作用。我不确定我在选择器上做错了什么。我读了材料-ui文档并说V1支持伪选择器。
JSX:
<div>
{props.treeNode.map(node => (
<ListItem
key={`${node.Type}|${node.NodeID}`}
id={`${node.Type}|${node.NodeID}`}
className={(classes.nested, classes.root)}
button
divider
disableGutters={false}
dense
onClick={() => props.onNodeClick(node.Type, node.NodeID, node.NodeName)}
title={props.adminUser ? node.NodeID : ''}
onMouseOver={() => props.onMouseOver(node.Type, node.NodeID)}
>
<ListItemIcon>{props.listIcon}</ListItemIcon>
<ListItemText primary={node.NodeName} />
<ListItemSecondaryAction classes={{ root: classes.rootListItem }}>
<TreeMenu />
</ListItemSecondaryAction>
<div className={classes.hoverEle}>
<TreeMenu />
</div>
</ListItem>
))}
</div>
请查看<TreeMenu >
组件。我已经应用了3种不同的技巧:
1)带有'&:hover'
选择器的hoverEle类。
2)试图用我的班级<ListItemSecondaryAction>
覆盖rootListItem
的默认根类
3)在li上使用其他伪选择器。参见'li > div.nth-of-type(1)':
答案 0 :(得分:11)
经过一段时间的努力以使您的代码启动并运行后,我发现您的代码出了什么问题。
一切似乎都很好,rootListItem的选择器开箱即用,问题是你不能在具有:hover
的元素上使用伪选择器display: none
。相反,您应该使用opacity: 0 and opacity: 1
,它将隐藏您的ListItemSecondaryAction,但同时它将允许您悬停。因此,带有display:none的元素在技术上不显示,因此你不能将它们悬停。
关于你在全局的伪选择器,你只是写错了。在div之后使用冒号而不是dot,并将backgroundColor更改为&#39;黄色&#39;而不是&#34;&#39;黄&#39;,&#34;
'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。
答案 1 :(得分:0)
对我有用的解决方案如下
export const useStyles = makeStyles(theme=>({
header:{
position: "relative!important",
background: "linear-gradient(150deg,#7795f8 15%,#6772e5 70%,#555abf 94%)",
margin: -50,
padding: -50,
height: 500,
},
span: props => ({
padding:50,
background: "rgba(255, 255, 255, .1)",
borderRadius: "50%",
position: "absolute",
"&:nth-child(1)": {
left: "-4%",
bottom: "auto",
background: "rgba(255, 255, 255, .1)"
},
"&:nth-child(2)":{
right: "4%",
top: "10%",
background: "rgba(255, 255, 255, .1)"
},
"&:nth-child(3)":{
top: 280,
right: "5.66666%",
background: "rgba(255, 255, 255, .3)"
},
"&:nth-child(4)":{
top: 320,
right: "7%",
background: "rgba(255, 255, 255, .15)"
},
"&:nth-child(5)":{
top: "38%",
left: "1%",
right: "auto",
background: "rgba(255, 255, 255, .05)"
},
"&:nth-child(6)": {
width: 200,
height: 200,
top: "44%",
left: "10%",
right: "auto",
background: "rgba(255, 255, 255, .15)"
},
"&:nth-child(7)": {
bottom: "50%",
right: "36%",
background: "rgba(255, 255, 255, .04)"
},
"&:nth-child(8)": {
bottom: 70,
right: "2%",
background: "rgba(255, 255, 255, .2)"
},
"&:nth-child(9)": {
bottom: "1%",
right: "2%",
background: "rgba(255, 255, 255, .1)"
},
"&:nth-child(10)": {
bottom: "1%",
left: "1%",
right: "auto",
background: "rgba(255, 255, 255, .05)"
}
}),
答案 2 :(得分:0)
只需与Jorge Santos Neil一起添加,您不一定需要使用道具。我要添加一个针对不同场景进行测试的示例。需要注意的是,这需要包含在“ makeStyles”中,然后用作“ className”。只是将其放在“ styles = {{}}”中是行不通的。
示例:
const useStyles = makeStyles((theme) => ({
paragraphWithWarningDiv: {
margin: "32px 0px 24px",
"& :nth-child(1)": {
marginBottom: "100px"
}
}
}));