[1位重要标志位] > [4位特殊性标志] > 声明先后顺序
注:样式表比html后载入
①重要声明(!important)
- div{
- color:blue !important;
- color:green;
- }
虽然按照顺序应该是使用后声明的绿色,但是因为!important的缘故,所以最后使用的却是蓝色。
㈠创作人员正常声明
1.内联样式
在html文档的元素中直接插入样式的
- <div style=”display:none;”></div>
在ie6中此优先级与id选择器同级
2.id选择器
应用于对应id的元素,css中用“#”后跟id来标记。
- #header{ display:none;}
- <div id=”header“></div>
3.类(属性,伪类)选择器
1.类选择器
应用于对应class的元素,css中用“.”后跟class名来标记。
- .header{display:none;}
- <div class=”header“></div>
2.属性选择器
属性选择器应用于对应class的元素,css中用“[]”标记中html元素属性名来标记。
- div[title]{
- display:none;
- }
- <div title=”any”></div>
3.伪类选择器
LVHA伪类,样式按LVHA优先级顺序从右至左覆盖。所以要注意一下这4个伪类的声明顺序,不同的顺序会产生不同的效果。
a:link - 默认链接样式
a:visited - 已访问链接样式
a:hover - 鼠标悬停样式
a:active - 鼠标点击样式4.元素(伪元素)选择器
1.元素选择器
应用于所有对应的html标签,css中直接使用html元素标记
- div{display:none;}
- <div></div><div></div>
2.伪元素选择器
:first-letter - 首字母样式
:first-line - 首行样式5.通配符选择器
应用于所有匹配的样式,类似模糊匹配,*号就是什么都可以啦。
- div *{
- display:none;
- }
- <div><div></div><span></span></div>
6.继承样式和结合符
1.继承样式
- p会继承div设置的样式,但没有权重,任何方式给p定义的样式都可以轻易覆盖继承样式
- div{color:red;}
- <div><p></p></div>
2.结合符(combinator)
1.后代选择器(descendant selector/上下文选择器contextual selector)
后代结合符(descendant combinator):空格
空格前后的元素是后代关系。树结构的分支选择器。
(可一直嵌套下去,如:div p span)
- div span{
- display:none;
- }
- <div><p><span></span></p></div><span></span><div><em></em></div>
空格的左右两边不一定是子元素这样的绝对父子关系;而是父亲和子孙关系,即可以隔N代遗传。
如果有相似两代的话当然有两个选择最接近的一代。如:
两层span,只匹配最接近div的那个span。
- div span{
- display:none;
- }
- <div><p><span><h1><span></span></h1></span></p></div>
2.子(元素)选择器(child selector)
子结合符:大于号(child combinator)
大于前后的元素必须是父子关系。
- div > span {
- display:none;
- }
- <div><span></span></div><div><em><span></span></em></div>
3.相邻兄弟选择器(adjacentsibling selector)
相邻兄弟结合符(adjacentsibling combinator):加号
加号前后的元素必须是同级兄弟关系。
- li + li{
- display:none;
- }
- <ol><li></li><li></li><li></li></ol>
㈡读者正常声明
③用户代理(User agent)
一般指游览器。如:
游览器对a元素有默认声明,为蓝色加下划线。
[转]http://www.28star.com/blog/2008/06/06/css-priority.html (有修改)
P.S. 事实上一般不会遇到太过复杂的情况,按照我们常用的简单地来记就是:
!important > 内联定义 > id > class > 元素 > 复合结构(无定义复合>父子复合>兄弟复合)











源子回复
Thank you.
CSS2.1 中规定了关于 CSS 规则 Specificity(特异性)的计算方式,用一个四位的数字串(注:CSS2 中是用三位)来表示,最后以 Specificity 的高低判断 CSS 的优先权。
Specificity 具体的计算规则:
* 元素的 style 样式属性,加 1,0,0,0。
* 每个 ID 选择符(#id),加 0,1,0,0。
* 每个 class 选择符(.class)、每个属性选择符(例 [attr=””] )、每个伪类(例 :hover),加 0,0,1,0。
* 每个元素或伪元素(例 :firstchild)等,加 0,0,0,1。
* 其他选择符(例 全局选择符 *,子选择符 >),加 0,0,0,0。
最后逐位相加数字串,得到最终的 Specificity 值,按照从左到右的顺序逐位比较。
除了 Specificity 还有一些其他规则:
* !important 声明的规则高于一切,如果 !important 声明冲突,则比较优先权。
* 如果优先权一样,则按源码中“后来者居上”的原则。
* 由继承而得到的样式属性不参与 specificity 的计算,低于一切其他规则(例 全局选择符 * )。
h1 {color: red;}
/* 只有一个普通元素加成,结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成,结果是 0,0,0,2 */
/*0,0,0,1 小于 0,0,0,2 ,后者胜出*/
h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成,结果是 0,0,1,1*/
h2 {color: silver;}
/*一个普通元素,结果是 0,0,0,1 */
/*0,0,1,1 大于 0,0,0,1 ,前者胜出*/
html > body table tr[id=”totals”] td ul > li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符(子选择符 >),结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符,一个普通选择符,结果是0,1,0,1 */
/*0,0,1,7 小于 0,1,0,1,后者胜出*/
呵呵~清理QQ好友的时候,看到”夏侯郁郁“,还以为是谁,一看,原来是源子。
好久没来,想不到源子又开始更新博客了。我是yeahlang,不知道还记得不?呵呵~
重新弄了个博客,主题在IE6下有点问题,烦劳源子帮忙看看,谢谢!
问题说明:http://www.davidlau.org/theme-problems-under-ie-6/
顺便,你的链接被我去掉了,
源子回复
呵呵,我还一直写的你的老链接呢,我说怎么打不开了。