如何使用 CSS 选择和设置所有具有 UL 子元素的 LI 元素? [复制]
Posted
技术标签:
【中文标题】如何使用 CSS 选择和设置所有具有 UL 子元素的 LI 元素? [复制]【英文标题】:How can I use CSS to select and style all LI elements that have UL sub-elements? [duplicate] 【发布时间】:2012-09-26 23:30:50 【问题描述】:可能重复: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 */
【问题讨论】:
在纯 CSS 中不可能。在某个时候有一些关于实施这一点的讨论,但不这样做的原因是因为它会非常慢。完成此类操作的最简单方法是向包含ul
的元素添加一个类。
您是否使用任何后端代码来呈现此 html?
HTML 非常简单(这是我想要的;一个人可以轻松地制作自己的上下文菜单,而无需太多麻烦/知识)。这是一个带有子菜单的基本菜单:<UL CLASS="bhContextMenu" ID="CONTEXT"><LI>Menu item</LI><LI>Submenu<UL><LI>Submenu item</LI></UL></LI></UL>
【参考方案1】:
除非您只是 distinguishing between empty and non-empty elements(您不是...),否则您无法根据内容选择元素。
你能做的是
更改您的标记,为包含子菜单的菜单项添加一个类,并为其设置样式。
在“不可见/折叠”模式下更改子菜单的样式,使它们实际上可见,但只是作为一个小箭头或您想使用的其他任何东西来表示那里有一个子菜单。在这里演示:http://jsbin.com/ojociq/1/edit
【讨论】:
【参考方案2】:如前所述,CSS 选择器无法解决您的要求(请参阅specs)。
当然,您可以将类添加到列表项中,但解决您需要的最简单的方法是一行简单的 jQuery 脚本:
$('li').has('ul').addClass('has-ul');
DEMO
【讨论】:
+1 - 这就是我要做的,jQuery 非常适合标准 CSS 难以完成的情况。特别是如果您正在寻找与旧版本 IE 的向后兼容性。 VanillaJS也是如此。以上是关于如何使用 CSS 选择和设置所有具有 UL 子元素的 LI 元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章