为什么所谓的伪类呢?

时间:2009-08-15 07:48:25

标签: css css-selectors pseudo-class

a:hover

为什么称它为“伪类”?

与“阶级”的概念有什么相似之处吗?

5 个答案:

答案 0 :(得分:5)

在CSS术语中,类是一个以句号开头的选择器,例如

.foo { ... }

它将以

的形式使用
<div class="foo">

这种“阶级”的使用更多地是“具有共同特征并通过种类或质量区别于其他事物的一组或一类”,而不是借用OO术语。

由于用户代理定义何时和/或有多少内容符合条件(例如:hover:active等),因此伪类“不是真正的”。

答案 1 :(得分:4)

它是,因为你没有成功;浏览器“创建”它并允许您将其设置为在该状态下更改链接的外观。

答案 2 :(得分:1)

来自w3c CSS2 selector spec

  

CSS引入了伪元素和伪类的概念,以允许基于文档树之外的信息进行格式化。

     
      
  • 伪元素创建文档树的抽象,超出文档语言指定的范围。例如,文档语言不提供访问元素内容的第一个字母或第一行的机制。 CSS伪元素允许样式表设计者引用此无法访问的信息。伪元素还可以为样式表设计者提供一种方式,将样式分配给源文档中不存在的内容(例如,:之前和之后的伪元素可以访问生成的内容)。

  •   
  • 伪类对其名称,属性或内容以外的特征进行分类;原则上不能从文档树中推断出的特征。在用户与文档交互时元素可以获取或丢失伪类的意义上,伪类可以是动态的。例外是':first-child',可以从文档树中推导出来,以及':lang()',在某些情况下可以从文档树中推断出来。

  •   

所以基本上,伪类是你可以附加样式的东西,但是你永远不会在HTML中自己打印出来。此外,根据用户与UI的交互,可以获取和丢失伪clas。

答案 3 :(得分:1)

CSS2 / 3允许更复杂的元素规则(输入[type = checkbox]之类的东西等),术语伪类似乎越来越过时了。

但是,伪类是唯一一个(或多或少)可靠地随用户交互而变化的CSS标识符。对于属性选择器和不具有的属性选择器,大多数浏览器倾向于使用页面加载时所有元素的状态,并且忽略所做的任何更改。但是对于伪类,当伪类变为真(或不真实)时,它们实际上会改变样式。

因此,考虑到这个特定的定义,它们是类,因为规则适用于共享相同“状态”的任何元素,因此可以被认为是“类”,但它是伪的,因为它不是真正的属性 - 定义的类,因为在查看页面的任何给定时间,“类”可能是也可能不是。

我认为,有趣的是,对于某些基于UI的伪类(我特意考虑:hover),在任何给定时间只有一个元素可以真正拥有“类”,所以它是基于我的上述定义,几乎更多的是伪id。

答案 4 :(得分:0)

我想将它们称为伪类,因为它们不是由作者明确定义的,而是至少从作者甚至用户代理的角度来看,它们是一种逻辑或思维构造。

通过在理解HTML文档时经常使用的家庭隐喻,您可以想象一些元素会自我思考,例如第一个孩子,我是一个div以及第四个孩子(这意味着我的职位也是偶数)。对于用户引起的诸如悬停之类的事情,可以想象一下,当将标签或任何元素悬停在其上时,它会立即被分组到已触摸的事物中,并且将应用相应的样式...如果可能的话同时将它们悬停在两个元素上,它们将同时想到主题,因此我们属于该类(悬停在事物上),因此它们都采用相同的样式