1.伪类html
伪类选择元素基于的是当前元素处于的状态,或者说元素当前所具备的特性,而不是元素的id、class、属性等静态的标志。因为状态是动态变化的,因此一个元素达到一个特定状态时,它可能获得一个伪类的样式;当状态改变时,它又会失去这个样式。由此能够看出,它的功能和class有些相似,但它是基于文档以外的抽象,因此叫伪类。web
伪类 | 做用 |
:active | 将样式添加到被激活的元素 |
:focus | 将样式添加到被选中的元素 |
:hover | 当鼠标悬浮在元素上方时,向元素添加样式 |
:link | 将特殊的样式添加到未被访问过的连接 |
:visited | 将特殊的样式添加到被访问过的连接 |
:first-child | 将特殊的样式添加到元素的第一个子元素 |
:lang | 容许创做者来定义指定的元素中使用的语言 |
伪类的定义:post
(1)伪类存在的意义是为了经过选择器找到那些不存在与DOM树中的信息以及不能被常规CSS选择器获取到的信息。spa
(2)伪类由一个冒号:
开头,冒号后面是伪类的名称和包含在圆括号中的可选参数。设计
(3)任何常规选择器能够在任何位置使用伪类。伪类语法不区别大小写。一些伪类的做用会互斥,另一些伪类能够同时被同一个元素使用。而且,为了知足用户在操做DOM时产生的DOM结构改变,伪类也能够是动态的。code
i:first-child {color: red} <p> <i>first</i> <i>second</i> </p>
不用伪类,但愿达到上述效果,直接添加类:orm
.first-child {color: red} <p> <i class="first-child">first</i> <i>second</i> </p>
而使用伪元素:first-letter,第一个字母:htm
p:first-letter {color: red} <p>I am stephen lee.</p>
若是想要达到上述效果,咱们能够这样作:blog
p:first-letter {color: red} <p><span>I<span> am stephen lee.</p>
给I添加span标签才能达到这种效果,有时本身干想一想不出区别,还得亲自动手,如今比较清楚伪类和伪元素的区别了。接口
前五个伪类在https://i.cnblogs.com/EditPosts.aspx?postid=7490649&update=1讲过
:focus怎样使用呢?
一般咱们点击用户名和密码输入框时,会改变颜色,这就用到了:focus
input:focus { background-color:blue; } 用户名:<input type="text" height="40px" width="200px"/>
2.伪元素
与伪类针对特殊状态的元素不一样的是,伪元素是对元素中的特定内容进行操做,它所操做的层次比伪类更深了一层,也所以它的动态性比伪类要低得多。实际上,设计伪元素的目的就是去选取诸如元素内容第一个字(母)、第一行,选取某些内容前面或后面这种普通的选择器没法完成的工做。它控制的内容实际上和元素是相同的,可是它自己只是基于元素的抽象,并不存在于文档中,因此叫伪元素。
伪元素 | 做用 |
:first-letter | 将特殊的样式添加到文本的首字母 |
:first-line | 将特殊的样式添加到文本的首行 |
:before | 在某元素以前插入某些内容 |
:after | 在某元素以后插入某些内容 |
伪元素的定义:
(1)伪元素在DOM树中建立了一些抽象元素,这些抽象元素是不存在于文档语言里的(能够理解为html源码)。好比:documen接口不提供访问元素内容的第一个字或者第一行的机制,而伪元素可使开发者能够提取到这些信息。而且,一些伪元素可使开发者获取到不存在于源文档中的内容(好比常见的::before
,::after
)。
(2)伪元素的由两个冒号::
开头,而后是伪元素的名称。
(3)使用两个冒号::
是为了区别伪类和伪元素(CSS2中并无区别)。固然,考虑到兼容性,CSS2中已存的伪元素仍然可使用一个冒号:
的语法,可是CSS3中新增的伪元素必须使用两个冒号::
。
(4)一个选择器只能使用一个伪元素,而且伪元素必须处于选择器语句的最后。
以后会开一篇关于:before与:after的使用
:after伪类+zoom是目前最使用的清除浮动元素影响的方法