我需要将样式应用于紧跟在两个嵌套无序列表之后的段落。我知道在一个ul之后立即将样式应用于段落的方法是:
.class ul+p
但我不知道如何将其缩小到只有在两个嵌套的ul之后才有效?这就是我试图做到的,但它不起作用:
.class ul ul + p
代码示例:
.class ul + p {
color:red;
}
.class ul ul {
color:purple;
}
/* This is just an example of what I tried, does not work */
.class ul ul + p {
color:green;
}
<div class="class">
<ul>
<li>Item a</li>
<li>Item b
<ul>
<li>Item c (Nested list, CSS for this works fine)</li>
<li>Iten d (should be purple)</li>
</ul>
</li>
</ul>
<p>Paragraph after nested ul, this is the one I can't get to work,
what kind of CSS would I need? (should be green)</p>
<ul>
<li>item e</li>
<li>item f</li>
</ul>
<p>Paragraph after single ul, CSS for this works fine (should be red)</p>
</div>
ul ul + p
不起作用,因为该段落是第一个ul
的同级。
嵌套的ul
是第一个ul
的后代,而不是p
的兄弟。所以下一个同级组合子(+
(不能像您期望的那样工作。
<ul><!-- top level ul; sibling of the parapraph element -->
<li>Item a</li>
<li>Item b
<ul><!-- nested ul; not a sibling of the parapraph element -->
<li>Item c (Nested list, CSS for this works fine)</li>
<li>Iten d (should be purple)</li>
</ul>
</li>
</ul>
<p>Paragraph after nested ul, this is the one I can't get to work,
what CSS would I need? (should be green)</p><!-- sibling of the top level ul -->
对于纯CSS解决方案,您需要类似:has()
伪类的东西。选择器可能看起来像这样:
ul:has(> ul) + p
不幸的是,:has()
还没有得到任何主流浏览器的支持。
所以,试试JavaScript。
您的代码说您想将目标锁定在嵌套无序列表项(蓝色(内的相邻段落,我举了一个例子,它是父ul(红色(的相邻段落。因此,您使用哪一个取决于您想要的效果(您没有发布HTML(。
这里的问题是CSS是向内工作的,因为它是全局级联的,而不是向外工作,所以要用另一种方式来实现这一点需要JavaScript。
(编辑:我已经编辑了代码,以绿色显示嵌套ul的相邻段落(
ul ul + p {
color: blue;
}
ul + p {
color: red;
}
.ul-nested--class + p {
color: green;
}
<ul class="ul-nested--class">
<li>List thing</li>
<li>List thing</li>
<li>List thing</li>
<li>
<ul>
<li>List thing</li>
<li>List thing</li>
<li>List thing</li>
<li>List thing</li>
</ul>
<p>This does validate</p>
<p>This does validate</p>
<p>This does validate</p>
<p>This does validate</p>
</li>
</ul>
<p>Next paragraph</p>
<p>Next paragraph</p>
<p>Next paragraph</p>
<p>Next paragraph</p>
<p>Next paragraph</p>
您可以通过给父ul元素一个id或class并使用+选择器来定位段落来实现这一点。像这样:
#idname/.classname + p {
//Do whatever you want
}