25

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

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

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

我测试过: 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 规则/hack 或 javascript 切换来关闭三星损坏的固定定位并打开 Android 浏览器的工作固定定位。我不是在寻找一种 Javascript 解决方案,它将损坏的固定定位添加到没有任何支持的浏览器中;三星固定定位已经做到了,只是看起来很愚蠢。

4

4 回答 4

1

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

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

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

于 2012-09-27T01:39:08.017 回答
1

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

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

h1 {
   height: 20px;
}

p {
  position: absolute;
  top: 20px;
  left: 0px;
  right: 0px;
  bottom: 0px;
  overflow-y: auto;
}
于 2012-08-08T15:21:05.393 回答
0

在他对 Brad Frost 的文章的评论中,Matthew Holloway 提出了一个与 Anita Foley 的回答类似的解决方案,但在不支持的地方使用了用于溢出的 polyfill:auto。在这里查看:

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

于 2013-06-20T11:17:51.113 回答
-1

这不是三星的 Android 浏览器损坏,而是 Android 2.2 支持损坏。一般来说,您可能知道 position:fixed 在许多移动设备/系统中曾经并且在某些情况下仍然很糟糕。

要回答您的问题,没有“切换或元标记”会“打开 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=手机#tab )

您建议 SAMSUNG 引入专有的 hack 或 mod,以破坏 Android 浏览器中固定位置的其他工作支持。无论上述 3 点如何,这似乎都不太可能。

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

于 2012-10-09T09:35:30.583 回答