在css2中对它们的定义如下:

伪元素:伪元素是指那些在文档树结构里没有用文档语言具体指定的文档树结构。比如,文档语言并没有提供一个途径去获得元素内容里的每一个字母或者第一行,但伪元素允许我们对这些结构进行样式设计。

伪元素还提供我们对一些不存在在文档里的元素进行样式操作的路径。如:befor 和 :after伪元素就是文档里并没有的元素,但在显示时,他们可以出现在内容里。

伪类:伪类是根据元素的特征而不是他们的名字、属性或者内容进行归类的,大体上是那些无法根据文档树的结构来推断的特征。伪类也许是动态的,感觉就像是进行用户交互时一个元素可能获得或者失去一个伪类。不过也有例外,:first-child和:lang是可以通过文档树来推断的(后者只在某些情况下可以)。

(要查看原文,可以点击这里

具体可以这样子理解:

(1)伪元素可以看作是文档结构的一部分,:first-letter和:first-line是存在的文档元素的一部分,而:after和:before则是通过css生成的文档元素的一部分。而伪元素的样式设计就是对这些获得的部分进行操作。

(2)伪类则相当于是对某个元素进行类样式的替换,而替换的依据就是用户交互的特征,如鼠标点击、获得焦点、打印。这些动作的发生都是不知预知的。

css2中提供的伪元素(也称为伪对象)有::first-letter、 :first-line、 :before 、:after,伪类有::link、 :visited、 :hover、 :active、 :focus、 :first-child、 :first、 :left :right、 :lang。

这些的具体用法这里就不详述,有需要有可以去看一下参考手册。