CSS 选择器概览
在前面的章节中,你已经了解了 CSS 的基本语法和工作方式。现在,让我们深入学习 CSS 的核心概念之一——选择器(Selector)。选择器是 CSS 的"导航系统",它告诉浏览器哪些元素应该应用哪些样式。
什么是选择器?
选择器是 CSS 规则的第一部分,用于选择要应用样式的 HTML 元素。
/* 选择器 { 属性: 值; } */
p {
color: blue;
}
在这个例子中,p 就是选择器,它选择了所有的 <p> 元素,并将它们的文字颜色设置为蓝色。
选择器的作用
选择器的主要作用是:
- 定位元素:精确找到需要样式化的 HTML 元素
- 组织样式:通过不同的选择器,为不同的元素应用不同的样式
- 提高效率:一次选择多个元素,避免重复编写样式
/* 没有选择器,需要为每个元素单独写样式 */
<p style="color: blue;">段落 1</p>
<p style="color: blue;">段落 2</p>
<p style="color: blue;">段落 3</p>
/* 使用选择器,一次选择所有段落 */
p {
color: blue;
}
选择器的分类思路
CSS 选择器可以按照不同的方式进行分类。我们按照从简单到复杂的顺序来学习:
1. 基础选择器(Basic Selectors)
基础选择器是最简单、最常用的选择器类型,包括:
- 元素选择器:选择特定类型的 HTML 元素
- 类选择器:选择具有特定 class 属性的元素
- ID 选择器:选择具有特定 id 属性的元素
- 通用选择器:选择所有元素
/* 元素选择器 */
p { }
/* 类选择器 */
.highlight { }
/* ID 选择器 */
#header { }
/* 通用选择器 */
* { }
2. 属性选择器(Attribute Selectors)
属性选择器根据元素的属性来选择元素:
/* 选择具有特定属性的元素 */
input[type="text"] { }
/* 选择属性值以特定字符串 开头的元素 */
a[href^="https"] { }
3. 组合选择器(Combinators)
组合选择器通过元素之间的关系来选择元素:
- 后代选择器:选择某个元素的所有后代元素
- 子选择器:选择某个元素的直接子元素
- 相邻兄弟选择器:选择紧跟在某个元素后面的兄弟元素
- 通用兄弟选择器:选择某个元素后面的所有兄弟元素
/* 后代选择器 */
div p { }
/* 子选择器 */
div > p { }
/* 相邻兄弟选择器 */
h1 + p { }
/* 通用兄弟选择器 */
h1 ~ p { }
4. 伪类选择器(Pseudo-class Selectors)
伪类选择器选择处于特定状态的元素:
/* 链接的悬停状态 */
a:hover { }
/* 第一个子元素 */
li:first-child { }
/* 表单元素的焦点状态 */
input:focus { }
5. 伪元素选择器(Pseudo-element Selectors)
伪元素选择器选择元素的特定部分:
/* 第一行 */
p::first-line { }
/* 第一个字母 */
p::first-letter { }
/* 之前插入内容 */
p::before { }
选择器的组合能力
选择器最强大的特性之一是可以组合使用,创造出更精确的选择:
组合多个选择器
你可以将多个选择器组合在一起,选择同时满足多个条件的元素:
/* 选择既是 p 元素,又有 highlight 类的元素 */
p.highlight {
color: yellow;
}
/* 选择既有 highlight 类,又有 active 类的元素 */
.highlight.active {
font-weight: bold;
}
组合选择器和伪类
你可以将基础选择器与伪类组合:
/* 选择第一个段落 */
p:first-child {
font-size: 20px;
}
/* 选择悬停时的链接 */
a:hover {
color: red;
}
组合组合选择器
你还可以将组合选择器与其他选择器组合:
/* 选择 div 中所有具有 highlight 类的段落 */
div p.highlight {
background-color: yellow;
}
/* 选择紧跟在 h1 后面的第一个段落 */
h1 + p.highlight {
margin-top: 0;
}
选择器列表
你可以使用逗号将多个选择器组合成一个规则:
/* 选择所有 h1、h2 和 h3 元素 */
h1, h2, h3 {
color: blue;
font-weight: bold;
}
/* 选择所有段落和具有 highlight 类的元素 */
p, .highlight {
margin: 10px 0;
}
学习顺序说明
在本教程的第二部分,我们将按照以下顺序学习选择器: