本文讲css3的伪,不是讲它有多虚伪,而是说它的伪元素样式。不得不说以前虽知html伪元素,但很少用,后得知借助css3伪元素可以发挥极大的便利。故总结css3的伪如下:

CSS中存在一些比较特殊的属性,称之为伪类,它们之中最常用的就是定义链接的伪:link,:visited,:hover,:active等。除了它们,还有一些不被常使用的伪类,有:focus,:first-child,:lang等。

如下将一一介绍各伪类的用法。

CSS 伪类 (Pseudo-classes)实例:

超链接
本例演示如何向文档中的超链接添加不同的颜色。
-------------------------------------------
超链接 2
本例演示如何向超链接添加其他样式。
:link 选择器对指向未被访问页面的链接设置样式, 
:hover 选择器用于设置鼠标指针浮动到链接上时的样式,
:active选择器用于设置点击链接时的样式。
:visited 选择器用于选取已被访问的链接。
--------------------------------------------------
超链接 - :focus 的使用
本例演示如何对超链接应用 :focus 伪类(无法在 IE 中工作)。focus选择获得焦点的输入字段,并设置其样式。:focus 选择器用于选取获得焦点的元素。提示:接收键盘事件或其他用户输入的元素都允许 :focus 选择器。

当输入框获得焦点时,改变它的背景色:

$("input").focus(function(){
$("input").css("background-color","#FFFFCC");
});

亲自试一试

当元素获得焦点时,发生 focus 事件。

当通过鼠标点击选中元素或通过 tab 键定位到元素时,该元素就会获得焦点。

focus() 方法触发 focus 事件,或规定当发生 focus 事件时运行的函数。blur失去焦点。

触发 focus 事件

语法

$(selector).focus()

亲自试一试

将函数绑定到 focus 事件

语法

$(selector).focus(function)

亲自试一试----------------------------------
:first-child(首个子对象)
本例演示 :first-child 伪类的用法。first-child是父元素的首个子元素。
text-transform用于转换不同元素中的文本,text-transform 属性控制文本的大小写。

h1 {text-transform:uppercase}大写
h2 {text-transform:capitalize}混写
p {text-transform:lowercase}小写 ----------------------------------------------------------------------------
:lang(语言)
本例演示 :lang 伪类的用法。:lang 选择器用于选取带有以指定值开头的 lang 属性的元素。注释:该值必须是整个单词,即可是单独的,比如 lang="en",也可后跟连接符,比如 lang="en-us"。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CSS里不光有伪类,还有伪元素,比如::first-letter,:first-line,:before和:after。
这个伪元素允许制作人员在元素内容的最后面插入生成内容,需要和content属性一起使用,设置在对象后发生的内容。默认地,这个伪元素是inline行内元素,不过可以使用属性 display 改变这一点。
所有主流浏览器都支持 :after 伪元素,但对于IE来说,只有IE8以上版本支持。

after顾名思义是在元素后面的意思,实质是在元素之后添加内容。

在before/after伪元素选择器中,有一个content属性,能够实现页面中的内容插入。现总结content插入情况如下:

一 插入纯文字

content:"插入的文章",或者content:none不插入内容
html:

XML/HTML Code复制内容到剪贴板
  1. <h1>这是h1</h1>
  2. <h2>这是h2</h2>

css

CSS Code复制内容到剪贴板
  1. h1::after{
  2. content:"h1后插入内容"
  3. }
  4. h2::after{
  5. content:none
  6. }

运行结果:

这是h1h1后插入内容

这是h2

二 嵌入文字符号

可以使用content属性的open-quote属性值和close-quote属性值在字符串两边添加诸如括号、单引号、双引号之类的嵌套文字符号。open-quote用于添加开始的文字符号,close-quote用于添加结束的文字符号。修改上述的css:

CSS Code复制内容到剪贴板
  1. h1{
  2. quotes:"(" ")";  /*利用元素的quotes属性指定文字符号*/
  3. }
  4. h1::before{
  5. content:open-quote;
  6. }
  7. h1::after{
  8. content:close-quote;
  9. }
  10. h2{
  11. quotes:"\"" "\"";  /*添加双引号要转义*/
  12. }
  13. h2::before{
  14. content:open-quote;
  15. }
  16. h2::after{
  17. content:close-quote;
  18. }

运行结果:

(这是h1)

\这是h2\

三 插入图片

content属性也可以直接在元素前/后插入图片
html:

XML/HTML Code复制内容到剪贴板
  1. <h3>这是h3</h3>

css:

h3::after{
    content:url(http://ido321.qiniudn.com/wp-content/themes/yusi1.0/img/new.gif)
}

运行结果:

这是h3(此处有图片)

四 插入元素的属性值

content属性可以直接利用attr获取元素的属性,将其插入到对应位置。
html:

XML/HTML Code复制内容到剪贴板
  1. <a href="http://www.cnblogs.com/ibingbing">这是链接  </a>

css:

CSS Code复制内容到剪贴板
  1. a:after{
  2. content:attr(href);
  3. }

运行结果:

这是链接http://www.cnblogs.com/ibingbing

五 插入项目编号

利用content的counter属性针对多个项目追加连续编号.
html:

XML/HTML Code复制内容到剪贴板
  1. <h1>大标题</h1>
  2. <p>文字</p>
  3. <h1>大标题</h1>
  4. <p>文字</p>
  5. <h1>大标题</h1>
  6. <p>文字</p>
  7. <h1>大标题</h1>
  8. <p>文字</p>

css:

CSS Code复制内容到剪贴板
  1. h1:before{
  2. content:counter(my)'.';
  3. }
  4. h1{
  5. counter-increment:my;
  6. }

运行结果:

大标题

文字

大标题

文字

大标题

文字

大标题

文字

counter-increment对部分和子部分进行编号(比如 "Section 1"、"1.1"、"1.2")的方法:

body
{
counter-reset:section;
} h1
{
counter-reset:subsection;
} h1:before
{
content:"Section " counter(section) ". ";
counter-increment:section;
} h2:before
{
counter-increment:subsection;
content:counter(section) "." counter(subsection) " ";
}

亲自试一试

所有浏览器都支持 counter-increment 属性。

注释:如果已规定 !DOCTYPE,那么 Internet Explorer 8 (以及更高版本)支持 counter-increment 属性。

counter-increment 属性设置某个选取器每次出现的计数器增量。默认增量是 1。

利用这个属性,计数器可以递增(或递减)某个值,这可以是正值或负值。如果没有提供 number 值,则默认为 1。

注释:如果使用了 "display: none",则无法增加计数。如使用 "visibility: hidden",则可增加计数。

六 项目编号修饰

默认插入的项目编号是数字型的,1,2,3.。。。自动递增,也能给项目编号追加文字和样式,依旧利用上面的html,css修改如下:

CSS Code复制内容到剪贴板
  1. h1:before{
  2. content:'第'counter(my)'章';
  3. color:red;
  4. font-size:42px;
  5. }
  6. h1{
  7. counter-increment:my;
  8. }

运行结果:

大标题

文字

大标题

文字

大标题

文字

大标题

文字

七 指定编号种类

利用content(计数器名,编号种类)格式的语法指定编号种类,编号种类的参考可以依据ul的list-style-type属性值。利用上述的html,css修改如下:

CSS Code复制内容到剪贴板
  1. h1:before{
  2. content:counter(my,upper-alpha);
  3. color:red;
  4. font-size:42px;
  5. }
  6. h1{
  7. counter-increment:my;
  8. }

运行结果:

大标题

文字

大标题

文字

大标题

文字

大标题

文字

八 编号嵌套

大编号中嵌套中编号,中编号中嵌套小编号。
html:

XML/HTML Code复制内容到剪贴板
  1. <h1>大标题</h1>
  2. <p>文字1</p>
  3. <p>文字2</p>
  4. <p>文字3</p>
  5. <h1>大标题</h1>
  6. <p>文字1</p>
  7. <p>文字2</p>
  8. <p>文字3</p>
  9. <h1>大标题</h1>
  10. <p>文字1</p>
  11. <p>文字2</p>
  12. <p>文字3</p>

css:

CSS Code复制内容到剪贴板
  1. h1::before{
  2. content:counter(h)'.';
  3. }
  4. h1{
  5. counter-increment:h;
  6. }
  7. p::before{
  8. content:counter(p)'.';
  9. }
  10. p{
  11. counter-increment:p;
  12. }

运行结果:

1.大标题

1.文字1

2.文字2

3.文字3

2.大标题

4.文字1

5.文字2

6.文字3

3.大标题

7.文字1

8.文字2

9.文字3

在示例的输出中可以发现,p的编号是连续的。如果对于每一个h1后的三个p重新编号的话,可以使用counter-reset属性重置,修改上述h1的css:

CSS Code复制内容到剪贴板
  1. h1{
  2. counter-increment:h;
  3. counter-reset:p;
  4. }

这样,编号就重置了,看看结果

1.大标题

1.文字1

2.文字2

3.文字3

2.大标题

1.文字1

2.文字2

3.文字3

3.大标题

1.文字1

2.文字2

3.文字3

还可以实现更复杂的嵌套,例如三层嵌套。
html:

XML/HTML Code复制内容到剪贴板
  1. <h1>大标题</h1>
  2. <h2>中标题</h2>
  3. <h3>小标题</h3>
  4. <h3>小标题</h3>
  5. <h2>中标题</h2>
  6. <h3>小标题</h3>
  7. <h3>小标题</h3>
  8. <h1>大标题</h1>
  9. <h2>中标题</h2>
  10. <h3>小标题</h3>
  11. <h3>小标题</h3>
  12. <h2>中标题</h2>
  13. <h3>小标题</h3>
  14. <h3>小标题</h3>

css:

CSS Code复制内容到剪贴板
  1. h1::before{
  2. content:counter(h1)'.';
  3. }
  4. h1{
  5. counter-increment:h1;
  6. counter-reset:h2;
  7. }
  8. h2::before{
  9. content:counter(h1) '-' counter(h2);
  10. }
  11. h2{
  12. counter-increment:h2;
  13. counter-reset:h3;
  14. }
  15. h3::before{
  16. content:counter(h1) '-' counter(h2) '-' counter(h3);
  17. }
  18. h3{
  19. counter-increment:h3;
  20. }

运行结果:

1.大标题

1-1中标题

1-1-1小标题

1-1-2小标题

1-2中标题

1-2-1小标题

1-2-2小标题

2.大标题

2-1中标题

2-1-1小标题

2-1-2小标题

2-2中标题

2-2-1小标题

2-2-2小标题

最后,css3伪类和伪元素的区别如下:

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

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

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伪类和伪元素

    作为一个CSS3初学不久者来说,很容易混淆单冒号(:)和双冒号(::)的用法,以为两者可以互换着来使用.我自己之前也混淆过他们,因为两者看起来太相像了,就像孪生兄弟.但实际上,他们的区别还是挺大的,最 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. MySql向SQLServer迁移常见问题

    -- MySql与SQLServer update inner join语法区别-- MySql: UPDATE A LEFT JOIN B ON A.B_ID = B.B_ID SET A.A_NA ...

  2. RedHat OpenShift QuickStart 1.2

    一.在容器中传入/出文件 1. 创建一个初始化项目 oc login -u developer -p developer oc new-project myproject 2. 在容器中下载文件 先通 ...

  3. tensorflow非线性回归(03-1)

    这个程序为简单的三层结构组成:输入层.中间层.输出层 要理清各层间变量个数 import numpy as np import matplotlib.pyplot as plt import tens ...

  4. tcp连接建立和断开

    TCP协议作为传输层主要协议之一,具有面向连接,端到端,可靠的全双工通信,面向字节流的数据传输协议. 1.TCP报文段 虽然TCP面试字节流,但TCP传输的数据单元却是报文段.TCP报文段分为TCP首 ...

  5. SignalR Connection has not been fully initialized

    在使用 SignalR 过程中遇到 SignalR: Connection has not been fully initialized. Use .start().done() or .start( ...

  6. :before 与 :after

    http://justcoding.iteye.com/blog/2032627  网址

  7. Python开发之Anconda环境搭建

    Python的强大之处在于它的应用范围广泛,遍及人工智能.科学计算.web开发.系统运维.大数据及云计算等,实现其强大功能的前提,就是Python具有数量庞大且功能相对完善的标准库和第三方库.通过对库 ...

  8. 126、Java面向对象之引用传递实例四,修改类成员的属性值

    01.代码如下: package TIANPAN; class Message { private String info = "此内容无用"; // 定义String类型属性 p ...

  9. 7.Varnish

    概述 Varnish处理HTTP请求的过程大致分为如下几个步骤:         1> Receive状态:请求处理入口状态,根据VCL规则判断该请求应该Pass或Pipe,还是进入Lookup ...

  10. JMeter配置JDBC测试SQL Server/MySQL/ORACLE

    一.配置SQL Server 1.下载sql驱动,将sqljdbc4.jar放到JMeter安装目录/lib下. 2.启动JMeter,右键添加->配置文件->JDBC Connectio ...