:nth-of-type()不起作用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    .test:nth-of-type(1) {
        background: pink;
    }
    </style>
</head>
<body>
    <h1>123</h1>
    <p>123</p>
    <h1 class="test">123</h1>
    <h1 class="test">123</h1>
</body>
</html>

实在是想不出为什么没有会选不中,Why?

我的理解是:h1.test标签的父元素下的第一个有.test类的元素。

阅读 13.7k
6 个回答

谢邀,应该这么玩

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
      .test:nth-of-type(1) {
        background: pink;
      }
    </style>
  </head>

  <body>
    <h1 class="test">123</h1>
    <p>123</p>
    <h1 class="test">123</h1>
    <h1 class="test">123</h1>
  </body>

</html>

然后来解释:
https://developer.mozilla.org...

CSS 伪类:nth-of-type(an+b) 匹配在文档树中前面有an+b-1个相同标签名兄弟元素的元素,此时n大于或等于0,并且该元素具有父元素。参见 :nth-child关于伪元素参数语法详细的说明. 如果你想在不受同胞异类元素和父元素影响保证自己选择相同类型得元素,这个伪元素更加灵活实用.

.test:nth-of-type(1)意思是在当前平级dom节点中所有h1标签又同时是第1个节点的标签,改变背景色。

应该是可以的,什么浏览器,nth-of-type不支持ie11以下的

.test:nth-of-type(1)要符合

  1. 是其父元素内具有相同标签名兄弟元素的第一个元素

  2. .test这个类

所以题主想要改变第三行的<h1 class="test">123</h1>背景色,选择器条件符合第二条不符合第一条

可以测试下,.test:nth-of-type(2)既是第2个h1, 又有.test,符合条件

:nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.

所以页面结构应该这样写

<h1>123</h1>
<p>123</p>

<div>
  <h1 class="test">123</h1>
  <h1 class="test">123</h1>
</div>

.test:nth-of-type(1)是两个条件
第一个:是test类的元素
第二个:匹配在文档树中第1个相同标签名兄弟元素的元素
第一行<h1>123</123>符合第二条,却不符合第一条,所以无法匹配
其他行符合第一条,却不符合第二条,所以无法匹配

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