css :nth child 选择器怎么用_列表样式控制示例

26次阅读

:nth-child(n) 按元素在父容器中的物理位置(第几个子元素)匹配,与标签类型无关;若目标位置的子元素不是指定标签(如li),则不生效。

css :nth child 选择器怎么用_列表样式控制示例

怎么用 :nth-child() 选中特定位置的列表项

直接说结论::nth-child(n) 是按元素在其父容器中的**物理位置**(即第几个子元素)来匹配的,不是按类型。哪怕你写的是 li:nth-child(2),如果第二个子元素不是

  • (比如是
    或文本节点),那它就完全不生效。

    常见误用场景:想给“第二个

  • ”加样式,但父元素里混了其他标签,结果样式没出现——大概率就是这个原因。

    • :nth-child(1) → 选中第一个子元素(且必须是目标标签,如 li
    • :nth-child(odd):nth-child(2n+1) → 所有奇数位子元素
    • :nth-child(even):nth-child(2n) → 所有偶数位子元素
    • :nth-child(3n) → 第 3、6、9… 个子元素(3 的倍数位)
    • :nth-child(3n+2) → 第 2、5、8… 个子元素(从第 2 个开始,每 3 个一循环

    :nth-child():nth-of-type() 的关键区别在哪

    这是最容易混淆的一点::nth-child() 数的是「所有子元素」的顺序;:nth-of-type() 数的是「同类型标签」的顺序。

    比如父元素是:

    立即学习前端免费学习笔记(深入)”;

      说明文字
    • 苹果
    • 香蕉
    • 分隔线
    • 橙子

    那么:

    • li:nth-child(2) ✅ 匹配「香蕉」(因为
    • 正好在第 2 个位置)
    • li:nth-child(3) ❌ 不匹配「香蕉」,也不匹配「橙子」——第 3 个子元素是
    • (香蕉),但第 3 个子元素确实是
    • ,所以这里其实 ✅;真正失效的是 li:nth-child(4)(第 4 个是
    • li:nth-of-type(2) → 匹配「香蕉」(它是第 2 个
    • li:nth-of-type(3) → 匹配「橙子」(它是第 3 个
    • ),不管前面插了多少非 li 元素

    实用列表样式控制示例:斑马纹 + 首尾特殊处理

    真实项目中经常要实现「奇偶行不同背景」「第一项加图标」「最后一项去边框」这类效果。用 :nth-child() 写起来很直接,但要注意兼容性和语义。

    下面这段 css 会作用于一个干净的

    • ...

    结构(无其他子元素干扰):

    ul li {   padding: 8px 12px;   border-bottom: 1px solid #eee; } 

    / 奇数项浅灰背景 / ul li:nth-child(odd) { background-color: #f9f9f9; }

    / 偶数项白色背景(可省略,除非要覆盖) / ul li:nth-child(even) { background-color: #fff; }

    / 第一项加左侧蓝条 / ul li:nth-child(1) { border-left: 4px solid #007bff; }

    / 最后一项去掉下边框 / ul li:last-child { border-bottom: none; }

    注意::last-child:nth-child(n) 更安全,只要最后一个子元素确实是

  • 就能命中;但如果末尾有
  • text=ZqhQzanResources