为啥第一个不高亮?

为啥第一个不高亮??

image.png

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    <style>
        .my-field-line:nth-of-type(1) {
            background: #ff0000;
        }

        p:nth-of-type(1) {
            background: #ff0000;
        }
    </style>
</head>

<body>
    <div>
        <div>这是一个标题</div>
        <div class="my-field-line">1</div>
        <div class="my-field-line">2</div>
        <div class="my-field-line">3</div>
        <div class="my-field-line">4</div>
    </div>
    <div>
        <h1>这是一个标题</h1>
        <div class="my-field-line">1</div>
        <div class="my-field-line">2</div>
        <div class="my-field-line">3</div>
        <div class="my-field-line">4</div>
    </div>
    <div>
        <h1>这是一个标题</h1>
        <p>这是第一个段落。</p>
        <p>这是第二个段落。</p>
        <p>这是第三个段落。</p>
        <p>这是第四个段落。</p>
    </div>
    <div>
        <div>这是一个标题</div>
        <p>这是第一个段落。</p>
        <p>这是第二个段落。</p>
        <p>这是第三个段落。</p>
        <p>这是第四个段落。</p>
    </div>

</body>

</html>
阅读 1.4k
2 个回答

nth-of-type是关联标签的,所以相当于找到所有的div,然后同时index为1且类名为.my-field-line的元素,但是没有符合条件的,就没有元素背景颜色发生变化。

nth-of-type是查找同层级同类型的元素,显而易见,题主的my-field-line类的类型是div,那么渲染器就会遍历目标层级的所有div,放入一个队列里,然后匹配头一个div,因为题主又具体给出了类名是my-field-line,所以这样只有开头的第一个div是my-field-line的时候会生效

如:

 <div>
        <div class="my-field-line">1</div>
        <div>这是一个标题</div>
        <div class="my-field-line">1</div>
        <div class="my-field-line">2</div>
        <div class="my-field-line">3</div>
        <div class="my-field-line">4</div>
    </div>

才能实现题主想要的效果
image.png

但是在使用nth-of-type时浏览器引擎不会匹配不同的元素,所以题主使用h1标签的时候会正常显示,因为排除h1标签后,第一个div恰好是my-field-line类

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题