div~div
和div:not(:first-of-type)
之间有区别吗?除了IE6以外,无论出现什么错误,都会有不同的情况吗?
答案 0 :(得分:5)
在匹配元素方面,没有区别。在同一父级中跟随其他div
的任何div
必然不是其父级中div
类型的第一个元素。
如果兄弟选择器是+
而不是~
,则div+div
具有以下元素必须紧接在前一元素之后出现的附加条件。 ~
不是这种情况 - 任何其他类型的兄弟姐妹都可能出现在两者之间。
如果伪类是:first-child
而不是:first-of-type
,那么如果其父级中的第一个div:not(:first-child)
不是div:first-of-type
,那么div
仍会匹配<section>
<div></div> <!-- div:first-child or div:first-of-type -->
<div></div> <!-- div+div or div~div or div:nth-of-type(2) -->
<p></p>
<div></div> <!-- div+p+div or div~div or div:nth-of-type(3),
but not div+div -->
</section>
<section>
<h1></h1> <!-- h1:first-child -->
<div></div> <!-- div:first-of-type or div:nth-child(2) -->
<div></div> <!-- div~div or div:nth-of-type(2) or div:nth-child(3) -->
</section>
第一个孩子。
以下是插图:
div:not(:first-of-type)
就specificity而言,存在差异。如果你有两个选择器匹配相同元素的CSS规则,那么由于:first-of-type
伪类,:not()
将优先。请注意,div {
float: left;
width: 50px;
height: 50px;
margin: 5px;
border: 1px solid red;
}
/* 1 pseudo-class, 1 type -> specificity = 0-1-1 */
div:not(:first-of-type) {
border-color: green;
}
/* 2 types -> specificity = 0-0-2 */
div ~ div {
border-color: blue;
}
本身不计算 - 只考虑其参数。
这是另一个例子:
<section>
<div></div>
<div></div>
<div></div>
</section>
{{1}}