我试图选择标题元素后面的每个第一段元素(例如h2)。然而,由于包装在div中,我最终选择了几个"第一个"段落元素。是否可以仅选择CSS组合器后面的段落元素?我的HTML是这样的:
<div>
<h2>Header</h2>
</div>
<div>
<div>
<p>Here goes my first paragraph. This is what I need to select.</p>
<p>Here goes my second paragraph</p>
<p>Here goes my third paragraph</p>
</div>
</div>
<div>
<div>
<p>Here goes my fourth paragraph and I don't want to select this one.</p>
</div>
</div>
这个CSS最终会选择第一个以及我打算成为第四个段落:
p:first-of-type{
text-indent: 0;
}
所以我尝试使用这样的CSS:
div * h2 + div * p:first-of-type{
text-indent: 0;
}
但它不起作用。那么甚至可以将后代选择器与一般的兄弟选择器结合起来吗?
答案 0 :(得分:3)
div * h2 + div * p:first-of-type
这意味着:
p
是其容器中的第一个p
和,它是任何元素的后代,而后者又是{{1}的后代},这是div
的兄弟,是(等等)。
在您的HTML中,h2
不是div
的兄弟。
您的问题是,您首先需要选择h2
div
作为h2
的父,然后从那里链接其余的选择器。这是不可能的,因为CSS没有父选择器。
答案 1 :(得分:1)
当他们不是兄弟姐妹或被hirachy连接时,你不能从另一个childelement中选择一个childelement。
您可以使用此选择器,它会选择您想要的段落,但前提是您的HTML结构与您定义的一样:
div:nth-of-type(2) > div > p:first-child
最好的解决方案是为您提供元素类和ID。最好在CSS中使用尽可能少的规则。规则使页面变慢......
答案 2 :(得分:0)
你能编辑html吗?还有一些选择者可以解决这个问题。
<div class="mainContainer"> <!-- new div -->
<div>
<h2>Header</h2>
</div>
<div>
<div>
<p>Here goes my first paragraph. This is what I need to select.</p>
<p>Here goes my second paragraph</p>
<p>Here goes my third paragraph</p>
</div>
</div>
<div>
<div>
<p>Here goes my fourth paragraph and I don't want to select this one.</p>
</div>
</div>
</div> <!-- new div -->
然后用类似的东西:
.mainContainer div:nth-of-type(2) p:first-child { /* css here */ }
您应该能够通过这种方式设置第一段的样式,方法是定位第二个“sub”div中的第一个段落。