首页 > 其他 > 详细

在使用rem布局的时候,出现闪屏的现象的分析

时间:2021-04-25 14:11:21      阅读:33      评论:0      收藏:0      [点我收藏+]

问题
翻到文章底部(反思1024),查看最新解决方案。

rem布局在加载的时候会出现元素一开始很小,闪烁一下恢复正常大小,这是怎么回事呢?为此,我们来探讨一下!

rem的布局具体不介绍了吧,你应该已经掌握或者会用了。

写好页面后发布看下,我们会看到html元素先很小,闪烁一下又正常了,虽然不影响功能,但是这给用户的体验是不行的啊,太明显了!

 

 

解决
模拟弱网环境,通过查看代码发现,DOM在渲染出来的时候,html根元素font-size的大小,js还没有设置进去。

设想一:既然js看上去是执行的晚了,那我们就把js放在head中怎么样?
测试发现结果还是一样!

设想二:是不是通过外链引入js会耗费加载时间,我们直接把这段js放在</body>前怎么样?
测试发现结果还是一样!

设想三:是不是js代码放head中会快点?
测试发现结果还是一样!

算了,不设想了,这里我们就需要清楚,css/js对DOM树渲染的影响了。

CSS(外链或内联)会阻塞整个DOM的渲染(Rendering),然而DOM解析(Parsing)会正常进行
很多浏览器中,CSS会延迟脚本执行和DOMContentLoaded事件
JS(外链或内联)会阻塞后续DOM的解析(Parsing),后续DOM的渲染(Rendering)也将被阻塞
JS前的DOM可以正常解析(Parsing)和渲染(Rendering)

说明:

无论是外链CSS还是内联CSS都会阻塞DOM渲染(Rendering),然而DOM解析(Parsing)会正常进行。 这意味着在CSS下载并解析结束之前,它后面的HTML都不会显示。 这也是为什么我们把样式放在HTML内容之前,以防止被呈现内容发生样式跳动。 当然代价就是显示延迟,所以性能攸关的站点都会内联所有CSS。

很多浏览器中CSS还会延迟脚本执行和DOMContentLoaded事件触发(该事件就是jQuery的dom ready)。

不论是内联还是外链JavaScript都会阻塞后续DOM解析(Parsing),当然后续DOM的渲染(Rendering)也被阻塞了。 之所以DOM解析(Parsing)需要暂停, 是因为脚本中可能会包含类似document.write的语句,即脚本有可能改变当前DOM树。

值得注意的是JavaScript只会阻塞后续的DOM而非整个DOM,这意味着前面的DOM可以被正确地解析以及渲染。 这也是为什么我们把脚本放在页面底部:脚本仍在下载时页面已经可以正常地显示了。

 

结论:
从html入手无法解决问题,那我们就从css入手吧!
上面说了,既然我们的css都会选择优先加载,防止跳动,那我们是不是可以一开始就让网页是正常显示的呢,也就是说,我们来设置html的font-size属性,这里我们通过媒体查询,把相对应的设备区间的根元素font-size列举出来,因为我们是750px的设计稿,而且我们的开发方式是1rem=100px(如果你了解rem的话你应该理解),我们可以使用媒体查询,在JS,一开始DOM还没有渲染完但可以正常展现的时候,html的根元素字体大小的设置来源于媒体查询,如下图;当DOM解析完成,js计算了html的根元素字体大小后,字体大小值来源于js设置的行内样式,计算后的值发挥作用!至此这个问题完美解决。

 

 最终方案:

1.html{font-size: 50px;}//这个一定写
2.JS动态计算和密集的媒体查询二选一

原文链接:https://blog.csdn.net/u013778905/article/details/77938784

在使用rem布局的时候,出现闪屏的现象的分析

原文:https://www.cnblogs.com/coderLsq/p/14699475.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!