css 选择器 倍数

admin 102 0
CSS选择器优先级以倍数形式计算权重,内联样式权重1000,ID选择器100,类/伪类/属性选择器10,元素/伪元素1,倍数越大优先级越高,决定样式冲突时的应用顺序,倍数选择器如nth-child(2n)匹配偶数元素、nth-child(3n+1)匹配特定倍数加1的元素,可高效批量控制结构化样式,两者结合既保障样式优先级清晰,又提升元素选择的精确性与代码效率。

CSS 结构伪类选择器:精准定位元素的序列艺术

在 CSS 的世界中,选择器是样式匹配的“钥匙”,而结构伪类选择器(如 `:nth-child()`、`:nth-of-type()` 等)则是这把钥匙中最精密的“狙击镜”——它通过数学级数般的精准算法,让我们能高效定位列表、表格、网格等有序结构中的特定元素,彻底告别繁琐的手动逐个设置,本文将从核心语法到实战场景,深入剖析 CSS 结构伪类选择器的强大用法。

核心选择器:`:nth-child(an+b)` —— 基于“绝对位置”的精准狙击

`:nth-child()` 是结构伪类选择器中最常用、最强大的成员之一,它根据父元素下所有子元素的**绝对位置**(从 1 开始计数)来匹配符合公式 `an + b` 的元素,理解这个公式是掌握其精髓的关键。

  • a:**步长**(整数,可为 0);
  • b:**偏移量**(整数,可为负);
  • n:**变量**(取所有自然数,即 0, 1, 2, 3…)。

语法拆解:从数学公式到实际匹配

  • a=0:公式简化为 `b`,即精确选择第 `b` 个子元素(无论类型),`nth-child(3)` 匹配父元素下第 3 个子元素。

    <div class="parent">
      <span>第1个</span>  <!-- 不匹配 -->
      <p>第2个</p>      <!-- 不匹配 -->
      <div>第3个</div>  <!-- 匹配 -->
    </div>
    .parent :nth-child(3) { color: red; }
  • b=0:公式简化为 `an`,即从第 `a` 个元素开始,每隔 `a-1` 个元素选一个(步长为 `a`),`nth-child(2n)` 匹配所有偶数位子元素(等同于 `:nth-child(even)`),`nth-child(3n)` 匹配第 3、6、9…个子元素。

    <ul>
      <li>1</li>  <!-- 不匹配 (2n: 2,4,6...) -->
      <li>2</li>  <!-- 匹配 -->
      <li>3</li>  <!-- 不匹配 -->
      <li>4</li>  <!-- 匹配 -->
    </ul>
    li:nth-child(2n) { background: #f0f0f0; }
  • a≠0b≠0:从第 `b` 个元素开始,每隔 `a-1` 个元素选一个,`nth-child(3n+1)` 匹配第 1、4、7…个子元素(`n=0` 时 1,`n=1` 时 4,`n=2` 时 7…),这是最灵活、最常用的模式。

    <ol>
      <li>1</li>  <!-- 匹配 (3*0+1) -->
      <li>2</li>  <!-- 不匹配 -->
      <li>3</li>  <!-- 不匹配 -->
      <li>4</li>  <!-- 匹配 (3*1+1) -->
      <li>5</li>  <!-- 不匹配 -->
      <li>6</li>  <!-- 不匹配 -->
      <li>7</li>  <!-- 匹配 (3*2+1) -->
    </ol>
    li:nth-child(3n+1) { font-weight: bold; }

便捷简写:`:even` 与 `:odd`

  • `:nth-child(even)`:等同于 `:nth-child(2n)`,选择所有偶数位子元素;
  • `:nth-child(odd)`:等同于 `:nth-child(2n+1)`,选择所有奇数位子元素。
    /* 表格隔行变色 */
    tr:nth-child(even) { background: #e8f4f8; }

进阶选择器:`:nth-of-type(an+b)` —— 基于“类型分组”的智能定位

`:nth-of-type()` 与 `:nth-child()` 语法完全相同(同样使用 `an + b` 公式),但**核心区别在于计数方式**:

  • `:nth-child()`:**按父元素下所有子元素的绝对位置**计数,**不区分

    标签: #选择 #倍数