【HTML5疑难杂症】脱离文档流时的渲染BUG

BUG重现

最近机票团队在一个页面布局复杂的地方发现一个BUG,非常奇怪并且不好定位,这类问题一般最后都会到我这里,这个问题是,改变dom结构,页面却不渲染!!!

文档流时的渲染BUG-脱离文档流">

如图所示,我动态的改变了dom结构,结果页面那一坨变得什么都没有,相当奇怪!!!在PC模拟iPhone就可以重现,iPhone、note4等手机上也可重现,由于这种BUG我不是第一次碰到,很快便引起了注意,总结起来可以归结于:

js代码改变fixed元素的html结构(一般是动画后并且布局相对复杂),页面不会渲染

问题定位-分离法

本着发现问题,定位问题,解决问题的步骤,我开始了定位,这里的难点是,这类问题往往非常难以定位,因为他的dom tree相当复杂,首先我做了一个事情,直接将其htmlcss分离出来,摆脱js的原因,直接显示该dom。

于是问题不在了,这个很令人费解,难道是js对其造成了影响?经过一轮纠缠,定位失败开始二轮定位。

问题定位-最小化问题

这种问题确实不好处理的时候,光靠看页面可能不能处理了,这个时候便把机票的代码拿到本地,部署起来,做了几件事情:

① 去掉该页多余的业务代码,基本上不完成任何功能

② 去掉多余的dom结构(由于我们是单页应用,dom可能相对比较复杂)

打开对应业务代码一看,洋洋洒洒3000行,立马想吐:

这个时候一行行去读代码就是2B的行为了,直接找到那个显示日历的代码:

然后稍作改动,把其它业务逻辑全部搞掉,事件绑定也搞掉,只留下显示日历的事件,直接一来点击显示日历,这个时候形成的dom结构由4000多行变成了1000多行,但是依旧有BUG

问题定位-CSS重置

由于机票对日历的样式,做了重置,所以有理由怀疑是他们自己的css导致的问题,于是想去掉他们的css引用试了试,虽然样式难看了点,但是问题依旧存在......

问题定位-js逻辑

这个时候便有理由怀疑其日历显示后,本身有一定逻辑功能导致出错,于是看到了日历show后面干的事情,并且为了防止dom结构过大,将月份显示设置为1月。

都这个样子了,他居然还是渲染不处理,有点伤害自尊!!!

因为这个日历显示时候有一个从右到左的动画,这个时候将其动画关掉,却发现问题解决了!!!其中的代码为zepto的实现,不是关键

$el.css({
      "-webkit-transform": prepareCss,
      transform: prepareCss
})
  .show()
  .animate({
    "-webkit-transform": "translate(0, 0)",
    transform: "translate(0, 0)"
  }, 500, "ease-in-out", function() {
    $el.css({
      "-webkit-transform": "",
      transform: ""
    });
  });

问题定位成功-脱离文档流的渲染

最后问题定位成功,至少从表现和处理来说是定位成功的,简单来说:

动画执行结束后,如果我改变的是fixed元素中的一个子单元的html,不会有反应,但是我们同时改变static元素便会引起一次渲染,尼玛这是神马鬼!!!

问题探索-渲染的差异

为了弄懂这个原因,我们得看到渲染的细节,这里做了一个对比:

不引起static dom变化

引起static dom变化

这里注意观察最后一次paint便可以看见渲染出来的东西不一样,导致这种的差异是什么呢,我们一次次的对比几次不同

这里做一个差异对比,因为这里的static元素与fixed元素还有一些管理,我们这里操作与之完全无关的元素试试。事实证明没有什么影响,所以这类问题的解决方案是:

移动端过多定位元素布局时,偶尔操作fixed元素html不会渲染,解决方案是同步改变与之相关的static元素,便会引导渲染

刚刚使用的是设置html,这里完全可以使用这种做法:

el.html(el.html())

可以达到相同的功能,但是问题导致原因依旧不可知......不可说不是一种遗憾!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 结构
, 日历
, 代码
, 定位
, 元素
, htmlcss
, js日历日志功能
, 图片htmlcss
, 渲染页失败
, 渲染html
DOM渲染
脱离文档流、css脱离文档流、float脱离文档流、相对定位脱离文档流吗、脱离文档流的方法,以便于您获取更多的相关知识。

时间: 2024-11-03 20:02:33

【HTML5疑难杂症】脱离文档流时的渲染BUG的相关文章

CSS 文档流

文档流:将窗口自下而上分成一行一行,应在每行中按从左至右的依次排放元素,即为文档流 有三种情况使得元素离开文档流而存在,分别是浮动 绝对布局 固定定位 脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档 流的元素不存在而进行定位.需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素 ,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围.而对于使用absolute positioning 脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它

CSS文档流与块级元素(block)内联元素(inline)

将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 内联元素也不会独占一行. 几乎所有元素(包括块级,内联和列表元素)均可生成子行, 用于摆放子元素. 有三种情况将使得元素脱离文档流而存在,分别是浮动,绝对定位, 固定定位.   基于文档流, 我们可以很容易理解以下的定位模式: 相对定位, 即相对于元素在文档流中位置进行偏移. 但保留原占位. 绝对定位, 即完全脱离文档

css+div布局要素:文档流position属性 父级对象和同级对象

div+css布局要素:文档流position属性.父级对象和同级对象.从学div+css以来,一直对position几个属性的理解不够清晰.自己对position这一属性有了更深入和清晰的认识,同时让自己对整个div+css布局有了更深入的认识. 因为div实质是一个四方块,被很多业界人士形象的比喻成盒子.那么div+css布局的过程其实就是摆放这些盒子的过程.最近一周来,专门针对这个问题进行了深入的思考和研究.结果通过对这一问题的研究不仅让自己对position这一属性有了更深入和清晰的认识

《HTML5实战》——第1章 HTML5:从文档到应用的转变1.1 探索标记语言:HTML5速览

第1章 HTML5:从文档到应用的转变 本章主要内容 HTML5的基本知识 新语义标记及媒体特性 新的JavaScript API 紧密相关的Web规范 HTML5是现在Web开发的最热门主题之一,这是有充分理由的.这不仅因为它是最新的Web标记语言,还因为它制定了Web应用开发的一整套新标准.上一个版本的HTML语言(以及它那以严格著称的基于XML的兄弟:XHTML)主要把HTML限定为一种用于页面文档的标记性语言.HTML5则是第一个将Web作为应用开发平台的HTML语言. HTML5定义了

JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)_javascript技巧

js中输出信息的方法内容如下所示: 1.文档流输出 document.write('hello'); 2.输出信息提示框 模态对话框 window.alert('要输出显示的内容'); 或 alert('要输出显示的内容'); alert(n); 3.信息确认框 var f = window.confirm('是否要进入新浪网'); confirm(""); if(f){ location.href = 'http://www.sina.com.cn'; } 4.提示输入框 windo

excel文档退出时不提示保存是怎么了?

  excel文档退出时不提示保存是怎么了?          我的excel2007出了问题,文件编辑后,退出时不提示"保存",在网上搜了一下,有人询问相同的excel 问题,很多回答都是说更改"保存自动恢复信息时间间隔",或者重装office,没有其他修复这个问题的有效答案,最后在微软帮助网站http://support.microsoft.com/kb/213513/zh-cn里找到2个解决办法,一是按CTRL + S 保存更改,然后关闭该工作簿,这种办法可以

解决word文档工作时跳出word已关闭的办法

解决word文档工作时跳出word已关闭的办法: 1.在电脑桌面找开始,打开运行. 2.在运行命令行输入regedit,然后确定. 3. 显示注册表编辑器,在里面依次打开HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0. 4.在12.0里面找到word项,然后用鼠标右键单击word项,显示下拉栏,在里面点击重命名. 5.在重命名里输入word0.名称更改成word0. 6.然后在返回到注册表编辑器里依次打开HKEY_LOCAL_MACHINESOFTWAR

java jacob对word文档操作时怎样选中全文

问题描述 java jacob对word文档操作时怎样选中全文 用做一个对word操作的程序,一切顺利,就是需要选中全文时卡住了,查了很对资料找不到相关方法.请大神指教!

让PPT文档保存时自动压缩图片

尤其是在PPT演示文稿中,大家都喜欢追求图文并茂而当文档中有大量图片时.文档的个头就小不了此时.该如何有效控制文档的大小呢,以下就是让文档自动"减肥"的两个方法保存时自动压编图片为7自动减小包含有图片文档的大小,Powerpoint提供了在保存时自动执行图片压缩的功能.使用方法如下 步骤1:打开需要自动压缩图片的PPT演示文搞. 步骤2:在图片工具的格式选项卡.单击调整组中的压缩图片,然后单击选项按钮 步骤3:选中.保存时自动执行基本压缩复选框,单击确定按钮.(教程 ) 之后.对于上述