如何解决职位:固定在iOS(iPhone / iPad)上的底部工具栏

我有一个固定在我的网站每个页面底部的酒吧,使用position:fixed。 问题是在像iPhone或iPad这样的设备上这个属性是不被尊重的。

我试图使用JavaScript来检测屏幕高度,滚动位置,这在iPad上完美的作品:

$( window ).scroll( function ( ) { $( "#bar" ).css( "top", ( $( window ).height() + $( document ).scrollTop() - 90 ) +"px" ); } ); 

正如你所看到的我正在使用jQuery。 问题是这个代码在iPhone上不太适用,因为窗口的高度不包括位置栏(也包括debugging栏,如果有的话),所以栏首先放在正确的位置,但是当你滚动它时,固定在正确的位置(Mobile Safari的地址栏所使用的像素数量)之上。

有没有办法获得这些信息并正确地修复这个工具栏?

请记住,这不是一个为iPhone制作的网站,所以我根本不能使用像iScroll这样的技巧。

从iOS 8.4开始,你可以使用position: sticky; 分别position: -webkit-sticky; 解决这个问题。

我只能指出你的方向:

  • 固定定位-上移动的Safari
  • CSS-位置固定溶液
  • 所述移动-WebKit的CSS-固定位置问题
  • SO:怪异的WebKit-issue-with-position-fixed

我只是做了这样的事情,坚持导航窗口的顶部 。 如果您滚动传递,导航栏将从标题下方开始粘贴。 iOS5确实支持固定定位。 该项目将捕捉到滚动结束后的位置,但仍能正常工作。 '#sticky-anchor'是一个围绕我的导航的包装div。

别忘了我在哪里find这些东西,从很多网站上得到一些小东西。 您可以调整它以适应您的需求。

 $(window).scroll(function(event){ // sticky nav css NON mobile way sticky_relocate(); var st = $(this).scrollTop(); // sticky nav iPhone android mobile way // iOS 4 and below if (navigator.userAgent.match(/OS 5(_\d)+ like Mac OS X/i)) { //do nothing uses sticky_relocate above } else if ( navigator.userAgent.match(/(iPod|iPhone|iPad)/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) ) { var window_top = $(window).scrollTop(); var div_top = $('#sticky-anchor').offset().top; if (window_top > div_top) { $('#sticky').css({'top' : st , 'position' : 'absolute' }); } else { $('#sticky').css({'top' : 'auto' }); } }; }; 

我在我的网站上解决了这个问题,并在Stack Overflow上回答了这个问题。 从那以后,我得到了很多人的谢意。 对不起,我没时间总结。

https://stackoverflow.com/a/10030251/1118070

iScroll可能是您的问题的最简单的解决scheme。 相反,你相信它也适用于Android和歌剧。 它的新版本performance出色。

http://cubiq.org/iscroll-4

这一点的jQuery代码为我工作:

 if(navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod'){ $("#footer_menu").css("position", "fixed").css("top", $('window').height()); }; 

否则#footer_menu的CSS是:

 position:fixed; bottom:0; width:100%; padding:5px 0; text-align:center; height:44px; 

我认为设置高度帮助正确渲染,并在桌面浏览器,我想这个菜单固定在浏览器窗口的底部。

感谢Google,而不是我:

http://code.google.com/mobile/articles/webapp_fixed_ui.html

其实很简单