浏览器如何渲染页面
浏览器解析
1、浏览器通过请求的 URL 进行域名解析,向服务器发起请求,接收文件(HTML、CSS、JS、Images等等)。
2、HTML 文件加载后,开始构建 DOM Tree
3、CSS 样式文件加载后,开始解析和构建 CSS Rule Tree
4、Javascript 脚本文件加载后, 通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree
浏览器渲染
1、浏览器引擎通过 DOM Tree 和 CSS Rule Tree 构建 Rendering Tree
2、Rendering Tree 并不与 DOM Tree 对应,比如像 标签内容或带有 display: none; 的元素节点并不包括在 Rendering Tree 中 。
3、通过 CSS Rule Tree 匹配 DOM Tree 进行定位坐标和大小,是否换行,以及 position、overflow、z-index 等等属性,这个过程称为 Flow 或 Layout 。
4、最终通过调用Native GUI 的 API 绘制网页画面的过程称为 Paint 。
Webpage Rendering
当用户在浏览网页时进行交互或通过 js 脚本改变页面结构时,以上的部分操作有可能重复运行,此过程称为 Repaint 或 Reflow。
Repaint
当元素改变的时候,将不会影响元素在页面当中的位置(比如 background-color, border-color, visibility),浏览器仅仅会应用新的样式重绘此元素,此过程称为 Repaint。
Reflow
当元素改变的时候,将会影响文档内容或结构,或元素位置,此过程称为 Reflow。( HTML 使用的是 flow based layout ,也就是流式布局,所以,如果某元件的几何尺寸发生了变化,需要重新布局,也就叫 Reflow。)
Reflow 的成本比 Repaint 的成本高得多的多。一个结点的 Reflow 很有可能导致子结点,甚至父点以及同级结点的 Reflow 。在一些高性能的电脑上也许还没什么,但是如果 Reflow 发生在手机上,那么这个过程是延慢加载和耗电的。----浏览器的渲染原理简介
以下行为将有可能产生 Reflow
增加、删除、或改变 DOM 节点
增加、删除 ‘class’ 属性值
元素尺寸改变
文本内容改变
浏览器窗口改变大小或拖动
动画效果进行计算和改变 CSS 属性值
伪类激活(:hover)
CSS 动画的两种做法(transition 和 animation)
transition 过度动画
作用
补充中间帧
语法
transition:属性名 时长 过渡方式 延迟。
transition:left 200ms linear。
还可以用逗号分隔两个不同属性:
transition:left 200ms,top 300ms。
也可以用all来代表所有属性:
transition:all 1s;
过渡方式:
linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier | step-start | step-end | steps
注意:
并不是所有属性都可以过渡
display:none=>block 就不能过渡,
如何知道哪些浏览器支持css的特性及资料查阅
使用caniuse.com,来查询某一个浏览器,对css特性的支持情况。
Google搜索关键词时后面加上MDN
CSS tricks
张鑫旭的博客
animation
语法
animation:时长|过渡方式|延迟|次数|方向|填充模式|是否暂停|动画名
时长:1S或者1000ms
过渡方式:同transition取值相同,如:linear
次数:1或者2.5或者infinite
方向:reverse|alternate|alternate-reverse
填充模式:none|forwards|backwards|both
是否暂停:paused|running
以上所有属性都有对应的单独属性
要学好CSS,就是要不断的练习,不要去死记硬背,用得多了,自然就会记得住各种属性和用法。