至少具有N个子节点的节点的CSS选择器?
我想使用CSS选择至少有N个子节点的节点。怎么做 其目的是在树中应用色带(“指南”),但仅当父节点下方有六个或更多节点时至少具有N个子节点的节点的CSS选择器?,css,css-selectors,Css,Css Selectors,我想使用CSS选择至少有N个子节点的节点。怎么做 其目的是在树中应用色带(“指南”),但仅当父节点下方有六个或更多节点时 我得到的JS、JQuery和服务器端脚本建议有些问题,因为子脚本是使用Ajax调用动态加载的。我必须破解注入孩子的代码,例如,为那些有6个以上孩子的家长添加一个类。这就是为什么在我开始编写代码之前,我想问一下是否有一种纯CSS的方法可以做到这一点。我可能会满足于不考虑子节点数的绑定-虽然不够整洁但足够公平。我建议使用jQuery if语句来计算节点数,然后添加一个类来应用所需
我得到的JS、JQuery和服务器端脚本建议有些问题,因为子脚本是使用Ajax调用动态加载的。我必须破解注入孩子的代码,例如,为那些有6个以上孩子的家长添加一个类。这就是为什么在我开始编写代码之前,我想问一下是否有一种纯CSS的方法可以做到这一点。我可能会满足于不考虑子节点数的绑定-虽然不够整洁但足够公平。我建议使用jQuery if语句来计算节点数,然后添加一个类来应用所需的样式 以下是一个工作示例:
这严格来说是不可能的,因为CSS没有提供任何基于子对象属性选择父对象的方法 对于一个严格的CSS解决方案,我将向父元素添加一个类,并设置该类的样式。不必在必要时手动添加类,您可以在服务器端按语法处理它 您当然可以使用JavaScript实现这一点,而且许多可用的JavaScript库将简化此过程 但是,您可以使用JavaScript来实现这一点。下面是一个示例(): HTML
css3有一些子选择器可以完成这项工作
li:first-child:nth-last-child(6),
li:first-child:nth-last-child(6) ~ li {
... some style
}
对于这个解决方案,安德烈·卢伊斯(AndréLuís)发现了它。当然,它在父元素上不起作用,因为这是css4,还不受支持。但是如果有6个标签,您可以为所有的li
标签设置样式,或者只为第一个li
标签设置样式
结合before伪元素,您可以直观地创建父样式。
ul get的位置:相对。
然后,您可以使用伪元素在父对象上伪造样式:
li:first-child:nth-last-child(6):before {
content:'';
position:absolute;
top:0;
left:0;
z-index:-1;
width:400px;
height:20px;
background:green
}
并非每个浏览器都支持css选择器第n个最后一个子项,但对于Internet Explorer,您可以使用javascript或IE7.js。祝你好运。这需要前瞻,我很确定CSS不会以任何形式进行前瞻。或者,如果使用某种服务器端语言,请使用它添加CSS类。不需要额外的库@RichardMarskell Drackir-当然-感谢您的澄清!欢迎来到StackOverflow!当您输入代码时,一定要突出显示它,并使用文本编辑器顶部的“代码示例”按钮。它看起来像一组花括号{}
。此外,还可以使用倒勾(`)来指示文本中的代码片段或对象引用。查看以了解更多信息。:)要使用的级别4选择器非常简单:!>李:第一个孩子:第n个最后一个孩子(6)
当然,重复这一点并不实际有效。
jQuery(function($){
$('ul').each(function(){
if($(this).children('li').length >= 6){
$(this).css('background-color', 'orange');
}
});
});
li:first-child:nth-last-child(6),
li:first-child:nth-last-child(6) ~ li {
... some style
}
li:first-child:nth-last-child(6):before {
content:'';
position:absolute;
top:0;
left:0;
z-index:-1;
width:400px;
height:20px;
background:green
}