Skip to content

伪元素与伪类

伪类 (Pseudo-class)

伪类用于选择处于特定状态或具有特定属性的元素。这些状态可能是动态的(例如鼠标悬停),也可能是基于文档结构(例如第一个子元素)。

语法

伪类使用单个冒号 : 表示。

常见伪类

用户交互相关

  • :hover:鼠标悬停时。
  • :focus:元素获取焦点时。
  • :active:元素被点击时。

结构相关

  • :first-child:选择元素的第一个子元素。
  • :last-child:选择元素的最后一个子元素。
  • :nth-child(n):选择元素的第 n 个子元素。
  • :nth-last-child(n):选择元素的倒数第 n 个子元素。
  • :first-of-type:选择元素的第一个相同类型的子元素。
  • :last-of-type:选择元素的最后一个相同类型的子元素。
  • :nth-of-type(n):选择元素的第 n 个相同类型的子元素。
  • :nth-last-of-type(n):选择元素的倒数第 n 个相同类型的子元素。

其他

  • :empty:选择没有子元素的元素。
  • :target:选择当前活动的锚点元素。
  • :disabled: 选择禁用的元素。
  • :enabled: 选择启用的元素。
  • :checked: 选择选中的 checkbox 或 radio 元素。
  • :not(selector):选择不匹配指定选择器的元素。

伪元素 (Pseudo-element)

定义

伪元素用于选择文档中的某些部分,这些部分通常不在 DOM 中明确表示,例如文本的第一行或首字母。

语法

伪元素使用双冒号 :: 表示(早期标准中也允许使用单冒号)。

常见伪元素

  • ::before: 在元素内容前插入内容。
  • ::after: 在元素内容后插入内容。
  • ::first-line: 选择元素的第一行。
  • ::first-letter: 选择元素的首字母。
  • ::selection: 选择用户选取的文本。
  • ::backdrop: 选择背景。

伪类与伪元素的区别

特性伪类伪元素
作用对象整个元素元素特定部分
语法单冒号 :双冒号 ::
例子:hover,:not-child(n)`::before,::first-line

示例代码

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪类与伪元素示例</title>
    <style>
        /* 伪类 */
        a:hover {
            color: red;
        }

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

        /* 伪元素 */
        p::before {
            content: "提示: ";
            color: gray;
        }

        p::first-line {
            font-weight: bold;
        }
    </style>
</head>
<body>
<a href="#">这是一个链接</a>
<ul>
    <li>第一项</li>
    <li>第二项</li>
    <li>第三项</li>
</ul>
<p>这是一个段落,用于展示伪类和伪元素的效果。</p>
</body>
</html>