CSS 伪类和伪元素:为你的选择器注入更多活力

在 CSS 中,选择器是我们定位 HTML 元素的基础。但有时,我们可能需要根据元素的状态或在元素内部的特定位置来选择元素。这时,CSS 伪类和伪元素就派上用场了。它们允许我们在不修改 HTML 结构的情况下,为选择器注入更多的活力,实现更灵活的样式控制。

什么是 CSS 伪类?

CSS 伪类用于选择处于特定状态的元素。它们以一个冒号 : 开头,后面跟着伪类名称,例如 :hover、:active、:focus 等。

常见的伪类:

  • :hover: 当鼠标悬停在元素上时选中该元素。
  • :active: 当元素被激活时(通常是鼠标点击或键盘按下)选中该元素。
  • :focus: 当元素获得焦点时(通常是用户点击或使用 Tab 键)选中该元素。
  • :visited: 当链接被访问过时选中该链接。
  • :link: 当链接未被访问过时选中该链接。
  • :first-child: 选中父元素的第一个子元素。
  • :last-child: 选中父元素的最后一个子元素。
  • :nth-child(n): 选中父元素的第 n 个子元素。
  • :nth-of-type(n): 选中父元素的第 n 个指定类型的子元素。
  • :not(selector): 选中不匹配指定选择器的元素。
  • :enabled: 选中启用的表单元素。
  • :disabled: 选中禁用的表单元素。
  • :checked: 选中选中的复选框或单选按钮。
  • :valid: 选中验证通过的表单元素。
  • :invalid: 选中验证失败的表单元素。

示例:

复制代码
<a href="#">这是一个链接</a>
<button>这是一个按钮</button>
<ul>
  <li>列表项 1</li>
  <li>列表项 2</li>
  <li>列表项 3</li>
</ul>

a:hover {
  color: red;
}

button:active {
  background-color: lightblue;
}

li:first-child {
  font-weight: bold;
}

li:nth-child(2) {
  color: green;
}

input:focus {
  border-color: blue;
}

在这个例子中:

  • 当鼠标悬停在链接上时,链接的颜色会变为红色。
  • 当按钮被点击时,按钮的背景颜色会变为浅蓝色。
  • 列表的第一个列表项的字体会变为粗体。
  • 列表的第二个列表项的颜色会变为绿色。
  • 当输入框获得焦点时,输入框的边框颜色会变为蓝色。

什么是 CSS 伪元素?

CSS 伪元素用于选择元素的特定部分,而不是整个元素。它们以两个冒号 :: 开头,后面跟着伪元素名称,例如 ::before、::after、::first-line 等。

常见的伪元素:

  • ::before: 在元素的内容之前插入内容。
  • ::after: 在元素的内容之后插入内容。
  • ::first-line: 选中元素的第一行文本。
  • ::first-letter: 选中元素的第一个字母。
  • ::selection: 选中用户选中的文本。
  • ::placeholder: 选中表单元素的占位符文本。

示例:

复制代码
<p>这是一个段落。</p>
<div class="box"></div>

p::first-line {
  font-size: 1.2em;
}

p::first-letter {
  font-size: 2em;
  color: red;
}

.box::before {
  content: "";
  display: block;
  width: 20px;
  height: 20px;
  background-color: orange;
  margin-right: 10px;
}

::selection {
  background-color: yellow;
}

在这个例子中:

  • 段落的第一行文本的字体大小会变为 1.2 倍。
  • 段落的第一个字母的字体大小会变为 2 倍,颜色会变为红色。
  • 在 .box 元素的内容之前会插入一个橙色的方块。
  • 用户选中的文本的背景颜色会变为黄色。

伪类和伪元素的区别

  • 伪类 选择的是 元素的状态,例如鼠标悬停、获得焦点等。
  • 伪元素 选择的是 元素的特定部分,例如第一行文本、内容之前或之后等。
  • 伪类使用 一个冒号 : 开头,伪元素使用 两个冒号 :: 开头(在 CSS2 中,伪元素使用一个冒号,但为了区分伪类和伪元素,CSS3 引入了两个冒号)。

伪类和伪元素的实际应用

  • 实现交互效果: 使用 :hover、:active、:focus 等伪类可以实现各种交互效果,如鼠标悬停时的颜色变化、按钮点击时的反馈等。
  • 美化表单: 使用 :valid、:invalid、:placeholder 等伪类可以美化表单,提供更好的用户体验。
  • 创建特殊布局: 使用 ::before 和 ::after 伪元素可以创建特殊的布局效果,如添加装饰性元素、实现清除浮动等。
  • 文本排版: 使用 ::first-line 和 ::first-letter 伪元素可以实现更精细的文本排版效果。

总结

CSS 伪类和伪元素是 CSS 中非常强大的工具,它们允许我们在不修改 HTML 结构的情况下,为选择器注入更多的活力,实现更灵活的样式控制。通过理解它们的概念和用法,我们可以充分利用它们来提高我们的开发效率和代码质量。

希望这篇文章能帮助你更好地理解 CSS 伪类和伪元素。如果你有任何问题或想法,欢迎在评论区留言。

相关推荐
brien927 分钟前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance42 分钟前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M1 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写1 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李1 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易1 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马1 小时前
前沿视界
前端
kyriewen1 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易2 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员
IT_陈寒2 小时前
Vue的这个响应式陷阱,差点让我加班到天亮
前端·人工智能·后端