为什么伪类被称为伪类?

10
a:hover

为什么它被称为“伪类”?

与“类”这个概念有什么相似之处吗?

5个回答

7
在CSS中,类是以点号开头的选择器,例如:
.foo { ... }

这将以表单形式使用

<div class="foo">

“class”在这里的意思更多的是“具有共同特征并因种类或质量而与其他事物区分开来的一组或类别”,而不是借用面向对象编程术语。

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


5

这是“伪”的,因为它并不是由您创建的;浏览器会自动创建,并允许您设置其在链接处于该状态时如何显示。


但是为什么它是一个类呢?如果您一次只能悬停在屏幕上的某个区域,则一次只有一个p可以接受CSS规则。类难道不意味着几个元素属于某个共同的组,而类样式规则意味着它们都将继承该规则吗? - Anthony
@Anthony:伪类可以被视为一种状态。每个具有“hover”状态的元素都可以被归类为:hover。因此,每当一个a元素获得“hover”状态时,它就可以被选择为:hover - Gumbo

2
w3c CSS2选择器规范中得知:
CSS引入了伪元素和伪类的概念,以允许基于位于文档树之外的信息进行格式化。
- 伪元素创建有关文档树的抽象,超出文档语言指定的抽象范围。例如,文档语言不提供访问元素内容的第一个字母或第一行的机制。 CSS伪元素允许样式表设计人员引用此无法访问的信息。伪元素还可以为样式表设计人员提供一种将样式分配给源文档中不存在的内容的方法(例如,: before和:after伪元素提供对生成内容的访问)。 - 伪类对元素进行分类,其特征与名称、属性或内容不同;原则上这些特征不能从文档树中推断出来。伪类可以是动态的,即在用户与文档交互时,元素可能会获得或失去伪类。例外情况是“:first-child”,它可以从文档树中推断出来,“:lang()”在某些情况下可以从文档树中推断出来。
因此,伪类是可以附加样式但不会在HTML中自己打印出来的东西。此外,伪类可以根据用户与UI的交互而获得和丢失。

1

随着CSS2/3允许更复杂的元素规则(例如input[type=checkbox]等),伪类这个术语似乎越来越过时了。

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

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

另外值得注意的是,我认为对于某些基于UI的伪类(我特别想到的是:hover),在任何给定时间只有一个元素可以真正拥有那个“类”,因此根据我上面的定义,它几乎更像是伪ID。


0

我认为它们被称为伪类,是因为它们并没有被作者明确定义,而是从作者或用户代理的角度来看,是一种逻辑或心理构造。

在理解HTML文档时经常使用的家庭隐喻中,您可以想象一些元素自己思考,比如说“我是第一个孩子,我是一个div,同时也是第四个孩子(这意味着我的位置也是偶数)”……至于像悬停这样由用户引起的事情,可以想象当a标签或其他元素被悬停时,它立即被分组到已被触摸的事物中,并应用相应的样式……如果可能同时悬停在两个元素上,那么它们将同时认为自己已被触摸,因此属于同一类(悬停的事物),因此都采用相同的样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接