css中伪类和伪元素的区别及用法

本文详细解析了CSS中的伪元素与伪类的区别及应用,包括如何使用::before和::after添加元素,以及如何利用伪类为已存在元素添加状态样式。通过实例展示了伪元素与伪类的不同作用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、区别:

(1)伪元素主要是用来创建一些不存在原有dom结构树种的元素,例如:用::before和::after在一些存在的元素前后添加文字样式等,这些被添加的内容会以具体的UI显示出来,被用户所看到的,这些内容不会改变文档的内容,不会出现在DOM中,不可复制,仅仅是在CSS渲染层加入。CSS3中建议使用::表示伪元素,如:div::before。

 

::before和::after这两个伪类下有特有的属性content,必须有这个属性。

1、attr() 调用当前元素的属性,可以方便的比如将图片的Alt提示文字或链接的Href地址显示出来,如下:

  a:after {

    content: "(" attr(href) ")";
  }
2、url() / uri() 用于引入媒体文件
  h1:before{
    content: url(log.png);
  }
3、counter() 调用计数器,可以不使用列表元素实现序号功能。
  h2:before{
    counter-increment: chapter;
    content: "Chapter" counter(chapter) ". "
  }

 (2)伪类表示已存在的某个元素处于某种状态,但是通过dom树又无法表示这种状态,就可以通过伪类来为其添加样式。例如a元素的:hover, :active等。CSS3中建议使用:表示伪元素,如:a:hover

1. 原始的HTML片段,我们将在此基础上讲解伪类和伪元素

<ul>

  <li>First li element</li>

  <li>Secondli element</li>

</ul>

2. 伪类

1)给第二个li元素添加样式,可以在第二个li元素上加个class

<ul>

<li>First li element</li>

<li class="second">Second li element</li>

</ul>

.second{color:#f00}

2)也可以通过伪类给第二个li元素添加样式

 

 可以看出:第二个li元素是dom结构里本来就存在的。

3. 伪元素

1)给第二个li元素内的第一个字母(S)添加样式,可以给S加个span标签,并添加一个class

<ul>

  <li>First li element</li>

  <li><span class=”first-letter”>S</span>econd li element</li>

</ul>

li.first-letter{color:#f00}

2)也可以通过伪元素给第二个li元素内的第一个字母(S)添加样式

 

 

总之,

伪元素的操作对象是新生成的dom元素,而不是原来dom结构里就存在的;而伪类恰好相反,伪类的操作对象是原来的dom结构里就存在的元素。

伪元素与伪类的根本区别在于:操作的对象元素是否存在于原来的dom结构里。

转载于:https://www.cnblogs.com/xmbg/p/11608268.html

### CSS Pseudo-Classes Pseudo-Elements 的区别用法 #### 基本概念 CSS 中的 **pseudo-classes** **pseudo-elements** 是两种用于增强 HTML 元素样式的机制,尽管它们的名字相似,但功能用途完全不同。 --- #### Pseudo-Classes () Pseudo-classes 用于定义元素在某些状态下的样式。这些状态可以是用户的交互行为(如鼠标悬停)、页面加载过程中的动态变化或其他条件触发的状态。 ##### 特点 - 表示一种逻辑上的状态。 - 不会改变文档结构。 - 使用冒号 `:` 来表示。 ##### 示例 以下是常见的 pseudo-class: 1. **`:hover`**: 当用户将鼠标悬停在一个元素上时应用样式[^2]。 ```css a:hover { color: red; } ``` 2. **`:active`**: 当某个元素被激活(通常指点击按钮或链接)时应用样式。 ```css button:active { background-color: blue; } ``` 3. **`:focus`**: 当一个元素获得焦点时应用样式。 ```css input:focus { border: 2px solid green; } ``` 4. **`:nth-child(n)`**: 针对父级容器内的第 n 个子元素应用样式。 ```css li:nth-child(odd) { background-color: lightgray; } ``` --- #### Pseudo-Elements (伪元素) Pseudo-elements 用于为目标元素的内容部分创建额外的标记或装饰效果。它们允许开发者操作 DOM 结构之外的部分,而无需实际修改 HTML 文档。 ##### 特点 - 创建虚拟内容或修饰现有内容。 - 影响文档的实际渲染。 - 使用双冒号 `::` 来区分 pseudo-element pseudo-class(虽然单冒号 `:` 在旧版浏览器中也支持)。 ##### 示例 以下是常见的 pseudo-element: 1. **`::before` `::after`**: 在目标元素前后插入生成内容。 ```css p::before { content: "Start "; font-weight: bold; } p::after { content: " End"; font-style: italic; } ``` 2. **`::first-line`**: 对段落的第一行文字应用特殊样式。 ```css p::first-line { text-transform: uppercase; } ``` 3. **`::placeholder`**: 自定义输入框占位符的样式。 ```css input::placeholder { color: gray; } ``` 4. **`::selection`**: 修改选中文本的颜色其他属性。 ```css ::selection { background-color: yellow; color: black; } ``` --- #### 主要区别总结 | 属性 | Pseudo-Class | Pseudo-Element | |---------------------|--------------------------------------|------------------------------------| | 功能 | 描述元素的状态 | 添加或修饰元素的一部分 | | 符号 | 单冒号 (`:`) | 双冒号 (`::`) | | 是否影响文档结构 | 否 | 是 | | 应用场景 | 用户交互、动态状态 | 装饰性内容、特定区域 | --- #### 实际应用场景对比 1. 如果需要更改按钮在不同状态下的颜色或背景,应使用 pseudo-class 如 `:hover`, `:active` 等。 2. 如果希望在标题前自动添加图标或者注释,则应该使用 pseudo-element 如 `::before` 或 `::after`[^3]。 --- ### 总结 理解 pseudo-classes pseudo-elements 的差异对于编写高效且语义化的 CSS 至关重要。前者关注于描述元素的行为或状态,后者则专注于扩展或调整视觉表现的具体细节[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值