浏览器高度计算不同导致的显示问题

朋友给我发了个文件包,让我看看里面的弹出遮罩层在IE下显示是正常的,但在Firefox等浏览器下弹出一下之后就消失了。

效果如下图,一个遮罩的效果,在Firefox里白色的遮罩DIV很快又消失。

7PJKG}G6UJILTL5NJG1`3QO

第一反应是是浏览器兼容性问题。找到DIV样式里有filter以为是这个问题,找了一下在非IE下用opacity来解决,可是在其代码里已经有了opacity的定义。看来应该不是这个问题。立马解决是不太可能了。那就用FireBug一步一步调试吧。还好工具强大,很快就发现问题了。遮罩层在移动的时候样式中的定义属性left与top快速变化,并且top最终的值是负的。看来这是导致问题的原因。JS代码如下:

 
复制代码
                    this.popupLayer.css({opacity:0.1}).show(400,function(){
                        
this.popupLayer.animate({
                            left:($(document).width() 
- this.popupLayer.width())/2,
                            //下面这一句导致的问题
                            top:(document.documentElement.clientHeight - this.popupLayer.height())/2 + $(document).scrollTop(),
                            //top:(document.documentElement.clientHeight - 584)/2 + $(document).scrollTop(),
                            opacity:0.8
                        },
1000,function(){this.popupLayer.css("opacity",1)}.binding(this));
                    }.binding(
this));
复制代码

使用Alert显示各JS获取的属性在不同浏览器里的数值。

image

先手动修改了个固定的高度。OK,显示正常。看来找到问题的解决办法之后,在JS执行的方法开头先设置对像高度。这样就在同的浏览器里实现了兼容。

this.popupLayer.height(584);

 

网上找的关于高度解析差异的说明

对高度的解析
IE:将根据内容的高度变化,包括未定义高度的图片内容,即使定义了高度,当内容超过高度时,将使用实际高度
Firefox:没有定义高度时,如果内容中包括了图片内容,MF的高度解析是根据印刷标准,这样就会造成和实际内容高度不符合的情况;当定义了高度,但是内容超过高度时,内容会超出定义的高度,但是区域使用的样式不会变化,造成样式错位。
结论:大家在可以确定内容高度的情况下最好定义高度,如果真的没有办法定义高度,最好不用使用边框样式,否则样式肯定会出现混乱!

 

本文没有什么技术含量,供大家参考参考!

posted on   Gary Zhang  阅读(2312)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2009-05-13 BizTalk开发系列(三十七) 性能监视器在BizTalk性能测试中的使用
2009-05-13 BizTalk开发系列(三十六) Orchestration单实例执行

导航

点击右上角即可分享
微信分享提示