博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重拾css(4)——样式来源与层叠规则
阅读量:6871 次
发布时间:2019-06-26

本文共 1313 字,大约阅读时间需要 4 分钟。

这一节就开始实践上一节的思路!

1.“层叠”的概念

简言之,层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程。举一个简单的例子:

图片描述

上图中有两个样式来源,第一个是引用的css1.css,第二个是自己在style中编写的样式。“层叠”是个叠加的过程,可通过下图表示:

图片描述

层叠是CSS的核心机制,理解了它才能以最经济的方式写出最容易改动的CSS,让文档外观在达到设计要求的同时,也给用户留下一些空间,让他们根据需要更改文档的显示效果,例如调整字号。——摘自《CSS设计指南》

2.样式来源

上文中提到,css之所以有“层叠”的概念,是因为有多个样式来源。其实css的样式来源有下列5个(由上至下为优先级由高至低),开发人员只能接触到上面3个。

图片描述

第一,浏览器默认样式表

当你不为html设置任何样式时,b标签会显示粗体、p有纵向margin、h1字号比p大一倍……这是为什么呢?

因为浏览器自带一个默认的样式,如果html中没有为标签设置样式,则浏览器会按照自己的样式来显示。但是浏览器默认样式的级别是最低的,一旦有其他地方设置了标签样式,浏览器默认样式就会被覆盖掉。

注意,不同浏览器的默认样式有些地方是不一样的。例如,我们在写css时,都会首先设置 * {margin:0; padding:0;},这是为何?就是因为有浏览器兼容性问题。干脆,全部弄成0,这样各个浏览器就都统一了。

我们下一节专门解说默认样式,有很多值得玩味的地方。

第二,用户样式表

在一些新闻网站中,经常看到可以设置字体大小的快捷菜单,例如下图就是搜狐新闻中的设置。

图片描述

其实浏览器也有这样的设置,例如chrome浏览器中,我们就可以设置字号和字体。

clipboard.png

用户在这里设置了字体和字号之后,它们会覆盖掉浏览器默认的样式。

第三,<link>引入的css文件

引用css文件,大家应该都比较熟悉了。

第四,<style>中编写的样式代码

<style>中编写样式也都比较熟悉。

第五,<xx style=’ ’>中编写的行内样式代码

标签style属性中编写样式,也都用过吧。

后面这三种是咱们程序开发中比较常用的,这里就不多说了,不了解的朋友需要去补一补基础知识了。

3.层叠的规则

由于样式的来源不同,浏览器在加载样式时,需要根据优先级计算出最终的样式值,这样才能显示出正确的界面效果——浏览器会通过叠加和覆盖这两种方式来生成最终的样式值。

下面是举例说明:

图片描述

如上图,不同来源的两个样式,第一个样式设置了font-weight,第二个没有,浏览器会把它叠加在一起,即浏览器会把各个零散的整合成一个整体。第一个样式color:red,第二个样式color:blue,浏览器会让优先级高者覆盖低者,最终结果还是color:blue。

优先级相同条件下(例如都来自引用样式),覆盖的默认规则是后者覆盖前者,但是有一个特殊情况——!important,其实!important优先级最高。

图片描述

如上图。虽然color:blue是后来者,但是它没有居上,因为前者color:red跟着!important。这就像得到一个尚方宝剑,有最高执行权,其他人统统让路,否则佛挡杀佛。

转载地址:http://hqpfl.baihongyu.com/

你可能感兴趣的文章
Learn Python the Hard Way: 类(Class)和对象(Object)
查看>>
centos安装或修复grub并使用grub引导系统
查看>>
ThinkPHP 上传文件方法
查看>>
Linux 系统 网卡RTL8723BE 信号差不稳定的解决办法
查看>>
getopt, optarg, optind, opterr, optopt
查看>>
为什么你这么努力,工作却还是没有起色?
查看>>
今天看了thinkcmf 和onethink
查看>>
root运行google chrome
查看>>
SSH部署到Tomcat内存溢出-OutOfMemoryError 的解决办法
查看>>
Android Studio SDK报错,所有方法均红色警告,但可正常编译运行
查看>>
VC使用ADO连接SQLServer数据库
查看>>
JS获取文字长度
查看>>
spring-core组件详解——PropertySource属性源
查看>>
CentOS7 禁用root用户远程登录
查看>>
Angular 初始化闪烁之解决方案
查看>>
必须快乐,才能继续下去
查看>>
JDK源码笔记-DualPivotQuicksort
查看>>
Navicat ER 图表专业术语介绍
查看>>
Javascript创建对象的7种模式
查看>>
linux 系统端口转发
查看>>