【发布时间】:2022-01-06 15:50:52
【问题描述】:
我不知道为什么选择器 :first-child 适用于 'p' 元素和 NOT :last-child 并且对于以下 span 元素也会发生同样的情况 :last-child 有效,但 :first-child 无效。 (我想它们的默认父级是 body 元素)。我发现如果我在段落元素之后放置任何元素,它 (p:last-child) 不起作用,甚至对于以下元素 (span) 的行为也很奇怪,为什么当我 特别 时它不起作用> 告诉它选择父元素(在本例中为主体)的“p”(或跨度)元素的最后一个/第一个子元素?
<html>
<head>
<style>
p:first-child {
background: red;
}
span:last-child {
background: red;
}
</style>
</head>
<body>
<p>The first paragraph.</p>
<p>The second paragraph.</p>
<p>The second paragraph.</p>
<span>A..</span><span>B.. </span><span>C.. </span>
</body>
</html>
编辑:我刚刚找到所有这些 :first-of-type, last-of-type, first-child 和 :last-child 的 SPEC 说-“所选元素必须有一个父级。从第 4 级选择器开始,不再需要", 这意味着他们的规格有问题。如果他们不需要任何父母,那么它必须工作,即使他们需要,他们在我的情况下也有一个(身体元素)。首先,根据 SPEC,它们不再需要是子元素,其次,它们确实是默认 body 元素的子元素。因此,所有这些都应该起作用(相对于父体)。
【问题讨论】:
-
它工作正常!您确定您的测试环境可以正常工作吗?
-
我刚刚在w3schools编辑器里试了一下
-
:first-child和last-child是必须单独匹配的条件。在它前面添加一个选择器,如p或span,只是进一步限制了已经匹配的元素列表。所以p:first-child读作 Find all elements which are the first child elements of their parent;然后从找到的那些中,只给我p元素。