!important的做用就是提升指定样式属性的优先级。浏览器
通常状况下,咱们对同一个元素设置样式属性的时候,对同一个属性设置了两个甚至多个值,像下面这样:字体
1 p { /* 例1 */ 2 color:red; 3 color:yellow; 4 color:blue; 5 }
这个时候就是后面声明的属性生效,字体显示为蓝色。spa
假设咱们但愿我还像上面这么写,但我但愿最终生效字体显示为红色,那咱们能够给红色设置!important:code
1 p { /* 例2 */ 2 color:red !important; /* 设置了优先级 */ 3 color:yellow; 4 color:blue; 5 }
那这个时候字体就会显示为红色。对象
若是有多个样式属性设置了!important,像下面这样:blog
1 p { /* 例3 */ 2 color:green !important; 3 color:red !important; 4 color:yellow !important; 5 color:blue; 6 }
那它仍是和没设置时同样,最后声明的生效,也就是说上面这个例子最终生效的颜色是黄色。ci
咱们知道,CSS选择器越具体,优先级越高,例如:get
1 <head> 2 <style> 3 p.p1 { color:blue; } 4 p { color:red; } 5 </style> 6 </head> 7 8 <body> 9 <p class="p1">p标签</p> 10 </body>
最终这个<p>元素显示为蓝色。it
若是咱们设置了!important给color:red;class
1 <head> 2 <style> 3 p.p1 { color:blue; } 4 p { color:red !important; } /* 设置了优先级 */ 5 </style> 6 7 </head> 8 <body> 9 <p class="p1">p标签</p> 10 </body>
最终这个<p>元素显示为红色。那若是这个<p>元素设置了内联样式呢?
1 <head> 2 <style> 3 p { color:red !important; } 4 </style> 5 </head> 6 <body> 7 <p class="p1" style="color:blue">p标签</p> 8 </body>
最终这个<p>元素显示为红色。也就是说声明了!important的样式属性会覆盖其它任何声明。
在Internet Explorer中的 !important
但在IE 6及更早的版本中,不支持咱们这种写法。像例3,在IE5(我用的是IE11而后再控制台中切换到IE5的方式模拟的,IE11没有模拟IE6,凑合凑合_(:з」∠)_)中运行效果是这样的:
没错,最终它仍是显示为蓝色,!important被忽略了。让咱们换一种写法:
1 p { color:blue; } 2 p { color:yellow; } 3 p { color:red !important; }/* 设置了优先级 */
这个时候就能够显示为红色了:
再看看这个例子:
1 p { color:blue; } 2 p { 3 color:red !important; /* 设置了优先级 */ 4 color:yellow; 5 }
在模拟IE5的浏览器中运行效果以下:
我的理解:IE6及更早版本的IE浏览器中运行!important就比如说"你们都是针对这个元素设置的样式,color样式请优先使用我这个CSSRule对象(被{}包裹起来的一些样式属性)中的color样式",而不是说"就使用我指定的color样式"。
参考资料:MDN - 优先级:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Specificity