伪类和伪元素区别

来源:互联网 发布:淘宝,天猫,京东,哪个好 编辑:程序博客网 时间:2024/05/04 22:48
首先,阅读 w3c 对两者的定义:
  • CSS 伪类用于向某些选择器添加特殊的效果。
  • CSS 伪元素用于将特殊的效果添加到某些选择器。

可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果。这里特殊指的是两者描述了其他 css 无法描述的东西。

想对诸如元素状态变化或位置进行样式定义则需要用到伪类(Pseudo Classes)和伪元素(Pseudo Elements)。比如对一个连接访问后其字体显示方式,一个段落第一句话的颜色字体显示方式等时候我们就需要用到伪类和伪元素了。

顾名思义,伪类和伪元素不是真正意义上的html存在的类和元素,他们的存在是为了方便对状态和位置进行样式定义。

伪类,类,class是一个类,就类似class这样,表示一些元素的状态的,但是无须标识的分类。nth-child()选择器

伪元素,就是一个元素,类似p标签元素,等等,逻辑上存在,但是实际并不存在在文档树中。::before 和 ::after 伪元素


伪元素
对html中真实元素不同位置的指代。一般以两个冒号作为开始,具体语法为:

selector::pseudo-element {
property:value;
}

selector.class::pseudo-element {
property:value;
}
示例:定义p元素中内容的第一行为红色小字

p::first-line {
color: #ff0000;
font-variant: small-caps;
}


伪类
对html中物理存在的元素进行动作操作后的状态指代(比如点击后,鼠标移动上面后等),一般以一个冒号做为开始。具体语法如下:

selector:pseudo-class {
property:value;
}

selector.class:pseudo-class {
property:value;
}
示例:定义一个链接访问过后的颜色

a:visited {
color: #00FF00;
}
全家福





伪类种类

伪元素种类

区别

这里用伪类:first-child 和伪元素 :first-letter 来进行比较。

p>i:first-child {color: red}<p>    <i>first</i>    <i>second</i></p>
//伪类 :first-child 添加样式到第一个子元素

如果我们不使用伪类,而希望达到上述效果,可以这样做:

.first-child {color: red}<p>    <i class="first-child">first</i>    <i>second</i></p>
即我们给第一个子元素添加一个类,然后定义这个类的样式。


伪元素

p:first-letter {color: red}<p>I am stephen lee.</p>
//伪元素:first-letter 添加样式到第一个字母

那么如果我们不使用伪元素,要达到上述效果,应该怎么做呢?

.first-letter {color: red}<p><span class='first-letter'>I</span> am stephen lee.</p>
即我们给第一个字母添加一个 span,然后给 span 增加样式。

两者的区别已经出来了。那就是:

伪类表示在已有的元素上添加类,伪元素在于生成元素.伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到,这也是为什么他们一个称为伪类,一个称为伪元素的原因。

伪类选择元素基于的是当前元素处于的状态,或者说元素当前所具有的特性,而不是元素的id、class、属性等静态的标志。由于状态是动态变化的,所以一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可以看出,它的功能和class有些类似,但它是基于文档之外的抽象,所以叫伪类。

与伪类针对特殊状态的元素不同的是,伪元素是对元素中的特定内容进行操作,它所操作的层次比伪类更深了一层,也因此它的动态性比伪类要低得多。实际上,设计伪元素的目的就是去选取诸如元素内容第一个字(母)、第一行,选取某些内容前面或后面这种普通的选择器无法完成的工作。它控制的内容实际上和元素是相同的,但是它本身只是基于元素的抽象,并不存在于文档中,所以叫伪元素。

文/西北偏北(简书作者)
原文链接:http://www.jianshu.com/p/5791bafb2eb2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。


0 0
原创粉丝点击