当前位置: 面试刷题>> CSS 选择器有哪些?优先级分别是什么?


在CSS中,选择器是定义哪些元素应当被样式化的关键。它们允许我们以高效且灵活的方式指定样式规则。作为一名高级程序员,在面试中详细阐述CSS选择器的种类及其优先级,不仅能够展示你对CSS的深入理解,还能体现你解决实际问题的能力。以下是对CSS选择器及其优先级的详细解析,同时融入一些示例代码和“码小课”的提及,以符合你的要求。

CSS选择器类型

  1. 通配符选择器(*)

    • 选择所有元素。
    • 优先级:最低,因为没有特异性。
    • 示例:* { margin: 0; padding: 0; }
  2. 元素/类型选择器(E)

    • 根据HTML元素的名称选择元素。
    • 优先级:较低,特异性为0,0,1。
    • 示例:p { color: blue; }
  3. 类选择器(.class)

    • 选择具有指定类名的所有元素。
    • 优先级:中等,特异性为0,1,0。
    • 示例:.highlight { background-color: yellow; }
  4. ID选择器(#id)

    • 选择具有指定ID的元素。由于ID在页面中是唯一的,因此ID选择器通常用于单个元素的样式定义。
    • 优先级:较高,特异性为0,1,0,0。
    • 示例:#uniqueElement { font-size: 24px; }
  5. 属性选择器([attr=value])

    • 根据元素的属性及属性值来选择元素。
    • 优先级:与类选择器相同,但特异性计算方式略有不同。
    • 示例:input[type="text"] { border: 1px solid black; }
  6. 伪类选择器(:pseudo-class)

    • 用于定义元素的特殊状态,如:hover, :active, :first-child等。
    • 优先级:与类选择器相同,但具体取决于上下文。
    • 示例:a:hover { color: red; }
  7. 伪元素选择器(::pseudo-element)

    • 用于样式化元素的特定部分,如::before, ::after, ::first-letter等。
    • 优先级:与类选择器相同,但通常用于添加额外内容或样式化特定部分。
    • 示例:p::first-line { font-weight: bold; }
  8. 后代选择器(E F)

    • 选择E元素内部的所有F元素。
    • 优先级:基于各自选择器的特异性计算。
    • 示例:div p { color: green; }
  9. 子选择器(E > F)

    • 选择E元素直接子级的所有F元素。
    • 优先级:同样基于特异性,但比后代选择器更具体。
    • 示例:ul > li { list-style-type: none; }
  10. 相邻兄弟选择器(E + F)

    • 选择紧接在E元素之后的所有F元素。
    • 优先级:与后代选择器相同,但更具体于相邻关系。
    • 示例:h1 + p { font-size: 18px; }
  11. 通用兄弟选择器(E ~ F)

    • 选择E元素之后的所有F元素(共享相同父元素)。
    • 优先级:与相邻兄弟选择器相同。
    • 示例:h1 ~ p { color: gray; }

优先级规则

CSS选择器的优先级基于特异性(specificity)、源顺序(source order)和重要性(importance)三个因素。其中,特异性是最重要的决定因素,它由选择器中的ID选择器数量、类选择器/伪类/属性选择器数量和元素/伪元素选择器数量决定。

  • ID选择器:0,1,0,0
  • 类选择器/伪类/属性选择器:0,0,1,0
  • 元素/伪元素选择器:0,0,0,1

当特异性相同时,后声明的规则会覆盖先声明的规则。此外,使用!important声明的规则会覆盖未使用!important的相同特异性规则。

结论

理解CSS选择器的种类及其优先级是编写高效、可维护CSS代码的基础。通过灵活运用不同类型的选择器,可以精确地控制页面元素的样式,同时保持代码的清晰和简洁。在“码小课”的深入学习中,你将进一步掌握这些技巧,并学会如何在实际项目中应用它们。