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开始。

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

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

    可直接阅读原文.

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/AndyWithPassion/p/2198326.html
Copyright © 2011-2022 走看看