如何使用CSS来选择和设置具有UL子元素的所有LI元素?

时间:2012-10-05 19:04:15

标签: html css

  

可能重复:
  Complex CSS selector for parent of active child

我正在创建一个CSS上下文菜单,我希望所有具有子菜单的列表项的样式都不同,以便在视觉上向用户表明它们有子菜单。

上下文菜单是UL元素,其列表项是LI,子菜单是UL。 我已经将功能降低了,我只需要能够以不同的方式设置子菜单项的样式,以便它们明显不同。

代码和伪代码:


我拥有的(工作CSS):

.bhContextMenu,
.bhContextMenu LI UL{
background:white;
background:rgba(255,255,255,0.95);
border:0.5mm solid lightgray;
border-color:rgba(0,0,0,0.25);
border-radius:1mm;
box-shadow:0 1mm 2mm lightgray;
box-shadow:0 1mm 2mm rgba(0,0,0,0.25);
cursor:default;
display:none;
list-style:none;
margin:0;
padding:0;
position:absolute;
width:1.5in;
}
.bhContextMenu LI{
padding:1mm 4mm;
}
.bhContextMenu LI:hover{
 background: lightgray;
 background: rgba(0,0,0,0.1);
}
.bhContextMenu LI UL{
display:none;
list-style:none;
position:absolute;
left:1.5in;
margin-top:-1.5em;
}
.bhContextMenu LI:hover UL,
.bhContextMenu LI UL:hover{
display:block;
}
.bhContextMenu HR{
border: none;
border-bottom: 0.5mm solid lightgray;
}

我还想要什么(伪代码):

.bhContextMenu LI contining UL{
font-weight:bold;/* or something */
}

2 个答案:

答案 0 :(得分:3)

除非你只是distinguishing between empty and non-empty elements(你不是......),否则你不能根据内容选择元素。

你能做的是

  1. 更改标记,为包含子菜单和样式的菜单项添加一个类。

  2. 在“隐形/折叠”模式下更改子菜单的样式,使它们实际可见,但只能作为一个小箭头或其他任何你想用来表示那里有子菜单的东西。在这里演示:http://jsbin.com/ojociq/1/edit

答案 1 :(得分:2)

如前所述,使用CSS选择器无法解决您所要求的问题(请参阅specs)。

当然你可以在你的列表项中添加类,但是解决你需要的最简单方法是一行简单的jQuery脚本:

$('li').has('ul').addClass('has-ul');​

DEMO