CSS3伪类和伪元素

合规开
• 阅读 187

作为一个CSS3初学不久者来说,很容易混淆单冒号(:)和双冒号(::)的用法,以为两者可以互换着来使用。我自己之前也混淆过他们,因为两者看起来太相像了,就像孪生兄弟。但实际上,他们的区别还是挺大的,最多算得上近房亲戚。
下面我们来开始讲讲单冒号(:)伪类和双冒号(::)伪元素有什么相同和不同点(另外在CSS2中单冒号“:” 也叫做伪对象,具体可看看 http://www.mb5u.com/tool/css2/
 
单冒号(:)早在CSS中已经存在了,相信用惯CSS的码农肯定对:hover伪类并不陌生。另外还有几个比较实用的伪类,例如:
与链接访问有关的 :link(未被点击过的链接),:visited(链接已被点击访问过)
与键盘输入有关的 :focus(获得键盘输入焦点)
其他像 :lang伪类,:first-child伪类,大家可以自行到W3C官网看看具体用法,在这里我就不赘述了。特别说一下 :first-child伪类,这个伪类很有意思,不得不佩服制定规则的人的洞察力,CSS3出现了类似用法的伪类,为开发者提供了不少方便。
 
其实,伪类和伪元素在CSS中已经存在,而CSS3为了区分 伪类和伪元素,伪元素采用双冒号写法。伪类和伪元素都对特定元素进行选择,前者重在对元素状态的描述,而后者更重在对元素本身的描述,这是伪类和伪元素内在的联系和区别。
 
一、CSS3伪类
CSS3伪类又分为两类:状态伪类和结构性伪类。
CSS3状态伪类沿用了我们上面已经提及过的CSS中的:hover ,:link ,:visited 等伪类。另一方面CSS3中大幅增加状态伪类,例如:
:first-child 选择某个元素的第一个子元素;
:last-child 选择某个元素的最后一个子元素;
:nth-child(index)根据数量选择某个元素的一个特定子元素,括号中填写索引值
:nth-of-type(index)根据类型选择某个元素的一个特定子元素,这个伪类与:nth-child()最大的不同点就在于是按类型来选择子元素的,而不是一股脑的什么子元素都算在内。
给个例子吧:
html:
<div>
<span>这是数字1</span>
<span>这是数字2</span>
<p>这是数字3</p>
<p>这是数字4</p>
<div>
 
css:
div:nth-child(1){color:blue;}
只会让第一个span元素的颜色变蓝
 
div:nth-of-type(2){color:red;}
则会使第二个span元素和第二个p元素的颜色都变红,原因是把div的子元素分成了两类,一类是span元素,另外一类是p元素。
 
二、CSS3伪元素
CSS中已经有的伪元素 :first-letter ,:first-line ,CSS2中新增的伪元素 :after ,:before
CSS3中将上面的4个伪元素的单冒号变成双冒号,另外还新增了::selection伪元素。
下面来讲讲CSS3中这几个伪元素的一些常见功能
(1)::first-letter和::first-line
:first-letter和:first-line分别对文字的第一个字母和第一行进行选择,这个从英文直接翻译过来是不难理解的,报刊上的第一个文字大写处理就可以用::first-letter。下面重点谈谈另外几个伪元素
(2)::before和::after
::before和::after后面经常跟着content,用于在css渲染中向元素的头部或尾部添加内容。很关键的一点是添加的这些内容不会出现在DOM中,仅仅是作为css渲染层对元素进行修改。所以不要用::before或::after展示有实际意义的内容,而仅仅使用它们显示修饰性内容,例如在文字前面加上icon图标。至于怎么添加和添加有什么前提条件,又可以写一篇文章了。下次有空再来写写这个用法。
 
 
关于兼容性问题:
由于IE对CSS3的支持问题,所以在写代码时也要注意一些小问题。如果只需要兼容firefox、webkit、opera等浏览器,伪元素采用双冒号的写法是没多大问题的,但是如果需要兼容IE浏览器,那么还是用单冒号的写法比较稳妥。
 
转载于猿2048:☞《CSS3伪类和伪元素》

点赞
收藏
评论区
推荐文章
2022年最新iOS面试题(附答案)
最近大家都要准备去面试或者已经在面试的,这里我给大家准备了挺多资料,可以私信我拿,看看了解下。底下就是我整理出来的一些面试题iOS类(class)和结构体(struct)有什么区别?Swift中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。举个简单的
zdd小小菜鸟 zdd小小菜鸟
3年前
Netty面试
Netty面试1.BIO、NIO和AIO的区别?BIO:tex一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源
徐小夕 徐小夕
5年前
《css大法》之使用伪元素实现超实用的图标库(附源码
今天我们来复盘一下前端中css伪元素的知识以及如何用css伪元素来减轻javascript的压力,做出一些脑洞大开的图形。预备知识伪元素伪元素是一个附
徐小夕 徐小夕
5年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
陈占占 陈占占
4年前
python if的选择结构与循环
语句块:可以执行一次或者多次的语句,以冒号为标记,缩进结束就是语句块结束的时候判断条件:以bool类型为标志的,当条件为真就执行,为假就跳过。if的基本结构:if条件:......else:......note:要用冒号来结束代码块,用缩进区分代码块。提示:i
Wesley13 Wesley13
4年前
Java Random类、ThreadLocalRandom类
Random和ThreadLocalRandom类均用于生成伪随机数。Random的构造函数:Random()   默认以系统当前时间为种子,相当于Random(System.currentTimeMillis())Random(long seed)常用方法:nextXxx()  生成对应类型的伪随机数。示例:Rando
Wesley13 Wesley13
4年前
GOROOT、GOPATH、GOBIN
GOROOTgolang安装路径。GOPATHGOPATH可以设置多个工程目录,linux下用冒号分隔(必须用冒号,fishshell的空格分割会出错),windows下用分号分隔,但是goget只会下载pkg到第一个目录,但是编译的时候会搜索所有的目录。在fishshell下,使用set
Stella981 Stella981
4年前
CornerStone的使用
对于我们程序员来说,不管你是大神,还是小鱼小虾,进入公司之后,都用过源码管理工具,不然你就不是一个合格的程序员,现在各个公司用于源码管理工具通常有下面两种:git:使用git的公司应该是最多的。svn:现在使用svn的公司比重也挺大的,但是svn有局限性。当然,他们两者的区别,在这里就不做解释了,一般选择用什么源
Wesley13 Wesley13
4年前
CSS 清除浮动 伪类
参考链接:https://www.cnblogs.com/yingsu/p/7261904.html不清楚浮动的结果和影响不再描述,清除浮动的代码别处也有很多,每种方法都有十分简洁的代码,我今天学到的是有伪类来清除浮动。他的原理简单来说就是再已经浮动的元素后面添加一个什么也没有的元素,以此来消除子元素因为浮动而让父元素塌陷的一种解决办法。
linbojue linbojue
6个月前
使用Python文章伪原创技术,让文章更高效地获得收录和排名
python文章伪原创技术:让文章更高效地获得收录和排名python文章伪原创随着互联网的发展,企业都希望通过网络宣传来扩大自己的影响力。然而,如何有效地宣传?有一种方法可以帮助企业有效地宣传,那就是使用python文章伪原创技术。python文章伪原创P
linbojue linbojue
6个月前
Python采集伪原创,让文章创作事半功倍
在当今互联网时代,内容创作已经成为了一种越来越重要的能力。但是,随着“内容为王”的重要性不断提高,越来越多的人开始采用各种手段进行内容创作,而伪原创就是其中的一种。本文将介绍如何使用Python采集伪原创,帮助你更好地进行文章创作。一、什么是伪原创伪原创是