了解 important的用法和规则
发布时间:2023-10-03 10:02:22 所属栏目:语言 来源:
导读:在实际应用中,我们有时候会遇到“CSS中!important的用法和规则是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“CSS中!important的用法和规则是什么”文章能帮助
在实际应用中,我们有时候会遇到“CSS中!important的用法和规则是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“CSS中!important的用法和规则是什么”文章能帮助大家解决问题。 一、理解 !important 与优先级无关 有的同学称 css 的样式优先级计算的例外规则-!important规则,为 css 样式优先级“最高级”,这其实有点道理,因为从作用结果上看,这似乎符合事实的。不管内联样式,还是百八十嵌套层的样式选择器组合,都可以被 !important 覆盖。 例如:下面这个优先级权重其实已经很高的样式,会轻易被 !important 作用的样式覆盖。 .text { color: green !important; } body #main .box p span { color: red; } 按照下面的这份样式优先级权重规则来看,“body #main .box p span{}” 的优先级权重大约是 0113,而 ".text{}" 的优先级权重大约是 0010。 css 延时优先级权重规则说明: 一个选择器的优先级可以说是由四个部分相加 (分量),可以认为是个十百千 — 四位数的四个位数: 千位: 如果声明在 style 的属性(内联样式)则该位得一分。这样的声明没有选择器,所以它得分总是1000。 百位: 选择器中包含ID选择器则该位得一分。 十位: 选择器中包含类选择器、属性选择器或者伪类则该位得一分。 个位:选择器中包含元素、伪元素选择器则该位得一分。 结果很显然,应用了 ".text{}" 的样式,文本颜色为 green。我们要注意,“body #main .box p span{}” 的优先级权重大约是 0113,而 ".text{}" 的优先级权重大约是 0010,前者的优先级更高,却应用了后者的样式,这是因为 !important 这个例外规则。注意,从技术上讲,!important 与优先级无关,所以你要算 !important 的优先级权重是多算?一万?八千?这没法算,它是例外规则,与最终的结果直接相关,但是与优先级无关。 二、什么时候可以使用 !important 规则 tips:css 中使用 !important 的合理场景,是去覆盖糟糕的难以更改的样式。注意是覆盖,而不是一开始写样式就使用 !important。覆盖+难以更改就是我认为的 !important 的合理适用场景。 例如下面的场景: 1.覆盖内联样式 内联样式的优先级权重很高,如果不便于改动源码中的样式,那么选用 !important 去覆盖掉原来的内联样式是合适的。因为此时,除了改动源码,还有什么合适的办法可以改动内联样式?似乎没有了吧。然后就是关于“不便改动源码”的理解,例如第三方插件的内联样式,这确实不便于改动。如果是自己开发中的项目,那么改动源码可能比起用 !important 去覆盖更合适。对于一些老旧项目里面的内联样式,这种源码是可以动的,但如果你认为“改动源码”非常费劲,你也有一点理由去使用 !important,但不太建议。 2.覆盖优先级很高的选择器 除了内联样式,还有一种需要使用 !important 的场景,那就是样式优先级很高,权重很大的样式。优先级很高,权重很大,是啥概念呢?就是除了改源码(代码),几乎没有办法能改动了。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css-important Demo</title> <style> #main { color: red; } body #main { color: #002afd; } html #main { color: #5dfd00; } /* 假设这份样式在第三方插件中,除了改动源码, 还有什么办法可以覆盖 html body #main{} 的样式,样式穿透已经改不动了吧 */ html body #main { color: #2c3e50; } </style> </head> <body> <div id="main"> 这一段普通的文字 </div> </body> </html> 例如上面的例子,html body #main{} 的优先级很高,如果的代码是在第三方插件中,我们不便于改动源码,也就是也无法使用内联样式这个秘密武器,而样式穿透的优先级又不够,没啥好办法了,此时就是 !important 的适用场景了。 还有一种情况,就是旧的样式已经使用了 !important 规则,而我们不便于改动源码(代码),那么只能使用 !important 去覆盖 !important 的样式。 例如下面这样: div p { height: 30px !important; } #my-container div p { height: 50px !important; } 有时可能还要结合样式穿透符,例如下面这样: ::v-deep #my-container div p { height: 50px !important; } 三、禁用 !important 的经验法则 为啥要特别强调谨慎使用 !important,因为正如前文说到的 !important 是例外规则,没法算清优先级权重,就是说使用 !important 会破坏固有的级联规则,让调试找bug,以及覆盖样式都变得更加困难。所以,才要特别强调谨慎使用 !important。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐