特殊性计算中伪类和伪元素之间的CSS差异?

时间:2014-09-03 07:06:17

标签: css css-specificity

我学会了如何基于http://reference.sitepoint.com/css/specificity计算css特异性 但是,根据这个参考,我不明白伪类(来自c)和伪元素(来自d)之间有什么区别?

例如,

input[type="text"]:hover

悬停是伪类(来自c)还是伪元素(来自d)?

input[type="text"].error相比,哪一个具有更高的特异性?

2 个答案:

答案 0 :(得分:1)

伪类(c)具有10的特异性

伪元素(d)具有1的特异性

两者

input[type="text"]:hover

input[type="text"].error

具有21的特异性

input(元素 - 'd')= 1

[type="text"](属性 - 'c')= 10

:hover(伪类 - 'c')= 10

.error(class - 'c')= 10

还有在线特异性计算器,例如this one

答案 1 :(得分:0)

引用的页面与CSS规范(例如CSS3选择器,第9. Calculating a selector's specificity部分)相同,但不太详细且非权威性。关键在于,在特异性方面,伪类选择器被视为类选择器和伪元素选择器,如类型选择器(标签名称)。这意味着伪类选择器比伪元素选择器更具体。这背后的想法是类(和伪类)以更具体的方式引用元素,比如“凯迪拉克”(一类汽车,可以这么说)比“汽车”更具体(一种东西,所以说)。

关于:hover,问题是如何在CSS规范中指定的。碰巧它是一个伪类选择器。这很自然,因为它指的是处于特定状态的元素,因此它可以被描述为“动态类”。

因此,input[type="text"]:hoverinput[type="text"].error具有相同的特异性。