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

朋友给我发了个文件包,让我看看里面的弹出遮罩层在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的高度解析是根据印刷标准,这样就会造成和实际内容高度不符合的情况;当定义了高度,但是内容超过高度时,内容会超出定义的高度,但是区域使用的样式不会变化,造成样式错位。
结论:大家在可以确定内容高度的情况下最好定义高度,如果真的没有办法定义高度,最好不用使用边框样式,否则样式肯定会出现混乱!

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值