标准答案

  1. 伪类选择的是元素的状态、位置或条件,比如 :hover、:focus、:checked、:first-child。
  2. 伪元素选择的是元素的一部分,或者创建一个虚拟子元素,比如 ::before、::after、::first-line、::selection。
  3. ::before 和 ::after 必须配合 content 属性才会生成盒子。
  4. 它们常用于装饰图标、必填星号、清除浮动、边框线、角标和背景装饰。
  5. 重要业务文本不要只放在伪元素 content 里,因为它可能影响可访问性、复制和翻译,关键内容应该放在真实 DOM 中。

题目解析

一句话区分:伪类是“已有元素处于什么状态”,伪元素是“元素的某个部分或生成的虚拟内容”。

CSS3 推荐伪元素使用双冒号 ::before,伪类使用单冒号 :hover;老代码里可能看到 :before。

代码示例

必填标记这类装饰性内容可以用伪元素。

CSS
.field-label.is-required::after {
  content: "*";
  margin-left: 4px;
  color: #f08a3c;
}

.button:hover {
  background: #218557;
}

常见误区

  • 把 :hover 叫伪元素,把 ::before 叫伪类。
  • 忘记 ::before 和 ::after 需要 content 才会生成。
  • 把重要业务文案放进伪元素,导致可访问性和复制体验变差。

作者信息