CSS优先级

我将CSS优先级总结为四个级别的优先,按照从高到低的顺序排列分别是标签离修饰内容近,!important相关,选择器级别,CSS代码位置靠下。在比较的时候从高往低比较。若是在某一优先级层面上已经比较出不一样,就不须要继续比较;不然进入下一级的比较。下面详细的描述这四个优先级css

第一优先级为标签离修饰内容近。例如<div id="a"><div class="b">内容</div></div>中,b的位置就比a离文字更近,当选择#a和.b的时候,.b的优先级更高浏览器

第二优先级为!important相关的优先,顺序为!important用户,!important做者,做者,用户,浏览器。其中用户是阅读网页的人,做者是写网页代码的人,浏览器指浏览器的默认样式。在浏览网页的时候咱们能够发现,对于未定义过CSS字体大小的网页,能够经过点击浏览器上面的字体大小改变字体,这就是用户高于浏览器的例子。而定义过CSS字体大小的网页,则没法经过浏览器上面的字体大小改变字体,这就是做者高于用户的例子。字体

第三为选择器级别的优先。选择器有四种,按照优先级排列为:行内样式(style=""),id选择器(#name{}),class选择器(.name{}),标签选择器(div{})。在进行比较的时候,先比较最高位的数量,若是相同,比较低位的数量,直到得出结果。若是全部位的数量均相同,进入第四优先级的比较。url

第四为选择器为CSS代码的位置。加入CSS的方法有四种:
行内样式:<div style="color:red;">
嵌入式:<style type="text/css">p{color:red;)</style>
外部连接式:<link href="sty.css" rel="stylesheet" type="text/css" />
导入式:<style type="text/css">@import url("sty2.css");</style>
在前三级优先级均相同的状况下,它们的位置哪一个靠下,哪一个优先级高。因为行内样式在第三级优先级最高,因此不可能出现行内样式和其它样式进入第四级pk的状况,所以在第四级的比较中是进行嵌入式,外部连接式,导入式的位置比较。先将外部连接式和导入式的代码排列在文档内,而后就能够比较单条语句的顺序了。
注意:一、语句能够位于页面的任何位置,老是靠下的优先
二、对于一个<style>标签,要么写入嵌入样式,要么写入导入样式。文档

下面给出一些实例来描述以上四个优先级之间的关系class

第一和第二的比较
<style type="text/css">
#a{color:blue!important;}
#b{color:red;}
</style>
<body>
<div id="out"><div id="a"><p id="b">文字</p></div></div>
b离修饰内容更近,虽然a有!important,仍是不能覆盖,显示红色import

第二和第三的比较
<style type="text/css">
#a{color:blue!important;}
div #a{color:red;}
</style>
<body>
<div id="out"><div id="a"><p id="b">文字</p></div></div>
div #a中有一个标签选择,一个id选择;a中只有一个id选择,但因为使用了!important因此优先级变高,显示蓝色。方法

第一和第三的比较
<style type="text/css">
#b{color:blue;}
#out #a{color:red;}
</style>
<body>
<div id="out"><div id="a"><p id="b">文字</p></div></div>
虽然下面的id选择符更多,可是b离内容更近,因此是蓝色im

第一和第三的比较-行内样式的优先级问题
<style type="text/css">
.c3{color:blue;}
</style>
<body>
<div style="color:red;" id="a" class="c2" ><p id="b" class="c3">文字</p></div>
在外层div使用了行内样式,但CSS选择器选择的是更靠近内容的class,因此是蓝色。若是选择器选择.c2,类选择优先级不如行内选择,就显示为红色总结

附加内容:内嵌代码修饰的位置
<style type="text/css">
#b{color:blue;}
</style>
<body>
<div id="out"><div id="a"><font color="red"><p id="b">文字</p></font></div></div>
这里虽然有行内样式,但其修饰位置比b更加靠外,因此是蓝色

font修饰的究竟是哪一个呢?font其实也能够看作一个标签 <style type="text/css"> font{color:blue;} </style> <body> <div id="out"><div id="a"><font color="red"><p id="b">文字</p></font></div></div> 这时候显示为蓝色。而选择#a的时候就会显示红色了。选择#b的时候则显然是蓝色。这说明内嵌标签的修饰位置在它两端的标签之间,而内嵌标签的修饰词汇的优先级比标签选择(参考第三级优先)更弱。