`nth-child()`的 基础用法

nth-child()CSS 中最强大、最实用的伪类选择器之一 ,它允许你根据元素在其父元素中的位置(序号)来选择元素

简单说就是:"我想选第几个、或者每隔几个元素"

下面我通过概念 → 语法 → 8 个经典示例 → Vue 3 实战,给你完整讲清楚。


一、基础概念(一句话)

nth-child() 用来 选中父元素下的"第 n 个子元素"

例如:

  • 第 1 个
  • 第 2 个
  • 所有奇数个
  • 第 3 个及之后每隔 3 个

二、语法格式

css 复制代码
/* 选中第 n 个子元素 */
元素:nth-child(n) {
  /* 样式 */
}

n 可以是

  1. 数字:3 → 第 3 个
  2. 关键字:oddeven
  3. 公式:2n3n+1

三、8 个核心示例(从简单到进阶)

✅ 示例 1:选中第 3 个元素

css 复制代码
li:nth-child(3) {
  color: red;
}

📊 效果:

复制代码
1. 正常
2. 正常
3. ✅ 红色
4. 正常

✅ 示例 2:选中所有奇数位元素

css 复制代码
li:nth-child(odd) {
  background: #f5f5f5;
}

📊 效果:

复制代码
1. ✅ 灰色
2. 正常
3. ✅ 灰色
4. 正常

✅ 示例 3:选中所有偶数位元素

css 复制代码
li:nth-child(even) {
  background: #f5f5f5;
}

✅ 示例 4:选中"第 3 个及之后每隔 3 个"

css 复制代码
li:nth-child(3n) {
  color: blue;
}

📊 效果:

复制代码
1. 正常
2. 正常
3. ✅ 蓝色
4. 正常
5. 正常
6. ✅ 蓝色

👉 3n = 3, 6, 9, 12, ...


✅ 示例 5:选中"从第 1 个开始,每隔 2 个"

css 复制代码
li:nth-child(2n+1) {
  font-weight: bold;
}

📊 效果:

复制代码
1. ✅ 粗体
2. 正常
3. ✅ 粗体
4. 正常

👉 等价于 odd


✅ 示例 6:选中"前 4 个"

css 复制代码
li:nth-child(-n+4) {
  color: green;
}

📊 效果:

复制代码
1. ✅ 绿色
2. ✅ 绿色
3. ✅ 绿色
4. ✅ 绿色
5. 正常

✅ 示例 7:选中"第 3 个及之后"

css 复制代码
li:nth-child(n+3) {
  border-top: 1px solid #ccc;
}

📊 效果:

复制代码
1. 正常
2. 正常
3. ✅ 有上边框
4. ✅ 有上边框

✅ 示例 8:选中"第 2、5、8、11 个..."

css 复制代码
li:nth-child(3n+2) {
  background: yellow;
}

📊 效果:

复制代码
1. 正常
2. ✅ 黄色
3. 正常
4. 正常
5. ✅ 黄色

👉 3n+2 = 2, 5, 8, 11, 14, ...


四、nth-child 的工作机制(非常重要)

nth-child()计算顺序

  1. 找到所有兄弟元素
  2. 从 1 开始编号
  3. 应用公式计算
  4. 匹配元素

注意 :编号时不考虑元素类型,只看位置。


五、Vue 3 实战示例

vue 复制代码
<template>
  <ul>
    <li v-for="(item, index) in items" :key="index">{{ item }}</li>
  </ul>
</template>

<script setup>
const items = ['Apple', 'Banana', 'Orange', 'Grape', 'Mango']
</script>

<style scoped>
/* 隔行变色 */
li:nth-child(odd) {
  background: #f8f9fa;
}

li:nth-child(even) {
  background: #e9ecef;
}

/* 第一个特殊 */
li:first-child {
  border-top-left-radius: 8px;
  border-top-right-radius: 8px;
}

/* 最后一个特殊 */
li:last-child {
  border-bottom-left-radius: 8px;
  border-bottom-right-radius: 8px;
}
</style>

六、企业级常见用法

✅ 表格隔行变色

css 复制代码
tr:nth-child(odd) {
  background: #fafafa;
}

✅ 卡片列表"3 列网格"最后一列特殊

css 复制代码
/* 选中每行的第 3 个 */
.card:nth-child(3n) {
  border-right: none;
}

✅ 导航菜单激活样式

css 复制代码
.nav-item:nth-child(2) {
  border-bottom: 2px solid #1890ff;
}

七、对比相关选择器

选择器 作用 示例
nth-child(n) 第 n 个所有类型的子元素 li:nth-child(3)
nth-of-type(n) 第 n 个特定类型的子元素 li:nth-of-type(3)
first-child 第一个 等价于 :nth-child(1)
last-child 最后一个 无 nth-child 对应

八、常见坑点(避免犯错)

❌ 坑 1:混合元素类型

html 复制代码
<div>
  <p>段落1</p>
  <span>span1</span>
  <p>段落2</p>
</div>
css 复制代码
/* 会选中 span1 */
p:nth-child(2) { ... }

✅ 建议用 nth-of-type


❌ 坑 2:从 0 开始

css 复制代码
/* 错!n 从 1 开始 */
:nth-child(0) { ... }

✅ 正确::nth-child(1)


九、公式快速记忆表

公式 选择元素
n 所有
2neven 偶数
2n+1odd 奇数
3n 3, 6, 9, 12, ...
-n+5 前 5 个
n+4 第 4 个及之后

十、一句话总结

nth-child = 按位置选元素

常用:odd/even、3n、n+4

Vue 3 中常用于列表/表格样式控制


如果你愿意,我可以下一步帮你:

  • ✅ 写一个 商品列表 3 列网格布局
  • ✅ 实现 表格的斑马纹 + 最后一列特殊样式
  • ✅ 对比 nth-child 和 nth-of-type 差异

你现在是表格/列表/卡片哪种场景?

相关推荐
放下华子我只抽RuiKe52 分钟前
React 从入门到生产(六):路由与导航
前端·人工智能·深度学习·react.js·前端框架·html·claude code
Sylus_sui3 分钟前
实现:每行固定 5 个、自动换行、最后一行左对齐、数量不固定
前端·javascript·css
文滨12 分钟前
10分钟搞定!Mac 配置 GitHub SSH 完全指南(小白也能看懂)
前端·macos·ssh·github
2601_9584925516 分钟前
7 WordPress Tools I Trust for Building a High-Traffic Magazine Site
前端·word
IT_陈寒27 分钟前
Java的finally块竟然不是你想的那个finally!
前端·人工智能·后端
2501_9400417429 分钟前
挖掘前端交互潜力的五款创意游戏原型
前端·游戏
C+-C资深大佬29 分钟前
变量作用域(通俗 + 清晰讲解,适合编程入门)
前端·javascript·vue.js
weelinking32 分钟前
【claude】15_Claude使用经验与最佳实践
前端·人工智能·python·sql·数据挖掘·前端框架·github
XS03010641 分钟前
HTML 入门教程
前端·html