sleepyShen1989 / blog

MIT License
0 stars 0 forks source link

【实战】【css】:nth-child和:nth-of-type #18

Open sleepyShen1989 opened 1 year ago

sleepyShen1989 commented 1 year ago

搜索顺序

:nth-child:

  1. 找出对应元素父元素内所有的子元素 (不包含孙子元素)
  2. 找到对应位置的元素
  3. 匹配选择器

:nth-of-type:

  1. 找出包含对应元素父元素内所有的子元素 (不包含孙子元素)
  2. 根据元素的tag分类,
  3. 根据数字找到每个tag分类下对应位置的元素
  4. 匹配选择器

demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <style>
        /* #aa > div:nth-child(1): #aa中的子元素 且第一个元素是div */
        /* 如果使用标签选择器,建议添加>符号指定选择器层级
        该demo如果不指定层级,则child div也会是蓝色 */
        #aa > div:nth-child(1){
            color: blue
        }

        /* #aa div:nth-child(1): #aa中的子元素 且第二个元素是div */
        /* 因为第二个元素不是div,则该样式失效 */
        #aa > div:nth-child(2){
            color: red
        }

        /* div7成功改变了颜色,说明nth-child只对同级元素有效 */
        #aa > div:nth-child(7){
            color: greenyellow
        }

        /* 按选择器进行分类,所有div为一类,第二个div改变背景色 */
        #aa > div:nth-of-type(2){
            background-color: red
        }

        /* 
            #aa > .b:nth-of-type(2) 
            #aa下所有子元素根据标签分为div和p两类 
            根据数字2 找出根据标签归类后的第二个div和p
            也就是<p class="b">p3</p> 和 <div>div4<div>child div</div></div>
            但是只有p标签具有对应的选择器,
            所以样式只对p标签生效
        */
        #aa > .b:nth-of-type(2){
            background-color: rgb(186, 69, 153);
            font-size: 30px;
        }

        #aa > .b:nth-of-type(3){
            background-color: rgb(186, 69, 153);
            font-size: 40px;
        }

    </style>
    <div id="aa">
        <div>div1</div>
        <p>p2</p>
        <p class="b">p3</p>
        <div>
            div4
            <div>child div</div>
        </div>
        <p>p5</p>
        <p>p6</p>
        <div class="b">div7</div>
        <p>p8</p>
        <p class="b">p9</p>
        <div class="b">div10</div>
        <p>p11</p>
        <p class="b">p12</p>
        <div class="b">div13</div>
        <p>p14</p>
        <p>p15</p>

        <!-- 归类后 -->
        <!-- 
            <div>div1</div>
            <div>
                div4
                <div>child div</div>
            </div>
            <div class="b">div7</div>
            <div class="b">div10</div>
            <div class="b">div13</div>

            <p>p2</p>
            <p class="b">p3</p>
            <p>p5</p>
            <p>p6</p>
            <p>p8</p>
            <p class="b">p9</p>
            <p>p11</p>
            <p class="b">p12</p>
            <p>p14</p>
            <p>p15</p> 

        -->
    </div>

</body>
</html>