它指出,特异性是CSS的得分系统。它告诉我们元素值1分,类值10分,ID值100分。最重要的是,这些点是合计的,总数就是选择者的特异性。
例如:
身体 = 1点 身体.wrapper = 11点 身体.wrapper#容器 = 111点
因此,使用这些要点,我期望以下CSS和HTML导致文本为蓝色:
#a { color: red; } .a .b .c .d .e .f .g .h .i .j .k .l .m .n .o { color: blue; } <div class="a"> <div class="b"> <div class="c"> <div class="d"> <div class="e"> <div class="f"> <div class="g"> <div class="h"> <div class="i"> <div class="j"> <div class="k"> <div class="l"> <div class="m"> <div class="n"> <div class="o" id="a"> This should be blue. </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>
为什么当15个班级等于150分而1个ID等于100分时,文本变成红色?
显然,积分不只是总数。它们是串联在一起的。在此处了解更多相关信息这是否意味着选择器中的类= 0,0,15,0OR 0,1,5,0?
0,0,15,0
0,1,5,0
(我的直觉告诉我,这是前者,正如我们所知道的ID选择的特异性看起来是这样的:0,1,0,0)
0,1,0,0
但是,正如许多人已经指出的那样,W3CCSS建议指出:“将三个数字abc(在基数较大的数字系统中)连接起来具有特殊性。”因此,我的极客只需要弄清楚这个基数是多少。
事实证明(至少4个最常用的浏览器*)用于实现此标准算法的“很大的基础” 是256或2 8。
这意味着用0个id和256个类名指定的样式 将 覆盖仅用1个id指定的样式。我用一些小提琴进行了测试:
… 256标签名称 是 足以覆盖1类名
......但是,唉256个ID是 不 足够覆盖1种内嵌样式 (更新2012年8月15日-你将不得不使用!important)
!important
因此,有效地存在一个“点系统”,但它不是以10为基础,而是以256为基础。这是它的工作方式:
(2 8)2或65536,乘以选择器中ID的数量 +(2 8)1或256,乘以选择器中类名称的数量 +(2 8)0或1,乘以tag的数量-选择器中的名称
这对于进行信封式练习来传达概念不是很实际。 这可能就是有关该主题的文章一直使用10进制的原因。
* [Opera使用2 16(请参阅karlcow的注释)。其他一些选择器引擎使用 无穷大 -实际上是无分制(请参阅Simon Sapin的评论)。
更新,2014年7月: 正如Blazemonger在当年早些时候指出的那样,Webkit浏览器(chrome,safari)现在使用的基数高于256。也许2 16,例如Opera?IE和Firefox仍使用256。