再探 butterfly.js - 奇异的留白

##再探 butterfly.js - 奇异的留白

####事情经过

梓凡兄 捣鼓他的 豆瓣FM 播放器的时候,发现了butterfly.js会在ipad横屏模式(landscape mode)的时候对<html>添加class="ipad ios7"。更加离奇的是在butterfly.css有以下样式:

@media (orientation:landscape){
	html.ipad.ios7 > body{
		position:fixed;bottom:0;width:100%;height:672px !important
	}
}

这样的结果就是导致了在chromeApple iPad 3/4(landscape mode)下,<body>height值为672px,而且是!important的。显然这在Apple iPad 3/4(landscape mode)(分辨率为1024*768)做不到height100%

####真相只有一个

今天在研究butterfly.js源代码,在butterfly-amd.js下发现有以下代码:

//ios7 issue fix
if (navigator.userAgent.match(/iPad;.*CPU.*OS 7_\d/i)) {
	$('html').addClass('ipad ios7');
}

现在这是butterfly.js刻意为iPad而且是ios7下的landscape mode,做的fix。 在stackoverflow有人提出了一样的issueIOS 7 - css - html height - 100% = 692px。用我渣渣的英语翻译得出的问题就是:

iPad(ios7)landscape mode下,将<html><body>height设为100%safari会把<html><body>outerHeight渲染为692px,而innerHeight渲染会672px

没错,少了20px!这样的后果就是网页在屏幕显示出来bottom会被切掉20px。需要以下的hack来修复这奇异的bug

body {
    position: absolute;
    bottom: 0;
    height: 672px !important;
}

由于这个bug只存在于iPad而且是ios7再而且是landscape mode。所有就有了上文贴出的butterfly.js代码。 为什么是672px,而不是iPad768px?? 因为在iPad实机使用下,屏幕上有系统的最顶的电量、信号状态栏。在safari中有地址栏和其他后退、菜单的按钮。这些都占了屏幕的高度。最后留给我们的网页的height只有672pxlandscape mode)。

所以,在chromeiPad调试模式下发现672px会在屏幕底部留有一大段空白也不用惊讶!butterfly.js会将你的webApp在真机上展示得好好的!!

转载于:https://my.oschina.net/u/2287563/blog/373293

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值