有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

css伪类和伪元素的区别是什么?

代码编程 cat 11个月前 (10-29) 68次浏览 已收录 0个评论 扫描二维码

css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说:伪类和伪元素是用来修饰不在文档树中的部分。比如,一句话中的第一个字母,或者是列表中的第一个元素。

伪类和伪元素的具体概念如下:

伪类:用于已有元素处于某种状态时为其添加对应的样式,这个状态是根据用户行为而动态变化的。

例如:当用户悬停在指定元素时,可以通过:hover来描述这个元素的状态,虽然它和一般css相似,可以为已有元素添加样式,但是它只有处于DOM树无法描述的状态下才能为元素添加样式,所以称为伪类。

伪元素:用于创建一些不在DOM树中的元素,并为其添加样式。例如,我们可以通过:before来在一个元素之前添加一些文本,并为这些文本添加样式,虽然用户可以看见这些文本,但是它实际上并不在DOM文档中。

2、伪类和伪元素的区别:

请看下面例子:

例一:

<ul>
    <li>第一列</li>
    <li>第二列</li></ul>

如果我们想要给第一列添加样式,我们可以通过以下两种方式:

(1)给第一列添加一个类,并在该类中定义样式:

<ul>
    <li class="first-item">第一列</li>
    <li>第二列</li></ul>.first-item{color:orange;}

(2)如果不用添加类的方法,我们可以通过给第一个<li>设置:first-child伪类来为其添加样式,这时,被修饰的li依然存在于DOM树中

<ul>
    <li>第一个</li>
    <li>第二个</li></ul>li:first-child{color:orage;}

例二:

<p>Hello World, and wish you have a good day!</p>

想要给该段落第一个字母添加样式,可以有以下方法:

(1)給第一个字母包裹<span>元素,并给span设置样式:

<p><span class="first">H</span>ello World, and wish you have a good day!</p>.first{color:red;}

(2)如果不创建<span>元素,我们可以通过给<p>元素设置P:first-letter伪元素为其添加样式,这时看起来像创建了一个虚拟的span元素并为其添加样式,但实际上在DOM数中并不存在这个span元素

<p>Hello World, and wish you have a good day!</p>p:first-letter{color:red;}

从上述例子中我们可以看出:伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档树外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素。

css3规范中要求使用双冒号(::)表示伪元素,以此来区分伪类和伪元素,比如::before和::after等伪元素使用双冒号(::),:hover和:active伪类使用单冒号(:)。除了一些低于IE8版本的浏览器外,大部分浏览器都支持伪元素的双冒号(::)表示方法。

然而除了少部分伪元素如::backdrop必须使用双冒号(::),大部分伪元素都支持单冒号和双冒号的写法,比如::after,写成:after一样可以正常运行。

w3c标准中说到,虽然CSS3标准要求伪元素使用双冒号的写法,但也依然支持单冒号的写法。为了向后兼容,我们建议你在目前还是使用单冒号的写法。

伪类侧重丰富选择器的选择语法范围内元素的选择能力,伪元素侧重表达或者定义不在语法定义范围内的抽象元素。

伪类和伪元素各自有一些存在的兼容问题。使用的时候留意兼容性。

通过伪类和伪元素的配合使用,发挥想象力,可以实现很多复杂的特殊效果。可以在一定程度上避免使用js来操纵样式。

文章来源于:php中文网

喜欢 (0)
cat
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址