在Samsung Android浏览器上启用真正的固定定位

时间:2012-07-06 18:34:15

标签: android css webkit css-position samsung-mobile

自2.2以来,Android浏览器支持固定定位,至少在某些情况下,例如关闭缩放时。我有一个没有JS的简单HTML文件,但我试过的三部三星手机的固定定位是完全错误的。标题滚出视图而不是真正的固定定位,然后在滚动完成后弹回原位。

对于我测试的任何配置(2.2,2.3,2.3 x86,4.0.4),Android SDK模拟器上都不会发生这种情况。在三星手机上的应用程序中使用WebView时也不会发生这种情况:在这些情况下,定位会按预期工作。

有没有办法让三星Android“股票”浏览器使用真正的固定定位?

我测试过:  1.三星Galaxy 551,Android 2.2  2.三星Galaxy S,Android 2.3  3.三星Galaxy S II,Android 2.3

示例代码:

<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no,width=device-width,height=device-height"> 
    <style>
    h1 { position: fixed; top: 0; left: 0; height: 32px; background-color: #CDCDCD; color: black; font-size: 32px; line-height: 32px; padding: 2px; width: 100%; margin: 0;}
    p { margin-top: 36px; }
    </style>
  </head>
  <body>
    <h1>Header</h1>
    <p>Long text goes here</p>
  </body>
</html>

预期的行为是,无论您滚动多少,灰色标题都会填满屏幕顶部并保持不变。在三星Android浏览器上,它似乎滚动出视图,然后在滚动完成后重新弹回到位,就像使用Javascript模拟固定定位一样,它不是。

修改 从评论和“答案”来看,似乎我可能不清楚我需要什么。我正在寻找一个元标记或css规则/黑客或javascript切换,关闭三星的破碎固定位置,并打开Android浏览器的工作固定位置。我不是在寻找一个Javascript解决方案,它将破坏的固定定位添加到没有任何支持的浏览器中;三星固定定位已经做到了,它只是看起来很愚蠢。

4 个答案:

答案 0 :(得分:1)

也许你可以考虑一种不需要固定定位的不同方法......

添加滚动到段落元素而不是(默认)body元素。然后,您可以将标题元素放在标题下方。这将确保标题始终显示在页面顶部,但允许您滚动段落中的文本。

h1 {
   height: 20px;
}

p {
  position: absolute;
  top: 20px;
  left: 0px;
  right: 0px;
  bottom: 0px;
  overflow-y: auto;
}

答案 1 :(得分:1)

我认为Android 2.2浏览器实现javascript的最佳方式。

您可以通过此链接找到更多信息。这是关于所有移动浏览器中的固定定位。

http://bradfrostweb.com/blog/mobile/fixed-position/

答案 2 :(得分:0)

在对布拉德弗罗斯特的文章的评论中,马修霍洛威提出了一个解决方案,就像Anita Foley的回答一样,但是有一个溢出的polyfill:auto,不支持。在这里查看:

http://bradfrostweb.com/blog/mobile/fixed-position/

答案 3 :(得分:-1)

这不是三星的Android破解浏览器,它的Android 2.2有破坏支持。 一般情况下,您可能知道位置:已修复,在某些情况下,在许多移动设备/系统中仍然很复杂。

要回答您的问题,没有“切换或元标记”将“打开Android浏览器的工作固定位置”。如果浏览器不支持某些东西,那么就没有“切换”来“切换”它。这不是一个功能。

否则,您可以使用模仿它的http://cubiq.org/iscroll-4

(编辑:一些事实)

  1. 根据http://caniuse.com/#search=position:fixed Android 2.2和Android 2.3有PARTIAL而不是完全支持position:fixed。 (部分支持似乎有错误的支持)
  2. Android模拟器不会,也永远不会与Android原生浏览器相同,例如IETester与IE原生不同(存在差异)
  3. 摩托罗拉ATRIX 4G没有Android 2.2,但Android 2.3(http://www.motorola.com/us/consumers/MOTOROLA-ATRIX%E2%84%A2-4G/72112,en_US,pd.html?selectedTab=tab-2&cgid=mobile-phones#tab
  4. 您建议SAMSUNG引入专有的hack或mod,打破Android浏览器中固定位置的其他工作支持。无论上述3点如何,这似乎都不太可能。

    答案实际上很简单:有部分(错误)支持,你唯一的解决方案是使用一个替换或“修复”漏洞的javascript库。

相关问题