!important 规则
在 CSS2.1 规范 6.4.1 Cascading order 中根据CSS样式的来源和重要性,给出了优先级的升序排列:
【注】
1. 未加 '!important' 的样式。
根据 CSS2.1 规范中的描述,'!important' 可以提高样式的优先级,他是最高优先权重,无疑对样式优先级影响是巨大的。
为了平衡开发者设置的样式和浏览器用户设定的样式,默认开发者设置的样式优于浏览器用户设置的样式;另外,声明了'!important' 的样式优于其他样式声明。
关于 '!important' 的详细信息,请参考 CSS2.1 规范 6.4.2 !important rules 中的内容。
IE6 IE7(Q) IE8(Q) 中不支持位于同一个选择器内的 '!important' 规则,他可能会导致实际样式效果与预计不符。
使用 '!important' 规则而没有考虑 IE6 的情况,可能会使 IE6 中的表现跟其他浏览器有差别。
其影响程度跟属性值的重要程度成正比。比如, '!important' 设置在跟页面布局有很大关系的宽度值上,那么宽度的影响可能会作用于整个布局。
IE6 IE7 IE8(Q) | 不支持位于同一个选择器内的 '!important' 规则。 |
---|
在 IE6 IE7(Q) IE8(Q) 中,不完全支持 '!important' 规则。位于同一个选择器内的 '!important '规则将失效。
分析以下代码:
<style type="text/css"> div{ width:100px; height:30px; background-color:gold !important; background-color:silver; } </style>
<div></div>
根据 CSS2.1 规范中的描述可知,DIV 最终显示应为金色。
这段代码在不同的浏览器环境中的表现:
IE6 IE7(Q) IE8(Q) | IE7(S) IE8(S) Firefox Opera Safari Chrome |
---|---|
下面看若 '!important' 位于两个选择器内的情况:
<style> .c1 { background:blue !important; } .c2 { background:green; } </style> <div style="width:100px; height:100px;" class="c1 c2"></div>
所有浏览器 |
---|
运行后发现所有浏览器中,DIV 元素的背景色均为蓝色。则证明 IE6 IE7(Q) IE8(Q) 支持不位于同一个选择器内的 '!important' 规则。
这是浏览器的 Bug 导致,无法通过常规方式解决。不过,一般 '!important' 规则常常用于 CSS hack 以区分 IE6 与其他浏览器,其作为 hack 存在的意义已大于其本身的含义。
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: |
IE6
IE7 IE8 Firefox 3.6.3 Chrome 6.0.437.3 dev Safari 5.0 Opera 10.54 |
测试页面: | important.html |
本文更新时间: | 2010-07-08 |
important order