CSS权重中的越级现象

来源:互联网 发布:云计算及其关键技术 编辑:程序博客网 时间:2024/05/16 09:11

CSS(层叠样式表)通过多重层叠样式间各自权重的比较计算,来决定那一层样式应该最终发挥作用。这也是css中“层叠”意思的具体体现。
权重的一般规则,一般是 !importent > 内联样式 > id > class > 元素选择器 > * 。
但真实的应用中往往没这么简单,经常是 各级选择器搭配嵌套使用,如 div.nav或者 .nav .bar,这时就涉及到权重的具体计算。
CSS中样式的权重计算采用的是进制形式:(内联样式).(id).(class).(元素)

举例:
元素选择器: p 权(1)重: 0.0.0.1
类选择器: .nav权重(10):0.0.1.0
id选择器:#sec权重(100):0.1.0.0
内联样式:style=”“ 权重(1000):1.0.0.0
混合型:#sec .nav p 权重: 0.1.1.1重点内容

但是采用的进制并不是简单的十进制,体现为 叠加十层class选择器的权重并不会高于1个id选择器:
重点内容

.class1.class2.class3.class4.class5.class6.class7.class8.class9.class10.class11<#id

不同浏览器采用不同大小的空间来存储每一位上的权重值:如firefox和ie都是用的8位来存储class位的权重值,也就是2^8=256。当叠加26层class时权重为10*26=260,就会发生溢出,向id位进一,权重为大于一个单一的id选择器.此时26层class的样式会在forefox上发挥作用,覆盖住id选择器的样式效果。

也就是说:当被比较的两个选择器的最高权重位相同时才具有可比性(最高位都是id或者都是class的选择器),最高权重位不在同一级时,权重位高的选择器的权重永远大于权重位低的选择器(id永远大于class),只有当低权重位上的值大到超出存储范围,发生溢出(26个class的权重超出存储范围,溢出进位到id位上)相当于权重进一级时,才能与高一级进行权重大小的比较。

0 0
原创粉丝点击