【发布时间】:2010-11-19 20:46:24
【问题描述】:
a:hover
为什么叫“伪类”?
与“类”的概念有什么相似之处吗?
【问题讨论】:
标签: css css-selectors pseudo-class
a:hover
为什么叫“伪类”?
与“类”的概念有什么相似之处吗?
【问题讨论】:
标签: css css-selectors pseudo-class
这是伪,因为你没有做到;浏览器“创建”了它,并允许您设置它以在链接处于该状态时更改链接的外观。
【讨论】:
:hover 进行分类。因此,每当a 元素获得状态hover 时,都可以使用:hover 选择它。
在 CSS 术语中,类是一个以句号开头的选择器,例如
.foo { ... }
它会以表格形式使用
<div class="foo">
“类”的这种用法更多是指“具有共同特征并通过种类或质量与其他事物区分开来的一组或类别的事物”,而不是借用面向对象的术语。
伪类“不是一个真正的类”,因为用户代理定义了何时和/或多少内容符合条件(如:hover、:active 等)。
【讨论】:
CSS 引入了伪元素和伪类的概念,以允许基于文档树之外的信息进行格式化。
伪元素创建了关于文档树的抽象,超出了文档语言指定的抽象。例如,文档语言不提供访问元素内容的第一个字母或第一行的机制。 CSS 伪元素允许样式表设计者参考这些原本无法访问的信息。伪元素还可以为样式表设计者提供一种将样式分配给源文档中不存在的内容的方法(例如,:before 和 :after 伪元素可以访问生成的内容)。
伪类根据元素的名称、属性或内容以外的特征对元素进行分类;原则上无法从文档树中推断出的特征。伪类可能是动态的,从某种意义上说,当用户与文档交互时,元素可能会获取或丢失伪类。例外是 ':first-child',它可以从文档树中推导出来,而 ':lang()',它可以在某些情况下从文档树中推导出来。
所以基本上,伪类是你可以附加样式的东西,但你永远不会在 HTML 中自己打印出来。此外,根据用户与 UI 的交互,可能会获取和丢失伪类。
【讨论】:
随着 CSS2/3 允许更复杂的元素规则(像 input[type=checkbox] 之类的东西,伪类一词似乎越来越过时了。
但是,伪类是唯一(或多或少)随着用户交互而可靠变化的 CSS 标识符。使用属性选择器等等,大多数浏览器倾向于在页面加载时使用所有元素的状态,并且所做的任何更改都会被忽略。但是对于伪类,当伪类变为真(或不真)时,它们实际上会改变样式。
因此,考虑到该特定定义,它们是类,因为该规则适用于共享相同“状态”的任何元素,因此可以被视为“类”,但它是伪的,因为它不是真正的属性- 定义的类,因为在查看页面的任何给定时间,“类”可能为真,也可能不为真。
我认为,有趣的是,对于某些基于 UI 的伪类(我特别想到 :hover),在任何给定时间只有一个元素可以真正拥有那个“类”,所以它几乎更多一个伪 id,基于我上面的定义。
【讨论】:
我认为它们被称为伪类是因为它们不是由作者明确定义的,而是至少从作者甚至用户代理的角度来看是一种逻辑或心理构造。
按照在理解 HTML 文档时经常使用的家庭隐喻,您可以想象一些元素对自己的想法,比如我是第一个孩子,我是一个 div,也是第四个孩子(意味着我的位置也是偶数).. . 至于诸如悬停之类的用户诱导的事情,可以想象,当一个标签或任何元素悬停在它上面时,它会立即被分组到已触摸的事物中,并且将应用相应的样式......如果可能的话同时将鼠标悬停在两个元素上,他们会同时认为我们已被触摸,因此属于该类(悬停在事物上),因此两者都采用相同的样式
【讨论】: