Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • HTML

  • CSS

    • css 编码指南
    • CSS3 的 calc 使用
    • 表格固定表头的几种方法
    • nth-child 和 nth-of-type 的区别
    • 修改浏览器默认滚动条
    • 为什么两个宽度为父元素一半的子元素会超出父元素
  • 页面
  • CSS
Henry
2017-03-21

nth-child 和 nth-of-type 的区别

对于初学者来说, 区别 nth-child 和 nth-of-type 是一个比较头疼的问题, 为了更好帮助大家区别两者使用方法, 特在此加以区分.

首先创建一个 HTML 结构.

<div class="post">
  <p>我是文章的第一个段落</p>
  <p>我是文章的第二个段落</p>
</div>
1
2
3
4

接下来, 使用 :nth-child 和 :nth-of-type 选择段落并改变其文字颜色.

.post > p:nth-child(2) {
  color: red;
}

.post > p:nth-of-type(2) {
  color: red;
}
1
2
3
4
5
6
7

上面的代码都把 .post 中的第二段文字变成了大红色, 是不是代表这两个选择器就是一样的呢? 其实不然. nth-child 仅从字面上来解释, 其实包含了两层意思. 首先是一个 p 元素, 而且这个 p 是父元素 div 的第二个子元素; 而 nth-of-type 从字面上解释是 "选择父元素 div 的第二个 p 元素".

上面一段话看起来是不是很晕, 有没有更好方法来区分它们呢?~~~ 有的! 把上面的 HTML 结构改变一下, 在段落前加一个标题 h1.

<style type="text/css">
  .post > p:nth-child(2) {
    color: red;
  }

  .post > p:nth-of-type(2) {
    color: blue;
  }
</style>

<h1>我是标题</h1>
<p>我是文章的第一个段落</p>
<p>我是文章的第二个段落</p>
1
2
3
4
5
6
7
8
9
10
11
12
13

可以看到: :nth-child(2) 选择的是第一个段落, 而 :nth-of-type(2) 选择的是第二个段落

如果在 h1 标题后面添加一个 h2 标题

此时 :nth-child(2) 将无法选择任何元素, 因为, 此时 div 的第二个元素并不是段落一 p, 所以无法选择任何元素. 但 :nth-of-type(2) 仍然能正常工作, 因为选择的始终是 div 中第二个段落 p.

大家只需记住一点: 选择器: nth-child(n) 先根据后面的数字选中父元素的第 n 个子元素, 再判断这个子元素是否是前面的选择器, 如果是则样式生效, 否则无效; 而 选择器: nth-of-type(n) 先在父元素中找出所有符合前面选择器的子元素, 再从这些子元素中选择第 n 个子元素 (在父元素中有可能不是第 n 个)

如果父元素所有子元素类型都是相同的, 那么这两个选择器是没区别的

编辑 (opens new window)
#Css
上次更新: 5/27/2023, 1:02:05 PM
表格固定表头的几种方法
修改浏览器默认滚动条

← 表格固定表头的几种方法 修改浏览器默认滚动条→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式