css代码中的优先级是如何排序的? important强制提升优先级
发布于 作者:苏南大叔 来源:程序如此灵动~

前端的程序员们都知道,可以使用!important
来提升css
的优先级。那么,其实大家都知道,css
在使用!important
之前,也是有不同的优先级层次的。那么使用了!important
来强制提升优先级之后,会发生什么事情呢?

大家好,这里是苏南大叔的程序如此灵动博客。这里记录苏南大叔和计算机代码的故事。本文讨论css
的优先级排序问题,问题非常基础,高手请飘过。测试环境:chrome@104.0.5112.102
。
css
基础的优先级排序
css
可以使用#
id选择器定义,也可以使用.
类选择器定义。可以定义在style
标签里面,还可以定义在css
文件里面。还可以定义在html
元素的style
属性里面。那么,这些css
的优先级是怎么定义的呢?
首先,"style
标签里面" 对比 "link
的css
文件" 的话,谁定义在后面谁生效。或者说,两者的地位是相同的,谁在后面谁就会生效。
其次,定义的作用范围越具体,优先级越高。这个其实也比较好理解。比如:div
、div.class
、div#id
、<div style=''>
这几种形式。谁定义的范围更具体呢?谁的优先级就比较高。下面的代码是范例:
这个例子里面,div
、div.box
、div#box
的颜色依次加深,作用在具体元素上面的时候,背景色又换成了blue
。

如果使用important
提升优先级的话,在上个例子中,可以使用!important
来提升优先级,谁设置了!important
谁的优先级就是第一。但是,大家都设置了!important
的话,就还是遵循原来的优先级排序。就这好比1234
排序,!important
权重100。单独加个100就最大数了,但是如果大家都加100,那么结果还是101,102,103
这样的排序方案。

一个人使用大招就是大招,大家都用大招就是效果抵消了...
使用js
调整!important
平时都是使用js
调整css
属性,但是碰到!important
的时候,就有些小麻烦了,下面的是几种js
原生调整的方式。(关于这个需求,jq
其实是最好用的。)
- 常规的
e.style.backgroundColor
,并不能修改!important
。 e.setAttribute("style","background-color:pink !important");
可以修改!important
,但是会破坏原有的css
。e.style.setProperty()
,这个不破坏css
,但是也不能设置!imporant
。- 最终完美方案
e.style.setProperty("background-color", "pink","important")
。完美方案就是使用e.style.setProperty()
,加个第三个参数"important",注意没有感叹号。
对于要修改的属性,也可以先删除,再添加。
值得说明的是:属性之间也有包容关系。比如上边这个background-color
,删除background
,也是可以的,效果一样。
相关链接
- https://newsn.net/say/css-first-line.html
- https://newsn.net/say/css-marker.html
- https://newsn.net/say/css-selector.html
总结
一句话总结就是:!important
很令人头疼。更多css
文章,请点击苏南大叔的博客:


