我的html页面有问题。在这种情况下,为什么p属性的第一个元素被认为是第二个元素?
/* This won't work */
#div1 p:nth-child(1) {
background: #ff0000;
}
/* This will work */
#div2 p:nth-child(2) {
background: #ff0000;
}
<div id="div1">
<h1>This is a heading</h1>
<p>The first paragraph.</p>
<p>The second paragraph.</p>
<p>The third paragraph.</p>
<p>The fourth paragraph.</p>
</div>
<div id="div2">
<h1>This is a heading</h1>
<p>The first paragraph.</p>
<p>The second paragraph.</p>
<p>The third paragraph.</p>
<p>The fourth paragraph.</p>
</div>
谢谢
答案 0 :(得分:3)
您需要使用nth-of-type(1)
而不是nth-child()
,因为后者将计算顺序,而不考虑元素类型。
p:nth-child(1)
将无效,因为该段落不是父级的第一个元素。
p:nth-of-type(1) {
background: #ff0000;
}
&#13;
<h1>This is a heading</h1>
<p>The first paragraph.</p>
<p>The second paragraph.</p>
<p>The third paragraph.</p>
<p>The fourth paragraph.</p>
&#13;
答案 1 :(得分:1)
nth-child
计算与父项相关的子元素数。如果您只想计算p
个元素,则应使用nth-of-type
,即
p:nth-of-type(1) {
background: #ff0000;
}
答案 2 :(得分:0)
您可以使用:first-child
伪选择器。
试试这个:
#div1 p:first-child {
...
}
答案 3 :(得分:0)
使用p:nth-child(1)
时选择器无法正常工作的原因是,选择器的工作方式与 IF 语句之间的 AND 不同由一些说明符分隔(例如空格字符或>
,~
等)。例如,选择器div.myClass
匹配类<div>
的{{1}}个元素。伪类的保持:myClass
匹配正在悬停的div:hover
个元素。在您的情况下,组合为<div>
,它会在文档树中选择具有0(公式为 a + b-1 )兄弟的p:nth-child(1)
元素,并且没有这样的元素。使用<p>
,您获得的第二个元素也是p:nth-child(2)
。
就解决这个问题而言,最明显的解决方案是使用<p>
选择第二个兄弟,无论其类型如何,或:nth-child(2)
1 (或简称{{} 1}})匹配p:nth-of-type(1)
类型的第一个元素。
1 关于p:first-of-type
的注释:此伪类与其类型的n th 元素匹配,而不管前导类型选择器如何。请参阅下一个代码段:
<p>
&#13;
nth-of-type(an+b)
&#13;