你对CSS规则的执行顺序是否了解,这里和大家分享一下,若两条规则具有相同的权值、起源及特殊性,那在样式表中最后出现的规则优先。
1、CSS规则之特殊性
首先来看一下这个例子将会发生的情形:
<style type="text/css">
.grape
{
color: Blue;
}
H1
{
color: Red;
}
</style>
<h1 class="grape">
Meerkat <em>Central </em>
</h1>
H1和.grape都匹配上面的H1元素,那么到底应该使用哪一个呢?实践证明.grape是正确答案,把句子显示为蓝色。根据规范,一般的HTML元素选择符(H1,P等)具有特殊性:
1、类选择符具有特殊性10,ID选择符具有特殊性100,值越大,权重就越大,越优先。
<style type="text/css">
H1
{
color: Red;
}
/*特殊性=1*/
PEM
{
color: Blue;
}
/*特殊性=2*/
.grape
{
color: Fuchsia;
}
/*特殊性=10*/
P.bright
{
color: Yellow;
}
/*特殊性=11*/
P.brightEM.dark
{
color: Gray;
}
/*特殊性=12*/
#ID01
{
color: Red;
}
/*特殊性=100*/
</style>
2、CSS规则之继承
在特殊性的框架下,被继承的值具有特殊性0,也就是说任何显式声明的规则将会覆盖其继承样式,即便这条规则具有多高的权重。
<style type="text/css">
#ID01{color:Red;}
/*特殊性=100*/
EM{color:Gray;}
/*特殊性=1*/
</style>
<h1 id="ID01">
Meerkat<em> Central</em>
</h1>
虽然ID选择符特殊性最高,但由于在特殊性的框架下,继承值只有特殊性0,因些Central会显示为Gray颜色。
3、CSS规则之STYLE元素
还有sytle元素在CSS下权值定义为100,尽管ID选择也一样,实际上style元素比ID具有更高的特殊性。
<style type="text/css">
#ID01, EM{color:Gray;}
</style>
<h1 id="ID01">
Meerkat<em style="color:red;"> Central</em>
</h1>
会显示为red颜色。
4、CSS规则之重要性(!important)
!important具最高特特性比如说1000,因此!important规则会覆盖内联STYLE属性的内容。程序代码
<style type="text/css">
H1{color:red!important;}
</style>
<H1 style="color:black;">MeerkatCentral!</H1>
将显示为RED颜色。
一种特殊情形
<style type="text/css">
P#warn
{
color: Red !important;
}
EM
{
color: Black;
}
</style>
<p id="warn">
Thistextisred,but<em> emphasizedtextisblack.</em>
</p>
虽然定义!important最高特殊性,但句子并没有全部显示为RED红色,为什么呢?
也许我们得回头看看前面的规则,在前面的第二点继承中提“在特殊性的框架下,继承值只有特殊性0。”
因此,即便定义!important,继承里的特殊性也只有0,所以显示为特殊性为1的EM规则。
权重顺序为:继承=>HTML普通选择符=>类选择符=>style元素=>!important
5、CSS规则之层叠
1)若两条规则具有相同的权值、起源及特殊性,那在样式表中最后出现的规则优先。
2)任何位于文档中的规则都比引入的规则优先。

浙公网安备 33010602011771号