我从w3-schools那里拿了这个例子(参见link)。如果我将p:first-child
定义为具有这样的黄色背景:
<!DOCTYPE html>
<html>
<head>
<style>
p:first-child {
background-color:yellow;
}
</style>
</head>
<body>
<p>This paragraph is the first child of its parent (body).</p>
<h1>Welcome to My Homepage</h1>
<p>This paragraph is not the first child of its parent.</p>
<div>
<p>This paragraph is the first child of its parent (div).</p>
<p>This paragraph is not the first child of its parent.</p>
</div>
</body>
</html>
一切正常,<p>This paragraph is the first child of its parent (body).</p>
以及<p>This paragraph is the first child of its parent (div).</p>
获得黄色背景。
但是当我在第一个p
元素之前添加标题时,就像这样:
...
<body>
<h1>test</h1>
<p>This paragraph is the first child of its parent (body).</p>
...
.. <p>This paragraph is the first child of its parent (body).</p>
不再获得黄色背景。
为什么呢?我将CSS样式应用于所有第一个p
元素。当我添加标题时,此后的p
元素显然仍然是第一个p
元素。为什么它不起作用?
答案 0 :(得分:6)
它仍然是第一个p元素,但它不再是第一个子元素(如示例文本所述)。当您向上添加标题时,该标题将成为第一个孩子。
如果您想要每个父级中的第一个p元素而不管其整体位置,请改用p:first-of-type
。
答案 1 :(得分:3)
p:first-child
表示选择其父级的第一个子级,当且仅当它是p
元素时。
您想要p:first-of-type
,这意味着选择第一个子p
元素。
:first-child CSS伪类表示任何元素 其父母的第一个子元素。
:第一个类型的CSS伪类代表了第一个兄弟 它在父元素子元素列表中的类型。
答案 2 :(得分:2)
请尝试p:first-of-type
。我相信,使用p:first-child
选择也 父元素的第一个孩子的任何p
个元素。当您在h1
元素前添加p
元素时,h1
成为第一个子元素,因此p:first-child
不再有效。
答案 3 :(得分:2)
p:first-child
实际上是指任何元素<p>
,它是其父元素的第一个子元素。
当您添加<h1>
时,您正在进行此操作,以便<p>
不再是第一个孩子。
您可能希望改为使用p:first-of-type。
答案 4 :(得分:1)
我用这种方式来解决(只是为了确保与旧浏览器兼容):
p:first-child,
h1 + p {
background-color:yellow;
}
这样你就可以处理所有第一个子段落和每个h1之后的所有段落(如果你想更具体一点,你可以在这种情况下将选择器改进为“body&gt; h1 + p” “)