css计算属性_CSS杂谈:css权重及优先级

55ddac2aa2b7618409181ea68617a1a9.png

前言

css 权重想必大家都听说过, 一些简单的规则大部分人也都知道:

  • 较长的 css selector 权重会大于较短的 css selector
  • id selector 权重高于 class selector

但是具体规范是什么? 浏览器是按照什么标准来判定不同选择器的权重的呢?

按照官方的表述,css优先级如下

!important>行间样式>id选择器>class选择器 属性选择器>标签选择器>通配符
内联样式的权重为:          1000
ID选择符的权重为:          0100
类(class)选择符的权重为: 0010
属性选择符的权重为:        0010
类型选择符的权重为:        0001
继承样式的权重为:          0000
通配符选择器:              0000

根据 W3 标准中的规定, css selector 分为 4 种 type: a, b, c, d. 他们的数目计算规则为:

  • a: 如果 css 属性声明是写在 style=“” 中的, 则数目为 1, 否则为 0
  • b: id 选择器的数目
  • c: class 选择器, 属性选择器(如 type=“text”), 伪类选择器(如: ::hover) 的数目
  • d: 标签名(如: p, div), 伪类 (如: :before)的数目

在比较不同 css selector 的权重时, 按照 a => b => c => d 的顺序进行比较.

由第一个 selector type a 的计算规则可知: 写在 html 代码 style 属性中的 css 相较写在 css 选择器中的 css 属性具有最高的优先级.

而 id selector (b) 相较 class selector (c) 有更高的优先级. 这也和我们平时的经验相吻合

如果 a,b,c,d 算完都一样, 怎么办?

默认行为是: 当 specificity 一样时, 最后声明的 css selector 会生效.

这里来做一个测试如果我们重复同样的 css selectory type, 权重会增加吗?

<style type="text/css">
	.repeat.repeat{
		background: red;
	}
	.repeat{
		background: blue;
	}
</style>

<body>
	<div class="repeat">哈喽</div>
</body>

如果重复的 css selector 会被忽略的话, 按照前面的规则, 最后声明的 css selector 会生效, 所以 这个 div 节点背景色应该是蓝色. 让我们看看结果:

1a3a38df587a644d52a0e99f5ec7cfca.png

结果我们得到的是一个红色的 div, 也就是说 .repeat.repeat 高于 .repeat 所以结论是: 重复的 css selector, 其权重会被重复计算.

关于 !important:

按照MDN的说法,!important是不在 css 选择器的权重计算范围内的, 而它之所以能让 css 选择器生效是因为浏览器在遇见!important时会进行特殊的判断. 当多个!important需要进行比较时, 才会计算其权重再进行比较.

10c02acd64f164184a30f793d30a34e9.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值