小编典典

如何计算CSS特异性中的点

css

它指出,特异性是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

(我的直觉告诉我,这是前者,正如我们所知道的ID选择的特异性看起来是这样的:0,1,0,0


阅读 269

收藏
2020-05-16

共1个答案

小编典典

但是,正如许多人已经指出的那样,W3CCSS建议指出:“将三个数字abc(在基数较大的数字系统中)连接起来具有特殊性。”因此,我的极客只需要弄清楚这个基数是多少。

事实证明(至少4个最常用的浏览器*)用于实现此标准算法的“很大的基础” 是256或2 8。

这意味着用0个id和256个类名指定的样式 覆盖仅用1个id指定的样式。我用一些小提琴进行了测试:

  • 255类是 足够覆盖1号
  • ......但256类 足以覆盖1号
  • … 256标签名称 足以覆盖1类名

  • ......但是,唉256个ID是 足够覆盖1种内嵌样式 (更新2012年8月15日-你将不得不使用!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。

2020-05-16