再探 butterfly.js - 奇異的留白

來源:互聯網
上載者:User

標籤:

再探 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 fixif (navigator.userAgent.match(/iPad;.*CPU.*OS 7_\d/i)) {    $(‘html‘).addClass(‘ipad ios7‘);}

現在這是butterfly.js刻意為iPad而且是ios7下的landscape mode,做的fix

stackoverflow有人提出了一樣的issue:IOS 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在真機上展示得好好的!!

再探 butterfly.js - 奇異的留白

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.