a:hover
为什么它被称为“伪类”?
与“类”这个概念有什么相似之处吗?
.foo { ... }
这将以表单形式使用
<div class="foo">
“class”在这里的意思更多的是“具有共同特征并因种类或质量而与其他事物区分开来的一组或类别”,而不是借用面向对象编程术语。
伪类是“不完全是真正的类”,因为用户代理定义了何时和/或多少内容符合条件(例如: :hover
, :active
等)。
这是“伪”的,因为它并不是由您创建的;浏览器会自动创建,并允许您设置其在链接处于该状态时如何显示。
随着CSS2/3允许更复杂的元素规则(例如input[type=checkbox]等),伪类这个术语似乎越来越过时了。
然而,伪类是唯一(或多或少)可靠地随用户交互而更改的CSS标识符。对于属性选择器之类的东西,大多数浏览器倾向于使用页面加载时所有元素的状态,并忽略任何更改。但是对于伪类,它们实际上会在伪类变为真实(或不真实)时更改样式。
因此,考虑到这个特定的定义,它们是类,因为规则适用于共享相同“状态”的任何元素,因此可以被视为“类”,但是它是伪类,因为它不是真正的属性定义类,并且因为“类”可能在查看页面的任何给定时间都可能是真实的或不真实的。
另外值得注意的是,我认为对于某些基于UI的伪类(我特别想到的是:hover),在任何给定时间只有一个元素可以真正拥有那个“类”,因此根据我上面的定义,它几乎更像是伪ID。
我认为它们被称为伪类,是因为它们并没有被作者明确定义,而是从作者或用户代理的角度来看,是一种逻辑或心理构造。
在理解HTML文档时经常使用的家庭隐喻中,您可以想象一些元素自己思考,比如说“我是第一个孩子,我是一个div,同时也是第四个孩子(这意味着我的位置也是偶数)”……至于像悬停这样由用户引起的事情,可以想象当a标签或其他元素被悬停时,它立即被分组到已被触摸的事物中,并应用相应的样式……如果可能同时悬停在两个元素上,那么它们将同时认为自己已被触摸,因此属于同一类(悬停的事物),因此都采用相同的样式。
:hover
。因此,每当一个a
元素获得“hover”状态时,它就可以被选择为:hover
。 - Gumbo