加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

CSS优先级如何值相加与bit位存储?

发布时间:2022-01-11 15:39:21 所属栏目:语言 来源:互联网
导读:很多朋友对于CSS优先级不是很理解,其实我们能从值相加和bit位存储这两种方式来看,下文的介绍很详细,有需要的有需要的朋友可以了解看看,对大家理解CSS优先级会有一定的帮助。 方式一:值相加 优先级是如何计算的? 优先级就是分配给指定的 CSS 声明的一
      很多朋友对于CSS优先级不是很理解,其实我们能从值相加和bit位存储这两种方式来看,下文的介绍很详细,有需要的有需要的朋友可以了解看看,对大家理解CSS优先级会有一定的帮助。
 
     方式一:值相加
 
    优先级是如何计算的?
 
    优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。而当优先级与多个 CSS 声明中任意一个声明的优先级相等的时候,CSS 中最后的那个声明将会被应用到元素上。
 
    当同一个元素有多个声明的时候,优先级才会有意义。因为每一个直接作用于元素的 CSS 规则总是会接管/覆盖(take over)该元素从祖先元素继承而来的规则。
 
    我们从上面一段描述中得到个很重要的信息: 权重
 
    我们再来看选择器优先级关系:ID选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器。
 
    看来真相已经呼之欲出了。
 
    我们只要给不同类型的选择器设定一个权重值,然后在根据选择器的数量进行相加,就很容易得出优先级,例如:
 
    ID选择器的权重值设为 1000
 
    类选择器 、属性选择器 、伪类选择器的权重值设为 100
 
    标签选择器、伪元素选择器的权重值设为 10
 
    我们可以很快速的计算出下面这段CSS的权重值并作出正确的判断。
 
//权重值1110
#app .menu .item{}
//权重值210
.menu.menu .item{}
//权重值30
.item.item.item{}
    可是。。。细心的你可能会发现只要低优先级的选择器数量足够多(例如: .item...x200 {} ),那么低优先级的权重值就可以超过高优先级的权重值,但实际效果其实还是以高优先级样式为准。当出现这种情况时可能用现在的权重值计算方式就无法解释了!
 
    当然可以通过限制选择器的最大数量及拉大选择器的权重值数值还是可以解释的,但我总觉得这不是一种好的实现方式。
 
    方式二:bit位存储
 
    我们假设权重值是用 unsigned int 变量存储,那么该变量的 bit 位一共有32位(4字节),我们从高位按字节展开如下:
 
    字节1:00000000
 
    字节2:00000000
 
    字节3:00000000
 
    字节4:00000000
 
    按字节和选择器对应:
 
    字节1:00000000
 
    字节2:00000000 ;ID选择器
 
    字节3:00000000 ;类选择器 、属性选择器 、伪类选择器
 
    字节4:00000000 ;标签选择器、伪元素选择器
 
    相同类型选择器直接进行个数相加,并填入到指定字节内。
 
    例1:
 
    #app .menu .item{}
 
 
    得到的权重值 bit 位如下:
 
    结果为:65793
 
    例2:
 
    .menu.menu .item{}
 
 
    得到的权重值 bit 位如下:
 
    结果为:513
 
    例3:
 
    .item.item.item{}
 
 
    得到的权重值 bit 位如下:
 
    结果为:3
 
    上面示例中位存储容量只有8位,所以选择器的最大限制为255,当然我们可以提高bit位来提高选择器的最大值。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读