一般情况下:

[1位重要标志位] > [4位特殊性标志] > 声明先后顺序

!important > [ id > class > tag ]

使用!important可以改变优先级别为最高,其次是style对象,然后是id > class >tag ,另外,另外在同级样式按照申明的顺序后出现的样式具有高优先级。

­
先来看下!important 这个诡异的东西。

 <style type="text/css"> 
  div{background: red !important; background: blue}
 </style> ­

除了IE6,其他浏览器都会显示背景为红色,正是!important的作用,意思就是只要我在这里我就是最重要的啦,任何东西都不能取代我,没看见都是一个 !外加一个英文单词 important 吗?很形象,很贴切了。IE6这里会显示背景为蓝色,并不是IE6不支持!important,而是它会按照样式声明顺序后出现的覆盖前面的,此时它已经不认识!important了,它六亲不认了。这正是广为流传的IE6 hack之一。而如果这样写会正常显示背景为红色:

 <style type="text/css"> 
 div{background: blue; background: red !important; }
 </style> ­


再来看下4位特殊性标志 [0.0.0.0]

从左至右,每次给某一个位置+1,前一段对后一段具有无可辩驳的压倒性优势。无论后一位数值有多大永远无法超过前一位的1。

1,内联样式 [1.0.0.0]

A:<span id="demo" style="color:red "></span>
B:还有就是JS控制的内联样式style对象,document.getElementById("demo").style.color="red";
这两者属于同一级别,不过一般情况是JS控制的内联样式优先级高,这与先后顺序申明有关系与本质无关,因为往往DOM操作是在DOM树加载完毕之后。

2,ID选择器 [0.1.0.0]
3,类,属性,伪类 选择器 [0.0.1.0]
4,元素标签,伪元素 选择器 [0.0.0.1]

关于CSS选择器可以查看W3C或者CSS的手册,不啰嗦了。
注意下 伪类选择器

LVHA伪类,样式按LVHA优先级顺序从右至左覆盖,不同的顺序会产生不同的效果。
a:link - 默认链接样式
a:visited - 已访问链接样式
a:hover - 鼠标悬停样式
a:active - 鼠标点击样式



最后写下关于JS控制内联样式 带!important的现象:

看下正常的Demo1:

 <style type="text/css"> 
 div{background: red !important; height:20px;} 
 #demo1{ background: green;} 
 .demo1{ background:blue;} 
 </style> ­
 <div class="demo1" id="demo1" style="background: yellow"></div>
<script type="text/javascript">
document.getElementById("demo1").style.background="black"; 
</script> 
­最终显示背景为红色,这应该不会有什么问题, !important 放到哪都会改变优先级的,而后面的JS代码也不会改变优先级。

­
另外一个Demo2:

 <style type="text/css">
 div{background: red !important; height:200px;}
 #demo2{ background: green;}
 .demo2{ background: blue;}
 </style>
 
 
 <div class="demo2" id="demo2" style="background: yellow !important"></div>
­
 <script type="text/javascript">
 document.getElementById("demo2").style.background="black";
 </script>
­
IE6,7        显示 红色
FF2+        显示 黄色
Opera9+   显示 红色
Safari       显示 黄色


­Demo3:

 ­<style type="text/css">
 div{background: red !important; height:200px;}
 #demo3{ background: green;}
 .demo3{ background: blue;}
 </style>

 <div class="demo3" id="demo3" style="background: yellow !important"> </div>
­
 ­<script type="text/javascript">
 document.getElementById("demo3").style.background="black !important";
 </script>
­
IE6,7       显示红色
FF2+       显示黄色
Opera9+  显示黑色
Safari      显示黑色

­

­解释下上面两个例子:

­JS控制的style对象 实际就是内联样式style,这个没错
­
但是对于 JS控制style对象属性值里增加的!important 三个浏览器却给出了不同的结果:

­IE:JS控制style对象属性值完全覆盖内联style属性值,不支持Element.style.property="value !important",将报错:参数无效。

FF2+:不完全支持
Element.style.property="value !important" : !important无效,不会报错,
如果内联style属性值无!important,则完全覆盖,有!important
则内联style属性优先级最高,不会受JS控制style的任何影响。

Opera9+ :JS控制style对象属性值完全覆盖内联style属性值,支持Element.style.property="value !important"。

Safari:支持Element.style.property="value !important" ,如果内联style属性值无!important,则完全覆盖,有!important 则内联style属性优先级最高,不会受JS控制style的任何影响。

关于CSS样式优先级的更多相关文章

  1. CSS 样式优先级

    首先,选择器优先级顺序 优先级逐级增加的选择器列表: 通用选择器(*) 元素(类型)选择器 类选择器 属性选择器 伪类 ID 选择器 内联样式 !important 规则例外,该样式声明会覆盖CSS中 ...

  2. CSS样式优先级

    关于CSS样式优先级 一般情况下: [1位重要标志位] > [4位特殊性标志] > 声明先后顺序 !important > [ id > class > tag ] 使用 ...

  3. 强制改变css样式优先级

    .list{ left:20px!important; } css !important作用是提高指定CSS样式规则的应用优先权. !important是CSS1就定义的语法,作用是提高指定样式规则的 ...

  4. css样式优先级问题

    官方表述的CSS样式优先级如下: 通用选择器(*) < 元素(类型)选择器 < 类选择器 < 属性选择器 < 伪类 < ID 选择器 < 内联样式 那么,我们来举个 ...

  5. css样式权重优先级,css样式优先级

    原文:http://www.bkjia.com/Javascri... 样式选择器权重优先级: important > 内嵌样式 > ID > 类 > 标签 | 伪类 | 属性 ...

  6. 权重和层叠规则决定了CSS样式优先级

    一.基本的优先级规则 比较同一级别的个数,数量多的优先级高,如果相同即比较下一级别的个数,至于各级别的优先级如下: important > 内联 > ID > 类 > 标签 | ...

  7. css样式优先级计算规则

    css样式的优先级分为引入优先级和声明优先级. 引入优先级 引入样式一般分为外部样式,内部样式,内联样式. 外部样式:使用link引入的外部css文件. 内部样式:使用style标签书写的css样式. ...

  8. 通过!important设置css样式优先级

    CSS写在不同的地方有不同的优先级,一般 .css文件中的定义 < 元素style中的属性,但是如果使用!important,则会变得不一样,使用!important的css定义是拥有最高的优先 ...

  9. css样式优先级和权重问题

    内联样式: <div style="font-size: 12px;">姓名</div> 外部样式: <link rel="styleshe ...

随机推荐

  1. net.sf.json.JSONException: Object is null

    出现这个错误的原因是net.sf.json.JSONArray或JSONObject转换时,对象内包含另一个对象,而该被包含的对象为NULL,所以抛出异常. 补充: 最可恨的是,明明转换的时候已经成功 ...

  2. FocusWriter

    2. FocusWriter 如果你正在从事某种写作——小说.博客.文档等——你绝对希望认识一下FocusWriter.它已经有近十年的发布历史了,但是一直是我们最喜欢的无分心写作应用之一.如果你希望 ...

  3. (组合数学3.1.2.1)POJ 2249 Binomial Showdown(排列组合公式的实现)

    /* * POJ_2249.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <iostream> #i ...

  4. 页面滚动动态加载数据,页面下拉自动加载内容 jquery

    <!DOCTYPE=html> <html> <head> < script src="js/jquery.js" type=" ...

  5. 存储过程 务的概念 事务的特性 关于异常的处理 连接池 构JdbcUtil类

    1 存储过程    1)用当地数据库语言,写的一段业务逻辑算法,并该算法存储在客户端    2)使用存储过程需要用于CallableStatement接口,同时需要使如下SQL命令调用:{call a ...

  6. Windows Embedded Compact 2013升级:VS2013也能编译

    IT之家(www.ithome.com):Windows Embedded Compact 2013升级:VS2013也能编译 今天,微软为Windows Embedded Compact 2013送 ...

  7. 8 Things Every Person Should Do Before 8 A.M.

    https://medium.com/@benjaminhardy/8-things-every-person-should-do-before-8-a-m-cc0233e15c8d 1. Get A ...

  8. hdu 1166(树状数组 或 线段树)

    线段树 (本题无需建树,少了很多) #include<cstdio> #include<cstring> int sum[5000005],rt,data,lb,rb,n,m; ...

  9. textview的上下滑动效果

    1.xml文件中 <TextView    …    android:scrollbars="vertical"  ../> 2.java文件中 textview.se ...

  10. datagrid中需要填写长文本,扩展的textarea

    $.extend($.fn.datagrid.defaults.editors, { textarea: {//textarea就是你要自定义editor的名称 init: function(cont ...