CSS 伪元素

在 CSS 中,伪元素(Pseudo-elements) 是用来选中元素的一部分或虚拟区域,比如:元素的第一个字、第一行、内容前后插入内容等。它们不是真正存在于 DOM 结构中的“真实元素”,但可以像普通元素一样被选中和样式化。


✅ 一、什么是伪元素?

伪元素以 双冒号 :: 开头(也可用单冒号 : 兼容旧写法),代表“虚拟的部分内容”。

p::first-line {
  font-weight: bold;
}

🔸 上面这段表示:让 <p> 的第一行加粗。


✅ 二、常见伪元素汇总

伪元素作用说明示例
::before在元素内容插入内容(虚拟)a::before
::after在元素内容插入内容(虚拟)div::after
::first-letter选中第一个字母(仅块元素)p::first-letter
::first-line选中第一行(随容器宽度变化)p::first-line
::selection用户选中(高亮)文本时的样式p::selection
::marker列表项前的标记符号(前缀圆点/数字)li::marker
::placeholder输入框中的占位符文本input::placeholder
::file-selector-button文件上传按钮样式input::file-selector-button

✅ 三、重点伪元素讲解


🔹 ::before 和 ::after (最常用)

用于在元素前/后插入内容(不在 DOM 中)。

a::before {
  content: "🔗 ";
}

a::after {
  content: "(点击跳转)";
  color: gray;
}

📌 必须配合 content 属性使用!

🔔 常见用途:

  • 给按钮添加图标
  • 模拟气泡框箭头
  • 创建伪清除(clearfix)

🔹 清除浮动技巧(clearfix)

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

📎 利用 ::after 插入一个清除浮动的“虚拟块级元素”。


🔹 ::first-letter 和 ::first-line

p::first-letter {
  font-size: 200%;
  color: red;
}

p::first-line {
  font-weight: bold;
}

💡 应用于段落类元素中,做古典排版或强调首字。


🔹 ::selection(高亮选中文本)

::selection {
  background: yellow;
  color: black;
}

📌 应用于用户鼠标选中的文本,提升可读性。


🔹 ::placeholder(输入框提示文本)

input::placeholder {
  color: gray;
  font-style: italic;
}

📌 仅作用于 input / textarea 中的 placeholder 内容。


🔹 ::marker(列表前缀)

li::marker {
  color: red;
  font-size: 20px;
}

📌 作用于 ul / ol 中的圆点或编号。CSS 3 新增,现代浏览器支持良好。


✅ 四、使用注意事项

项目建议做法说明
写法推荐用双冒号 ::单冒号 : 仍支持,但不推荐
必须设置 content::before::after否则无法显示
不可选中 DOM不存在于 HTML 结构中DevTools 中只能在样式中看到
与伪类组合可以!a:hover::after 是合法写法

✅ 五、伪元素与伪类的区别

项目伪类(:hover伪元素(::before
表示什么元素的“状态”元素的“虚拟部分”
写法单冒号 :双冒号 ::(推荐)
DOM 中存在?存在状态但非节点不存在,是虚构内容
典型用途鼠标悬停、聚焦、选中等插入图标、修饰首字、插入箭头等

✅ 六、示例:按钮图标 + 悬停动画

<button class="download-btn">下载</button>

<style>
.download-btn::before {
  content: "⬇️ ";
}

.download-btn:hover::before {
  color: green;
}
</style>

效果:按钮文字前插入下载图标,鼠标悬停时图标变绿。


✅ 七、浏览器兼容性简表

伪元素支持情况
::before::after✅ 全部支持
::first-letter::first-line✅ 全部支持
::selection✅ 主流浏览器支持
::placeholder✅ 支持,旧版需前缀
::marker::file-selector-button✅ 现代浏览器支持

如你有特定需求(比如在输入框后插入图标、列表前加自定义符号、选中文字美化),欢迎告诉我,我可以帮你写完整的 CSS 示例。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注