当前位置: 面试刷题>> 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代码的基础。通过灵活运用不同类型的选择器,可以精确地控制页面元素的样式,同时保持代码的清晰和简洁。在“码小课”的深入学习中,你将进一步掌握这些技巧,并学会如何在实际项目中应用它们。