Home  >  Article  >  Web Front-end  >  css-伪类和伪元素_html/css_WEB-ITnose

css-伪类和伪元素_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:32:031193browse

css-伪类和伪元素

无论是伪类还是伪元素,都属于CSS选择器的范畴。所以它们的定义可以在CSS标准的选择器章节找到。分别是 CSS2.1 Selectors 和 CSS Selector Level 3,两者都已经是推荐标准。 

一:伪类种类

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

 

二:伪元素种类

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

 

三:伪类和伪元素的区别

伪类和伪元素本身就有一个根本的不同之处,这点直接体现在了标准的描述语句上。

伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到,这也是为什么他们一个称为伪类,一个称为伪元素的原因。


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

1 <p>I am the bone of my sword. Steel is my body, and fire is my blood. 2 I have created over a thoustand blades. 3 Unknown to Death.Nor known to Life. Have withstood pain to create many weapon. 4 Yet, those hands will never hold anything. So as I pray, unlimited blade works.</p>

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

1 <p><span class="first-line">I am the bone of my sword. Steel is my body, and fire is my blood. </span> 2 I have created over a thoustand blades.3 Unknown to Death.Nor known to Life. Have withstood pain to create many weapon. 4 Yet, those hands will never hold anything. So as I pray, unlimited blade works.</p>

 

 

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

1 <ul>2 <li></li>3 <li></li>4 </ul>

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


1 <ul>2 <li class="first-child"></li>3 <li></li>4 </ul>

 

尽 管,第一行和第一个元素,这两者的语意相似,但最后作用的效果却完全不同。

所以,伪类和伪元素的根本区别在于:它们是否创造了新的元素(抽象)。

从我们模 仿其意义的角度来看,如果需要添加新元素加以标识的,就是伪元素,反之,如果只需要在既有元素上添加类别的,就是伪类。

而这也是为什么,标准精确地使用 “create” 一词来解释伪元素,而使用 “classify” 一词来解释伪类的原因。

一个描述的是新创建出来的“幽灵”元素,另一个则是描述已经存在的符合“幽灵”类别的元素。 

 


伪类一开始单单只是用来表示一些元素的动态状态,典型的就是链接的各个状态(LVHA)。随后CSS2标准扩展了其概念范围,使其成为了所有逻辑上存在但在文档树中却无须标识的“幽灵”分类。 
伪元素则代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。

 

 

四:伪类和伪元素的混淆

CSS Selector Level 3 为了区分这两者的混淆,而特意用冒号加以区分: 
伪类用一个冒号表示 :first-child 
伪元素则使用两个冒号表示 ::first-line 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn