我学会了如何根据http://reference.sitepoint.com/css/specificity然而,基于这个参考,我不明白伪类(来自c)和伪元素(来自d)之间的区别是什么?
例如,
input[type="text"]:hover
hover是伪类(来自c)还是伪元素(来自d)?
与input[type="text"].error
相比,哪一种具有更高的特异性?
伪类(c)的特异性为10
伪元素(d)具有1 的特异性
两个
input[type="text"]:hover
和
input[type="text"].error
特异性为21
input
(元素-"d")=1
[type="text"]
(属性-"c")=10
:hover
(伪类-'c')=10
.error
(类别-"c")=10
还有一些在线的特异性计算器,比如这个。
引用的页面与CSS规范(如CSS3 Selectors,第9节)相同。计算选择器的特异性,尽管不太详细,也不具有权威性。关键是,在特定情况下,伪类选择器被视为类选择器,而伪元素选择器则被视为类型选择器(标记名)。这意味着伪类选择器比伪元素选择器更具体。这背后的想法是,类(和伪类)以更具体的方式指代元素,比如"凯迪拉克"(可以说是一类汽车)比"汽车"(可以这么说是一种东西)更具体。
关于:hover
,重要的是如何在CSS规范中指定它。碰巧它是一个伪类选择器。这是自然的,因为它指的是处于特定状态的元素,因此可以将其定性为"动态类"。
因此,input[type="text"]:hover
和input[type="text"].error
具有相同的特异性。