Comments (2)
Flash of unstyled content(无样式内容闪烁,简称FOUC)
- 出现的形式
页面被解析后先出现无样式的内容,然后在css加载渲染完成后,突然展现出所有样式,也就是闪烁一下突然显示样式,这种情况被称为FOUC。 - 原因
当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。 - 什么操作会导致出现FOUC
- css引入使用了@import;
- 存在多个style标签;
- css文件在底部引用;
- 解决方法
用link加载css文件,放在head里面
from daily.
FOUC:
页面加载解析时,页面以样式A渲染;当页面加载完成时,突然以样式B渲染,导致出现样式闪烁。
样式A: 浏览器页面样式或者浏览器页面样式层叠部分已经加载好的样式。
样式B: 浏览器加载了全部的页面样式。
为什么会出现FOUC:
输入网址向浏览器发送请求时,服务器返回页面给浏览器,浏览器边下边解析边渲染。
渲染中html会被加载为DOM Tree,CSS会被加载为 CSSOM Tree, DOM Tree 和 CSSOM Tree 会被加载为 Render Tree 二者任一变化即会触发 Render Tree 变化
由于样式加载存在延时情况,页面先渲染出了部分行内样式和浏览器默认样式等样式文件,加载完成后,触发 Render Tree 变化, 在网络不好或者样式文件体积较大的情况下,会出现样式闪烁明显现象。
常见如在页面最后引用样式、存在多个style 覆盖原有样式。
解决方案:
因此,常见会把样式引入 link style 放在head中, 在 body渲染前尽量构建相对完整的 CSSOM Tree, 并且 link style等标签虽然不会阻塞元素解析但是会阻塞页面渲染。(此方案 chrome 支持较好 其他浏览器各有差异)
方案二、在样式加载前隐藏body,等样式加载完显示,此方案会出现较长时间白屏,但可以解决闪烁问题(优化策略 先在body中加一个非常轻量的loading状态,等加载完毕后删除并将资源显示出来(理论可以,需测试))
from daily.
Related Issues (20)
- 第二十三题:新窗口打开链接的方法是什么?那么如何使全站链接都打开新窗口? HOT 1
- 第二十四题:介绍一下HTML5中的ruby标签 HOT 2
- 第二十五题:new操作符都做了什么事情? HOT 2
- 第二十六题:你所在的团队有规范吗?举例说明都定义了哪些规范? HOT 1
- 第二十七题:用洗牌算法实现一个打乱数组的方法 HOT 3
- 第二十八题:实现数组的并、交、差、补集这四个方法 HOT 2
- 第二十九题:什么是链表? HOT 1
- 第三十题:两数相加
- 第三十一题:描述一下原型和原型链,以及之间的关系
- 第三十二题:什么是高阶函数? HOT 1
- 第三十三题:柯里化?
- 第三十四题:如何快速的适应新工作?
- 第三十五题:为什么不常用table和iframe这两个元素?
- 第三十六题:聊聊单元测试?
- 第三十七题:void 0 HOT 1
- 第三十八题:BEM 规范 HOT 1
- 第三十九题:Webpack的优缺点 HOT 1
- 第四十题:实现一个Promise HOT 1
- 第四十一题:TypeScript的优劣点 HOT 1
- 第四十二题:React 获取 ref 的方法都有哪些? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from daily.