首页 > 代码库 > 伪类与伪元素的区别以及由来

伪类与伪元素的区别以及由来

伪类:   :first-child     :link    :hover     :active    :visited    :focus     :lang

伪元素:  :first-line      :first-letter     :before    :after

注意:CSS3中伪元素前是两个冒号,如 ::first-line

伪类与伪元素的区别

先看一个伪元素first-line 例子。现在有一段HTML,内容是一个段落:

<p>

I am the bone of my sword. Steel is my body, and fire is my blood.  

I have created over a thoustand blades. Unknown to Death.Nor known to Life. Have withstood pain to create many weapon. Yet, those hands 

will never hold anything. So as I pray, unlimited blade works. 

</p> 

如果我要描述这个段落的第一行,在不用伪元素的情况下,我会怎么做?想来我一定要嵌套一层span,然后加上类名:

 <p><spanclass="first-line">I am the bone of my sword. Steel is my body, and fire is my blood. </span>

I have created over a thoustand blades.Unknown to Death.Nor known to Life. Have withstood pain to create many weapon. Yet, those hands 

will never hold anything. So as I pray, unlimited blade works. 

</p> 

再反观一个伪类first-child 的例子,有一个简单的列表:

 <ul>

<li></li> 

<li></li> 

</ul>

 如果我要描述ul 的第一个元素,我无须嵌套新的元素,我只须给第一个已经存在的 li 添加一个类名就可以了:

<ul>

 <li class="first-child"></li>

<li></li>

</ul> 

 尽管,第一行和第一个元素,这两者的语意相似,但最后作用的效果却完全不同。所以,伪类和伪元素的根本区别在于:它们是否创造了新的元素(抽象)。从我们模仿其意义的角度

来看,如果需要添加新元素加以标识的,就是伪元素,反之,如果只需要在既有元素上添加类别的,就是伪类。而这也是为什么,标准精确地使用“create” 一词来解释伪元素,而

使用“classify” 一词来解释伪类的原因。一个描述的是新创建出来的“幽灵”元素,另一个则是描述已经存在的符合“幽灵”类别的元素。伪类一开始单单只是用来表示一些元素的动态状态,典型的就是链接的各个状态(LVHA)。随后CSS2标准扩展了其概念范围,使其成为了所有逻辑上存在但在文档树中却无须标识的“幽灵”分类。

 伪元素则代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。