我学会了如何基于http://reference.sitepoint.com/css/specificity计算css特异性 但是,根据这个参考,我不明白伪类(来自c)和伪元素(来自d)之间有什么区别?
例如,
input[type="text"]:hover
悬停是伪类(来自c)还是伪元素(来自d)?
与input[type="text"].error
相比,哪一个具有更高的特异性?
答案 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"]:hover
和input[type="text"].error
具有相同的特异性。