我有这样的HTML代码
<li data-bind="attr: { class: MenuItem.CssClass, 'data-Id': MenuItem.Id }">
<div class="subMenuActions">
<i class="icon-caret-right" />
<i class="icon-caret-down" />
</div>
...
<ul class="subMenu"></ul>
</li>
我想在i
中为元素div.subMenuActions
制作选择器,以检查ul.subMenu
是否为空。
我知道我可以使用CSS选择器ul.subMenu
检查ul.subMenu:empty
是否为空,但如果i.icon-caret-down
是i.icon-caret-right
,我需要隐藏ul.subMenu
,{{1}}空。
请不要JS答案。
答案 0 :(得分:3)
在级别1-3上无法使用CSS选择previous element sibling或parent element。正如米希克所说,你只能选择下一个兄弟姐妹。
在您的情况下,如果您重新排序HTML中的元素并且您知道ul.submenu
元素的高度,则可以使用此解决方案:
<li data-bind="attr: { class: MenuItem.CssClass, 'data-Id': MenuItem.Id }">
<ul class="subMenu"></ul>
<div class="subMenuActions">
<i class="icon-caret-right"/>
<i class="icon-caret-down"/>
</div>
...
</li>
然后应用此css:
li {
position:relative;
padding-bottom:2em;
}
ul.subMenu {
height:2em;
position:absolute;
width:100%;
bottom:0;
}
div.subMenuActions {
position:relative;
}
ul, div { /* normalize to zero */
margin:0;
padding:0;
}
/* and the selectors */
ul.subMenu:empty + .subMenuActions > i,
ul.subMenu:empty + .subMenuActions + .subMenuActions > i {
display: none;
}
总而言之,这里更简单的方法是使用javascript。
答案 1 :(得分:1)
不幸的是,CSS中没有“以前的兄弟”选择器(至少目前为止)。
我只能建议更改.subMenu
和.subMenuActions
的顺序,然后使用它:
.subMenu:empty + .subMenuActions > i{
display: none;
}
毕竟,您可以随时设置.subMenuActions
样式以在所需位置显示它。