作为一个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浏览器,那么还是用单冒号的写法比较稳妥。
 

CSS3伪类和伪元素的更多相关文章

  1. css3 -- 伪类与伪元素

    伪类: 1.结构伪类 A:E : first-child{} E : nth-*(n){} E : first-*(even){}  E : first-*(odd){} B:nth-child 是根 ...

  2. CSS3伪类和伪元素的特性和区别

    前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常见的:focus,:hover以及<a>标签的:link.visited等,伪元素较常见的比如:before.:after等. 其 ...

  3. css3怎么分清伪类和伪元素

    伪类用于向某些选择器添加特殊的效果. 伪元素用于将特殊的效果添加到某些选择器. 伪类有::first-child ,:link:,vistited,:hover,:active,:focus,:lan ...

  4. CSS3伪类和伪元素的特性和区别尤其是 ::after和::before

    伪类和伪元素的理解 官方解释: 伪类一开始单单只是用来表示一些元素的动态状态,典型的就是链接的各个状态(LVHA).随后CSS2标准扩展了其概念范围,使其成为了所有逻辑上存在但在文档树中却无须标识的“ ...

  5. ::before ::after CSS3中的伪类和伪元素

    ::before和::after伪元素的用法 一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:target,:not(),:fo ...

  6. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

  7. CSS3伪类与伪元素的区别及注意事项

    CSS中伪类与伪元素的概念是很容易混淆的 今天就来谈谈伪类与伪元素之间的区别 定义 首先先来看看伪类与伪元素的定义 w3c中对于它们是这么解释的 伪类:用于向某些选择器添加特殊的效果 伪元素:用于将特 ...

  8. css3的伪(伪类和伪元素)大合集

    本文讲css3的伪,不是讲它有多虚伪,而是说它的伪元素样式.不得不说以前虽知html伪元素,但很少用,后得知借助css3伪元素可以发挥极大的便利.故总结css3的伪如下: CSS中存在一些比较特殊的属 ...

  9. CSS3 动态生成内容(在Web中插入内容)====CSS的伪类或者伪元素

    # css3 .类:伪类::伪元素 /* CSS3伪元素/伪类 :https://www.w3.org/TR/css3-selectors/#selectors ::selection 伪元素(F12 ...

随机推荐

  1. spring boot 集成 Listener 的两种方式

    1)@ServletComponentScan注解+@WebListener注解 2)@Bean注解+ServletListenerRegistrationBean类

  2. [原创]K8_Delphi源码免杀系列教程

    [原创]K8_Delphi源码免杀系列教程[2014] 虽是2014年的,但免杀思路方法并未过时 比如函数动态调用\代码注释法等至今依然有效 链接:https://pan.baidu.com/s/1H ...

  3. Xamarin.Android 使用线程无法更改页面文本问题

    前言: 刚接触Xamarin.Android不到一个月时间,却被他折磨的不要不要的,随着开发会出现莫名其妙的问题,网上类似Xamarin.Android的文档也不多,于是本片文章是按照Java开发An ...

  4. 第四章:Android架构

    我们对android有了个大致的了解,知道如何搭建android的环境及简单地写一个HelloWorld程序,而且知道一个android项目包括哪些文件夹和文件及相应的作用.本篇将站在顶级的高度——架 ...

  5. Firefox37.0.1+selenium 2.53+python3.6打开浏览器时报错NameError: name 'basestring' is not defined

    环境:Win7      Firefox浏览器版本37.0.1      Python36      Selenium2.53.0 在Pycharm里执行以下3行脚本: from selenium i ...

  6. ckeditor 在dwz里面使用

    在ckeditor的配置的过程中,所有的配置的地方都配置了,但是就是不显示编辑器(编辑器代码如下),很郁闷哦 1 <textarea id="editor1" name=&q ...

  7. Shell脚本 | 性能测试之CPU占有率

    Android 是一个基于 Linux 内核的移动操作系统,Linux 的 CPU 占有率的计算方式也可以应用到 Android App 上. 今天分享的这个脚本的功能,是在多核情况下计算进程的 CP ...

  8. nginx介绍(三) - 虚拟主机

    前言 前面提到过, 由nginx来分发请求到tomcat中, 那么怎么来区分这些tomcat呢? 我们一般访问网站的时候, 是不是可以使用 ip : port (127.0.0.1:8080)的方式来 ...

  9. 【源码解读】EOS测试插件:txn_test_gen_plugin.cpp

    本文内容本属于<[精解]EOS TPS 多维实测>的内容,但由于在编写时篇幅过长,所以我决定将这一部分单独成文撰写,以便于理解. 关键字:eos, txn_test_gen_plugin, ...

  10. 使用shell脚本来自动化处理我们的工作,解放双手

    Shell脚本介绍 1.Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. 2.Shell可以直接使用在wi ...