CSS规则层叠时的优先级算法

2016-03-02    编辑:csser     点击(

 

CSS 规则的优先级是Web前端开发人员必须理解的一个概念,我们常用的添加样式的方法有4种。

  • inline style
  • embeded style
  • external style
  • user style

inline style是丑陋的,它们穿梭在HTML文档中,与HTML元素扭成一团,给Web前端开发人员造成了许多麻烦。它们往往以这样的面目出现:

<p style="color:red;">This is a paragraph.</p>

embeded style比inline style绅士一些,它们也寄宿在HTML文档中,但是它们不屑于与HTML元素扭成一团。它们往往在 <style> 元素中出现:

<style type="text/css" media="screen">
p{
color : red;
}
</style>

external style是个贵族,它不愿意同HTML呆在一起,所以干脆以外部文件的形式独立存在。通常我们使用 <link> 元素或者@import语句将它们导入HTML。

<link rel="stylesheet" type="text/css" href="style.css" media="screen" />

我们应当尽可能使用external style,我想理由有很多,大家都知道,我也就不重复了。

还有一种user style与以上三者略有不同,如果你使用IE浏览器,那么你可以在Tools – Internet Options – General – Appearance – Accessibility – User style sheet 下找到添加user style的地方(原谅我没有中文版的IE浏览器)。

既然我们有如此多的添加style的方法,那么难以避免样式会产生层叠。如:

<p class="intro" style="color:red;">This is a paragraph.</p>

我们在使用以上inline style的同时,又在我们的external style中使用了:

p{
color : yellow;
}

我们甚至还在拥有 class="intro"<p> 元素上应用了:

p.intro{
color : blue;
}

这样我们就 在同一元素的同一属性 color 上,拥有多条CSS规则指定了值 。这种情况被称为层叠(Cascading)。当层叠发生时,CSS Parser将根据优先级算法来确定最终选用的值。