我想选择第一个名为“aProduct”的div,但我对如何做到这一点感到有些困惑。我已经尝试过了:
<div id="kasticketProducts">
<div class="aProductHeader"></div>
<div class="aProduct"></div>
<div class="aProductHeader"></div>
<div class="aProduct"></div>
</div>
这是我目前的CSS:
#kasticketProducts:first-child .aProduct {
margin-top: 30px;
background: red;
}
答案 0 :(得分:3)
#kasticketProducts:first-child .aProduct
使用上面的css意味着首先它会在第一个孩子中搜索带有kasticketproducts的id,这里第一个孩子从这里引用aProductHeader,你试图搜索aProduct但它不在那里。
实际上,从DOM层次结构中,aProduct类div处于第二个子节点,这将在css中称为nth-child(2),而不需要再次使用.aProduct。因此,最终的解决方案是写为#kasticketProducts div:nth-child(2)
答案 1 :(得分:2)
首先,差异是什么?
来自 MDN :
:first-child
CSS伪类表示作为其父元素的第一个子元素的任何元素。
:first-of-type CSS伪类在其父元素的子元素列表中表示其类型的第一个兄弟。
因此,与:first-child()
:first-of-type()
有点松散的伪选择器
不幸的是:first-child
或:first-of-type
并不尊重类或 ids ,它们只关注DOM元素。所以,如果你做的事情会失败
#kasticketproducts div.aProduct:first-of-type {
color: red;
}
因此,在这种情况下,使用CSS可以做的最好的事情就是:nth-of-type()
使用2
作为值,现在很明显,如果你的元素没有{{1} } class
aProduct
或强>
您可以将相邻选择器与#kasticketproducts div:nth-of-type(2) {
color: red;
}
:first-of-type()
就IE而言,第二种解决方案更加兼容
答案 2 :(得分:0)
答案 3 :(得分:0)
您无法定位类的第一个元素,但您可以定位之后的元素,因此您可以在所有aProduct
元素上设置样式,然后在所有aProduct
元素上覆盖它们1}}在使用~
opreator的第一个之后出现:
#kasticketproducts .aProduct {
margin-top: 30px;
background: red;
}
#kasticketproducts .aProduct ~ .aProduct {
margin-top: 0;
background: none;
}
答案 4 :(得分:0)
另一种解决方案是样式.aProduct
,然后使用通用兄弟组合器覆盖任何后续出现的.aProduct
的样式:
#kasticketProducts .aProduct {
// effectively becomes the style for the first occurrence of .aProduct
}
#kasticketProducts .aProduct ~ .aProduct {
// overrides the style set above for all occurrences of .aProduct,
// apart from the first
}
这种方法的最大优点是它不依赖于标记的结构。
答案 5 :(得分:-1)
检查#id,区分大小写
另外,要小心引号,你不要关闭它们。
<div id="kasticketProducts">
<div class="aProductHeader">aaa</div>
<div class="aProduct">aaa</div>
<div class="aProductHeader">aaaa</div>
<div class="aProduct">aaa</div>
首先选择.aProduct
:
#kasticketProducts .aProduct:nth-child(2) {
/* your styles */
}
很抱歉,想到获得第一个kasticketProduct。道歉。