[ 深入CSS | 青训营笔记]

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

选择器的特异度

如果有两条或两条以上指向同一元素的冲突 CSS 规则,则浏览器将遵循一些原则来确定哪一条是最具体的,并因此胜出。 将特异性(specificity)视为得分/等级,能够确定最终将哪些样式声明应用于元素。

权重排行(高到低)

1、行内样式

(!important)

2、ID选择器

#id

2、class选择器

#id

4、类型和伪元素选择器

div, ::before

块级元素和行级元素的区别

块级

  1. 不和其他块级元素并列摆放
  2. 适用所有的盒模型属性

行级

  1. 和其他行级盒子放在一行或者拆开成多行
  2. 盒模型中的width、height不适用

CSS求值过程

image.png

首先

浏览器会解析html为DOM树,并且加载所有样式

filtering阶段

浏览器会先警告filtering阶段,对页面中每个元素找到可以匹配到该元素的所有有效值

当前阶段会筛选出所有的明确值,同时保留多个声明值待后续流程来处理。

p { font-size: 16px; } 
p.text { font-size: 1.2em; }

例如上述两个属性值冲突,但是在此阶段都会保留。

cascading阶段

在cascading根据权重计算 选择出权重最高的一个属性

defulting阶段

在此阶段中,浏览器为没有声明值的属性制定一个确切的值,此阶段执行后保证指定值不为空。但是指定还不一定能直接渲染,例如font-size: 1.2em

resolving阶段

在此阶段中,将一些相对值(比如em,%)或者关键字(inherit,initial)转化成为绝对值,也包括相对路径转化为绝对路径。

在该流程结束后,所有值转化为在不进行实际布局的情况下所能获得最具体的值,同时也意味着对于 width: 100% 这样的属性依旧保留百分比,留待后续流程转化为绝对值。

formatting阶段

在此阶段中,将剩余的相对值转为为绝对值。(此流程结束之后,所有的计算值全部转化为绝对值了)

constraining阶段

在此阶段中,将小数值转化为近似整数用于实际渲染

以上步骤我们就看到了css效果了

最后学习css的建议:

  1. 善于查看文档 MDN 和 W3C 规范
  2. 保存好奇心,善用开发者工具
  3. 持续学习

总结

此笔记我只记录了一些我认为比较重要的知识点,求值过程中有很多小细节需要去深挖,也再一次感谢青训营的课程,让我巩固了知识,也很感谢一些大佬在网上的分享。