核心概念总结(一句话区分)
- 伪类:用于选择处于 特定状态 的已有元素。
- 例如:鼠标悬停时的状态、被点击后的状态、是第一个子元素等。
- 语法:单冒号
:
- 伪元素:用于选择并样式化元素的 特定部分,或者 创建不在文档树中的虚拟元素。
- 例如:元素的第一行字母、在元素内容前后插入新内容等。
- 语法:双冒号
::(CSS3 规范,但单冒号:也兼容)
一、伪类
伪类就像一个“类”,它不会改变文档结构,而是根据用户行为、文档结构或其他外部条件来为某些元素应用样式。
1. 常见伪类别表
伪类 | 描述 | 示例 |
动态/用户行为伪类 | ||
| 鼠标悬停在元素上时 |
|
| 元素被激活时(如鼠标按下未松开) |
|
| 元素获得焦点时(如表单输入框) |
|
| 已访问过的链接 |
|
结构伪类 | ||
| 选择作为其父元素第一个子元素的元素 |
|
| 选择作为其父元素最后一个子元素的元素 |
|
| 选择作为其父元素第 n 个子元素的元素 |
|
| 选择在其父元素内,同类型兄弟元素中排第 n 个的元素 |
|
| 否定伪类,选择不匹配选择器的元素 |
|
表单相关伪类 | ||
| 被选中的单选/复选框 |
|
| 被禁用的表单元素 |
|
| 具有 |
|
2. 伪类示例代码
<!DOCTYPE html>
<html>
<head>
<style>
/* 用户行为伪类 */
.btn:hover {
background-color: #4CAF50; /* 鼠标悬停时变绿 */
}
.btn:active {
transform: scale(0.98); /* 按下时轻微缩小 */
}
/* 结构伪类 */
ul li:first-child {
color: red; /* 列表第一项为红色 */
}
ul li:nth-child(3) {
font-style: italic; /* 列表第三项为斜体 */
}
/* 否定伪类 */
p:not(.special) {
opacity: 0.7; /* 所有没有 special 类的 p 标签变半透明 */
}
</style>
</head>
<body>
<button class="btn">悬停我</button>
<ul>
<li>第一项(红色)</li>
<li>第二项</li>
<li>第三项(斜体)</li>
</ul>
<p>这是一个普通段落(半透明)。</p>
<p class="special">这是一个特殊段落。</p>
</body>
</html>二、伪元素
伪元素就像一个“虚拟的 HTML 元素”,它允许你为元素的特定部分设置样式,而这些部分并不实际存在于文档流中。
1. 常见伪元素列表
伪元素 | 描述 | 示例 |
| 在元素内容之前插入内容 |
|
| 在元素内容之后插入内容 |
|
| 选择元素的第一行文本 |
|
| 选择元素的第一个字母 |
|
| 选择被用户高亮/选中的部分 |
|
| 选择表单元素的占位符文本 |
|
重要提示:使用 ::before 和 ::after 时,必须指定 content 属性,即使它是空的 (content: "";)。
2. 伪元素示例代码
<!DOCTYPE html>
<html>
<head>
<style>
/* 在内容前后插入 */
blockquote::before {
content: "“";
font-size: 3em;
color: lightgray;
}
blockquote::after {
content: "”";
font-size: 3em;
color: lightgray;
}
/* 首字下沉 */
p::first-letter {
font-size: 200%;
float: left;
line-height: 1;
}
/* 选中文本样式 */
::selection {
background-color: pink;
color: black;
}
/* 使用 ::after 清除浮动 (经典技巧) */
.container::after {
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<blockquote>这是一个名人名言。</blockquote>
<p>这是一个段落的开始,它的第一个字母会非常大,形成首字下沉效果。后面的文字会正常排列。</p>
</body>
</html>三、关键区别与记忆技巧
特征 | 伪类 | 伪元素 |
作用对象 | 整个元素的某种状态 | 元素的某个特定部分 |
文档结构 | 选择已存在的元素 | 创建一个虚拟的元素/部分 |
语法 |
|
|
核心概念 | 状态 | 部分 |
记忆技巧:
- 想想“类”(class),它是一个真实的属性。伪类就是为一个元素在特定状态下添加了一个虚拟的类(比如
.hover)。 - 想想“元素”(element),它是一个真实的标签。伪元素就是在文档中创建了一个虚拟的元素(比如
<before>)。
总结
理解并熟练运用伪类和伪元素,是编写现代、高效 CSS 的关键。它们让你能够:
- 在不修改 HTML 结构的情况下,实现丰富的交互效果(伪类)。
- 创建精致的视觉效果和布局,而无需添加无意义的冗余标签(伪元素)。
















