first-child与first-of-type的区别

77 阅读3分钟

first-child与first-of-type的区别

first-childfirst-of-type 是 CSS 中的伪类选择器,用于选择特定位置的元素,但它们的作用机制和选择范围有所不同。以下是它们的详细区别:

  1. :first-child
  • 定义:选择父元素中的第一个子元素,且该子元素必须满足选择器的条件。

  • 特点

    • 只关注元素在其父元素中的位置,不关心元素类型。
    • 如果第一个子元素不满足选择器的条件,则不会匹配任何元素。
  • 示例

    <div>
        <p>第一个子元素(p)</p>
        <span>第二个子元素(span)</span>
        <p>第三个子元素(p)</p>
    </div>
    
    p:first-child {
        color: red; /* 只有当第一个子元素是 <p> 时才会生效 */
    }
    

    在上面的例子中,如果第一个子元素是 <p>,则其颜色会变为红色;否则,不会生效。

  1. :first-of-type
  • 定义:选择父元素中同类型元素的第一个。

  • 特点

    • 关注元素的类型,选择同类型元素中的第一个。
    • 即使第一个同类型元素不是父元素的第一个子元素,也会被选中。
  • 示例

    <div>
        <span>第一个子元素(span)</span>
        <p>第二个子元素(p)</p>
        <p>第三个子元素(p)</p>
    </div>
    
    p:first-of-type {
        color: blue; /* 选择第一个 <p> 元素 */
    }
    

    在上面的例子中,第二个子元素是第一个 <p> 元素,因此其颜色会变为蓝色。

  1. 主要区别
特性:first-child:first-of-type
选择范围父元素的第一个子元素父元素中同类型元素的第一个
是否关注元素类型不关注元素类型关注元素类型
匹配条件必须是父元素的第一个子元素只需是同类型元素中的第一个
示例p:first-child:选择第一个子元素且为 <p>p:first-of-type:选择第一个 <p> 元素
  1. 使用场景对比

:first-child 的使用场景

  • 需要选择父元素的第一个子元素,且该子元素必须满足特定条件。
  • 适用于严格限制第一个子元素类型的场景。

示例

ul li:first-child {
    font-weight: bold; /* 仅当第一个子元素是 <li> 时生效 */
}

:first-of-type 的使用场景

  • 需要选择父元素中同类型元素的第一个。
  • 适用于父元素包含多种类型子元素的场景。

示例

article p:first-of-type {
    font-size: 1.2em; /* 选择第一个 <p> 元素 */
}
  1. 注意事项
  • 嵌套结构:在嵌套结构中,:first-child:first-of-type 的作用范围仅限于当前父元素。
  • 兼容性:两者在现代浏览器中支持良好,但在某些旧版本浏览器中可能存在兼容性问题。
  • 结合使用:可以结合其他选择器(如类选择器、属性选择器等)实现更精确的选择。
  1. 示例对比

HTML 结构

<div>
    <span>第一个子元素(span)</span>
    <p>第二个子元素(p)</p>
    <p>第三个子元素(p)</p>
</div>

CSS 样式

/* :first-child */
p:first-child {
    color: red; /* 不会生效,因为第一个子元素是 <span> */
}

/* :first-of-type */
p:first-of-type {
    color: blue; /* 生效,选择第一个 <p> 元素 */
}

总结

  • :first-child:选择父元素的第一个子元素,且必须满足选择器条件。
  • :first-of-type:选择父元素中同类型元素的第一个,不关心其在父元素中的位置。

根据具体需求选择合适的伪类,可以更精确地控制样式。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github