目录
定义
区别
历史
注意
总结
首页 web前端 css教程 关于CSS3中的伪类与伪元素的区别及注意事项

关于CSS3中的伪类与伪元素的区别及注意事项

May 21, 2017 pm 03:29 PM

CSS中伪类与伪元素的概念是很容易混淆的 

今天就来谈谈伪类与伪元素之间的区别


定义

首先先来看看伪类与伪元素的定义
w3c中对于它们是这么解释的

  • 伪类:用于向某些选择器添加特殊的效果

  • 伪元素:用于将特殊的效果添加到某些选择器

讲道理,可能我语文不好,我觉得这两句话是等价的 :-)
根本不能看出有什么区别
都是对某些选择器“加特技”

标准有这么一句话翻译过来是这样的

CSS 引入伪类和伪元素的概念是为了实现基于文档树之外的信息的格式化

这话更抽象,其实意思就是对那些我们不能通过class、id等选择元素的补充

区别

这个区别我们需要一个例子来理解

<p>
    <em>This</em>
    <em>is a text</em></p>
登录后复制
登录后复制

如果我们想要第一个em标签字体颜色变红怎么做呢
使用我们熟悉的伪类很简单

em:first-child {    color: red;}
登录后复制

但是如果不存在伪类我们怎么做呢
这是我们就需要为第一个em标签添加类

<p>
    <em class="first-child">This</em>
    <em>is a text</em></p>
登录后复制
em.first-child {    color: red;}
登录后复制

可以实现同样的效果


<p>
    <em>This</em>
    <em>is a text</em></p>
登录后复制
登录后复制

还是这个例子
现在我想让这个段落的第一个字母变红
怎么做呢
这回我们需要使用伪元素

p::first-letter {    color: red;}
登录后复制

同样假设伪元素不存在的情况
这时我们只能嵌套span标签来实现

<p>
    <em><span>T</span>his</em>
    <em>is a text</em></p>
登录后复制
p span {    color: red;}
登录后复制

看到这里,相信大家已经清楚了为什么一个叫做伪类,一个叫做伪元素
伪类的效果可以通过添加实际的类来实现
伪元素的效果可以通过添加实际的元素来实现
它们的本质区别就是是否抽象创造了新元素

历史

伪类最开始的时候只是用来表示元素的动态(典型的锚伪类link、visited、hover、active)
在CSS2标准中对它进行了扩展让它虽然逻辑存在但不需要在DOM树中标识
伪元素代表了某个元素的子元素,虽然逻辑存在,但不存在于DOM树

虽然它们的概念很容易被我们混淆
但是也不影响我们正常使用

我在CSS3选择器介绍及用法总结中说过
伪类只能使用“:”
而伪元素既可以使用“:”,也可以使用“::”
这里我就解释一下为什么


CSS3中的标准是伪类使用单冒号“:”
而伪元素使用双冒号“::”(避免混淆)
但是在此之前无论是伪类还是伪元素都使用单冒号“:”
所以为了保证兼容伪元素两种使用方法都是可以的
但是低版本IE有双冒号兼容问题
所以以前编写样式的人们对于伪类和伪元素就干脆统统使用单冒号
导致这种混淆一直延续下来

注意

在使用伪类和伪元素的时候
有一点要特别注意
伪类就像真正的类一样,可以叠加使用
没有数量上限,只要不是互斥的
比如这样

em:first-child:hover {    color: red;}
登录后复制

这是完全可以的
但注意,这里是“与”的关系
也就是说既要满足“first-child”第一个子元素
又要满足“hover”光标悬浮


伪元素就要严格的多
伪元素在一个选择器中只能出现一次,并且只能出现在末尾
(这里有同学误会了,所以我作出了修改)
像下面的样式是无法生效的

p::first-letter:hover {  /*错误的写法:伪元素不是末尾*/
    color: red;}
登录后复制
p::first-letter::selection {  /*错误的写法:伪元素出现了多个*/
    color: red;}
登录后复制

再多说一句关于它们的优先级
在计算权重的时候
伪类与类优先级相同
伪元素与标签优先级相同

总结

  • 伪类与伪元素都是用于向选择器加特殊效果

  • 伪类与伪元素的本质区别就是是否抽象创造了新元素

  • 伪类只要不是互斥可以叠加使用

  • 伪元素在一个选择器中只能出现一次,并且只能出现在末尾

  • 伪类与伪元素优先级分别与类、标签优先级相同

以上是关于CSS3中的伪类与伪元素的区别及注意事项的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

纯CSS3怎么实现波浪效果?(代码示例) 纯CSS3怎么实现波浪效果?(代码示例) Jun 28, 2022 pm 01:39 PM

纯CSS3怎么实现波浪效果?本篇文章就来给大家介绍一下使用 SVG 和 CSS 动画制作波浪效果的方法,希望对大家有所帮助!

巧用CSS实现各种奇形怪状按钮(附代码) 巧用CSS实现各种奇形怪状按钮(附代码) Jul 19, 2022 am 11:28 AM

本篇文章带大家看看怎么使用 CSS 轻松实现高频出现的各类奇形怪状按钮,希望对大家有所帮助!

css怎么隐藏元素但不占空间 css怎么隐藏元素但不占空间 Jun 01, 2022 pm 07:15 PM

两种方法:1、利用display属性,只需给元素添加“display:none;”样式即可。2、利用position和top属性设置元素绝对定位来隐藏元素,只需给元素添加“position:absolute;top:-9999px;”样式。

css3怎么实现花边边框 css3怎么实现花边边框 Sep 16, 2022 pm 07:11 PM

在css中,可以利用border-image属性来实现花边边框。border-image属性可以使用图片来创建边框,即给边框加上背景图片,只需要将背景图片指定为花边样式即可;语法“border-image: url(图片路径) 向内偏移值 图像边界宽度 outset 是否重复;”。

原来利用纯CSS也能实现文字轮播与图片轮播! 原来利用纯CSS也能实现文字轮播与图片轮播! Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

使用:nth-child(n+3)伪类选择器选择位置大于等于3的子元素的样式 使用:nth-child(n+3)伪类选择器选择位置大于等于3的子元素的样式 Nov 20, 2023 am 11:20 AM

使用:nth-child(n+3)伪类选择器选择位置大于等于3的子元素的样式,具体代码示例如下:HTML代码:&lt;divid="container"&gt;&lt;divclass="item"&gt;第一个子元素&lt;/div&gt;&lt;divclass="item"&

为什么伪元素失效了 为什么伪元素失效了 Nov 21, 2023 pm 05:13 PM

伪元素失效了的原因:1、选择器问题;2、样式冲突;3、继承问题;4、语法错误;5、浏览器兼容性问题等。详细介绍:1、选择器问题,伪元素的选择器可能不正确,导致无法选择到目标元素;2、样式冲突,如果在CSS中存在样式冲突,可能会导致伪元素失效;3、继承问题,伪元素可能无法继承某些样式属性;4、语法错误,如果在CSS中存在语法错误,可能会导致伪元素失效;5、浏览器兼容性问题等等。

css3什么是自适应布局 css3什么是自适应布局 Jun 02, 2022 pm 12:05 PM

自适应布局又称“响应式布局”,是指可以自动识别屏幕宽度、并做出相应调整的网页布局;这样的网页能够兼容多个不同的终端,而不是为每个终端做一个特定的版本。自适应布局是为解决移动端浏览网页而诞生的,能够为使用不同终端的用户提供很好的用户体验。

See all articles