css-nth-of-type vs nth-child

前端之家收集整理的这篇文章主要介绍了css-nth-of-type vs nth-child前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点困惑的第n类型伪类,以及这应该如何工作 – 特别是与第n子类相比。

也许我有错误的想法,但给定这种结构

<div class="row">
    <div class="icon">A</div>
    <div class="icon">B</div>
    <div class="label">1</div>
    <div class="label">2</div>
    <div class="label">3</div>
</div>

..第三个子元素(第一个有类标签)应该(可能?)可选

.row .label:nth-of-type(1) {
    /* some rules */
}

但是,至少在这里的chrome,它不选择它。它只是看起来工作,如果它是行中的第一个孩子,这是相同的nth孩子 – 因此,这和类型之间的区别是什么?

解决方法

第n个子伪类指的是“第N个匹配的子元素”,意味着如果你有一个如下的结构:
<div>
    <h1>Hello</h1>

    <p>Paragraph</p>

    <p>Target</p>
</div>

然后p:nth-​​child(2)将选择第二个孩子,它也是一个p(即,“Paragraph”的p)。
p:nth-​​of-type将选择第二个匹配的p元素(即我们的目标p)。

Here’s a great article on the subject by Chris Coyier @ CSS-Tricks.com

你的断裂的原因是因为类型指的是元素的类型(即div),但是第一个div不匹配你提到的规则(.row .label),因此规则不适用。

原因是,CSS is parsed right to left,这意味着浏览器首先查找:nth-​​of-type(1),确定它搜索类型为div的元素,它也是其类型的第一个,与.row元素匹配,和第一个.icon元素。然后它读取元素应该有.label类,它不匹配上面的。

如果要选择第一个标签元素,您需要将所有标签包装在自己的容器中,或者只使用nth-of-type(3)(假设总是有2个图标)。

另一种选择,会(可悲的是)使用…等待它… jQuery:

$(function () {
    $('.row .label:first')
        .css({
            backgroundColor:"blue"
        });
});

猜你在找的CSS相关文章