博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS3伪类与伪元素的区别及注意事项
阅读量:6004 次
发布时间:2019-06-20

本文共 1803 字,大约阅读时间需要 6 分钟。

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

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


定义

首先先来看看伪类与伪元素的定义 

w3c中对于它们是这么解释的

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

讲道理,可能我语文不好,我觉得这两句话是等价的 :-) 

根本不能看出有什么区别 
都是对某些选择器“加特技”

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

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

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

区别

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

This is a text

  • 1
  • 2
  • 3
  • 4

如果我们想要第一个em标签字体颜色变红怎么做呢 

使用我们熟悉的伪类很简单

em:first-child {    color: red; }
  • 1
  • 2
  • 3

但是如果不存在伪类我们怎么做呢 

这是我们就需要为第一个em标签添加类

This is a text

  • 1
  • 2
  • 3
  • 4
em.first-child {    color: red; }
  • 1
  • 2
  • 3

可以实现同样的效果


This is a text

  • 1
  • 2
  • 3
  • 4

还是这个例子 

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

p::first-letter {    color: red; }
  • 1
  • 2
  • 3

同样假设伪元素不存在的情况 

这时我们只能嵌套span标签来实现

This is a text

  • 1
  • 2
  • 3
  • 4
p span {    color: red; }
  • 1
  • 2
  • 3

看到这里,相信大家已经清楚了为什么一个叫做伪类,一个叫做伪元素 

伪类的效果可以通过添加实际的类来实现 
伪元素的效果可以通过添加实际的元素来实现 
它们的本质区别就是是否抽象创造了新元素

历史

伪类最开始的时候只是用来表示元素的动态(典型的锚伪类link、visited、hover、active) 

在CSS2标准中对它进行了扩展让它虽然逻辑存在但不需要在DOM树中标识 
伪元素代表了某个元素的子元素,虽然逻辑存在,但不存在于DOM树

虽然它们的概念很容易被我们混淆 

但是也不影响我们正常使用

我在中说过 

伪类只能使用“:” 
而伪元素既可以使用“:”,也可以使用“::” 
这里我就解释一下为什么


CSS3中的标准是伪类使用单冒号“:” 

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

注意

在使用伪类和伪元素的时候 

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

em:first-child:hover {    color: red; }
  • 1
  • 2
  • 3

这是完全可以的 

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


伪元素就要严格的多 

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

p::first-letter:hover {  /*错误的写法:伪元素不是末尾*/ color: red; }
  • 1
  • 2
  • 3
p::first-letter::selection {  /*错误的写法:伪元素出现了多个*/ color: red; }
  • 1
  • 2
  • 3

再多说一句关于它们的优先级 

在计算权重的时候 
伪类与类优先级相同 
伪元素与标签优先级相同

总结

  • 伪类与伪元素都是用于向选择器加特殊效果
  • 伪类与伪元素的本质区别就是是否抽象创造了新元素
  • 伪类只要不是互斥可以叠加使用
  • 伪元素在一个选择器中只能出现一次,并且只能出现在末尾
  • 伪类与伪元素优先级分别与类、标签优先级相同

版权声明:本文为博主原创文章,转载请添加原文地址 https://blog.csdn.net/q1056843325/article/details/53560588

转载于:https://www.cnblogs.com/Tohold/p/9373538.html

你可能感兴趣的文章
css3中变形与动画(一)
查看>>
[XMove-自主设计的体感解决方案] 系统综述
查看>>
【LINUX学习】磁盘分割之建立primary和logical 分区
查看>>
【YUM】第三方yum源rpmforge
查看>>
IOS(CGGeometry)几何类方法总结
查看>>
才知道系列之GroupOn
查看>>
⑲云上场景:超级减肥王,基于OSS的高效存储实践
查看>>
linux kswapd浅析
查看>>
变更 Linux、Ubuntu 时区、时间
查看>>
高仿QQ空间 侧滑Menu效果且换肤功能《IT蓝豹》
查看>>
mac的git的21个客户端
查看>>
Spring Cloud自定义引导属性源
查看>>
[共通]手机端网页开发问题及解决方法整理
查看>>
我的友情链接
查看>>
${basePath}
查看>>
linux命令之uniq简单用法
查看>>
使用Eclipse调试Java程序的10个技巧
查看>>
Hive分桶表
查看>>
oracle10g 启动时报错:ORA-32004 ORA-19905
查看>>
思科分发列表过滤路由(RIP)动态路由协议篇
查看>>