zoukankan      html  css  js  c++  java
  • :nthchild与:nthoftype之小解

    让我们看下面一段html:

    1 <section>
    2     <p>Little</p>
    3     <p>Piggy</p>  <!-- 定位此元素-->
    4 </section>

    下面的2种写法都可以达到目的

    1 p:nth-child(2) { color: red;}
    2 p:nth-of-type(2) { color: red;}

    但两者是存在差异的

    :nth-child 选择器,在此例子中意思就是指

    • 1.首先是个p元素
    • 2.其次这个p元素是其父元素的第二个孩子

    :nth-of-type 选择器,在此例子中意思就是指

    • 1.定位一个父元素下的第二个p元素

    :nth-of-type 可能更符合我们日常的思维方式

    让我们改变下html:

    1 <section>
    2     <h1>Words</h1>
    3     <p>Little</p>
    4     <p>Piggy</p>  <!-- 定位此元素 -->
    5 </section>

    同样用之前的2种方法:

    1 p:nth-child(2) { color: red; } /* 无法正确定位 */
    2 p:nth-of-type(2) { color: red; } /* 依然有效 */

    按照之前的解释简单分析下:

    :nth-child 选择器

    首先是个p元素,没有问题,但是其父元素的第二个孩子是<p>Little</p>,所以没有正确定位

    :nth-of-type 选择器

    父元素下的第二个p元素,正是我们想要的结果

    再进一步,如果我在 h1之后加入一个h2,在这个例子中:nth-child选择器则无法定位任何元素,因为父元素的第二个元素是 h2,而不是p元素。相对的, :nth-of-type依然有效。

    我个人觉得:nth-of-type更健壮些,尽管:nth-child貌似用的更多些。 而且大部分时候,我们的想法都可能会是“定位一个父元素下的第二个p元素”, 而不是“定位一个父元素下的第二个元素,如果它是个p元素的话”。

    我遇到的大多数“我自问:为什么这个:nth-child选择器不起作用”的时候,基本都是 因为我给:nth-child选择器前置了一个标签,但是那个孩子节点并不是那个标签。 所以当我用:nth-child的时候,我觉得最好只指定父元素,:nth-child不要前置子元素标签。

    像下面这样:

    1 dl :nth-child(2) {} / * 这样更好些 * /
    2 dd:nth-child(2) {}  / * 比这个 * /

    当然,一切视具体情况而定。

    目前Safari3.1+,IE9+,ff3.5+,Opera9.5+,Chrome2+ 都支持:nth-of-type选择器。 如果你希望在较旧的浏览器中支持,可以考虑jQuery。 值得注意的是jQuery中:nth-child是按照标准来实现的,是从1开始计数,而jquery中得 :eq是从0开始。

    这里还有个测试页面, 可以帮助你更好地理解。

    以上是我的译文,翻译的不妥之处,感谢指出。

    可直接阅读原文.

  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/AndyWithPassion/p/2198326.html
Copyright © 2011-2022 走看看