这一节就开始实践上一节的思路!css
简言之,层叠就是浏览器对多个样式来源进行叠加,最终肯定结果的过程。举一个简单的例子:html
上图中有两个样式来源,第一个是引用的css1.css,第二个是本身在style中编写的样式。“层叠”是个叠加的过程,可经过下图表示:chrome
层叠是CSS的核心机制,理解了它才能以最经济的方式写出最容易改动的CSS,让文档外观在达到设计要求的同时,也给用户留下一些空间,让他们根据须要更改文档的显示效果,例如调整字号。——摘自《CSS设计指南》浏览器
上文中提到,css之因此有“层叠”的概念,是由于有多个样式来源。其实css的样式来源有下列5个(由上至下为优先级由高至低),开发人员只能接触到上面3个。字体
第一,浏览器默认样式表
当你不为html设置任何样式时,b标签会显示粗体、p有纵向margin、h1字号比p大一倍……这是为何呢?网站
由于浏览器自带一个默认的样式,若是html中没有为标签设置样式,则浏览器会按照本身的样式来显示。可是浏览器默认样式的级别是最低的,一旦有其余地方设置了标签样式,浏览器默认样式就会被覆盖掉。spa
注意,不一样浏览器的默认样式有些地方是不同的。例如,咱们在写css时,都会首先设置 * {margin:0; padding:0;},这是为什么?就是由于有浏览器兼容性问题。干脆,所有弄成0,这样各个浏览器就都统一了。设计
咱们下一节专门解说默认样式,有不少值得玩味的地方。3d
第二,用户样式表
在一些新闻网站中,常常看到能够设置字体大小的快捷菜单,例以下图就是搜狐新闻中的设置。htm
其实浏览器也有这样的设置,例如chrome浏览器中,咱们就能够设置字号和字体。
用户在这里设置了字体和字号以后,它们会覆盖掉浏览器默认的样式。
第三,<link>引入的css文件
引用css文件,你们应该都比较熟悉了。
第四,<style>中编写的样式代码
<style>中编写样式也都比较熟悉。
第五,<xx style=’ ’>中编写的行内样式代码
标签style属性中编写样式,也都用过吧。
后面这三种是我们程序开发中比较经常使用的,这里就很少说了,不了解的朋友须要去补一补基础知识了。
因为样式的来源不一样,浏览器在加载样式时,须要根据优先级计算出最终的样式值,这样才能显示出正确的界面效果——浏览器会经过叠加和覆盖这两种方式来生成最终的样式值。
下面是举例说明:
如上图,不一样来源的两个样式,第一个样式设置了font-weight,第二个没有,浏览器会把它叠加在一块儿,即浏览器会把各个零散的整合成一个总体。第一个样式color:red,第二个样式color:blue,浏览器会让优先级高者覆盖低者,最终结果仍是color:blue。
优先级相同条件下(例如都来自引用样式),覆盖的默认规则是后者覆盖前者,可是有一个特殊状况——!important,其实!important优先级最高。
如上图。虽然color:blue是后来者,可是它没有居上,由于前者color:red跟着!important。这就像获得一个尚方宝剑,有最高执行权,其余人通通让路,不然佛挡杀佛。