【问题标题】:My Website's Scrollable Divs Work Everywhere Except Mobile Safari我的网站的可滚动 div 可以在除 Mobile Safari 之外的任何地方使用
【发布时间】:2017-10-12 03:53:21
【问题描述】:

我正在开发一个网站http://strange.business,该网站旨在在 5 个可滚动查看 div 中加载 5 个随机故事。注意:目前只有 2 个故事。

页面设计的这方面似乎没有任何问题,在 Chrome、IE、Edge 等中,div 可以毫无问题地滚动。但我昨天在我 gf 的 iPad mini 上尝试过,div 被锁定由于某些原因。故事会加载,但不会滚动。

这些 div 的基本设置如下:

#display1 {
background-color: white;
height: 350px;
overflow: auto;
}

#display1Inner {
width: 100%;
height: 100%;
overflow: visible;

}

<div name="display1" id="display1" title="Display1">
        <span id="display1JavaWarning">You may need to enable 
            Javascript</span>           
        <object type="text/html" id="display1Inner"></object>
</div>

当页面加载时,它会执行一个 javascript 函数,该函数会选择一个随机预览 htm 文件,然后使用该数据填充 display1Inner 对象。我知道我的编码通常可能更严格,但它通常确实有效。显然在移动 Safari 上除外。

在研究了类似的问题后,我尝试了一堆 CSS 变体,但似乎没有任何效果。那个“溢出:可见;” bit 是我最近的尝试之一,但是当我第一次注意到这个问题时它并不存在。我不认识任何使用 iPhone 的人(奇怪的是),所以我不确定更高版本的 Safari 是否仍然会出现此问题,但我测试过的 iPad 并没有那么旧。我应该能够完成这项工作。有什么想法吗?

PS。该页面仍在进行中,如果您在浏览时遇到困难,请见谅。

ETA:好的,所以我将页面转换为在嵌套 div 中使用 iframe,现在它可以跨平台工作。这么多就解决了。耶!

但现在,我正在尝试摆脱在桌面浏览器中查看页面时出现的双滚动条。据我了解此解决方法,IOS Safari 完全无视 iframe 高度设置并以全长显示它们。因此需要 iframe-wrapper div 来控制它。因此,当我在“普通”浏览器窗口中查看它时,会出现额外的滚动条。如果我在 iframe-wrapper div 上禁用滚动,那么它会消除双滚动条,但也会中断 Safari 中的滚动。

您可以在http://strange.business/test.htm 查看最新版本。我愿意接受建议。

预计到达时间:成功!将 iframe 高度设置为 99% 并去掉边框后,它们看起来就像以前一样,没有额外的滚动条。现在可以跨平台滚动。我的生活中少了一个问题。感谢您的帮助!

【问题讨论】:

  • PS PS。就像我提到的,现在只有 5 个故事中的 2 个。只有满载的故事才会滚动。谢谢。
  • strange.business/test2.htm 上创建了一个精简版的 div 设置。在 Browserstack 的模拟 iPhone 6S 中测试它,故事对象仍然不会滚动。这当然是一个烦人的问题。

标签: html ios css scroll safari


【解决方案1】:

您是否为您的 div 尝试过以下 CSS:

-webkit-overflow-scrolling: touch;
overflow-y: scroll;

我在这个 codepen 中遇到了这个解决方案: https://codepen.io/kristiegiles/pen/WveNaX?editors=110

它被设置为滚动 iframe,但我尝试用一​​些普通的 html 代替 iframe,它在我的 iPhone 上运行。

html 基本上是一个包裹你内容的 div:

<h1>scrolling on iOS</h1>
<div class="content">
<div class="iframe-wrapper">
// Your content here
</div>
</div>

-webkit-overflow-scrolling: touch;overflow-y: scroll; 添加到应用于div 的类中:

html,body{
height:100%;
}
.content{
width:100%;
height:100%;
overflow:hidden;
position:relative;
}
.iframe-wrapper{
  position: absolute; 
  right: 0; 
  bottom: 0; 
  left: 0;
  top: 0;
  -webkit-overflow-scrolling: touch;
  overflow-y: scroll;
}

希望对您有所帮助。

【讨论】:

  • 好的,我已经将该代码合并到strange.business/test.htm 中,并在每个对象周围放置了 iframe-wrapper div。它在每个故事上都给了我双滚动条,但除此之外它在 Chrome 和我的 S8 上都可以正常工作。在我回家之前,我无法在 iPad 上进行测试。手指交叉。
  • 嗯。我还没有回家,但我在 browserstack.com 上进行了测试。浏览到我创建的 test.htm 页面时,在模拟的 iPhone6S 上仍然出现问题。 Android 设备运行良好。这绝对很奇怪。
  • 好吧,我终于设法让它在奇怪的.business/test2.htm 的第三个窗格中工作。它基本上与您给我的示例页面上使用的滚动 iFrame 设置相同。所以我可能不得不将我的页面转换为 iFrame,但至少它是可行的。
  • 嗯,很高兴它帮助您获得了一些可行的东西。我在我的 iPhone 6 上测试了代码,看起来还不错。对不起,6S有问题。祝你好运!
  • 这对于使滚动平滑非常有效,但是当键盘显示在可滚动部分的顶部时,它也会破坏键盘输入。有没有办法解决这个问题?
猜你喜欢
  • 2022-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
相关资源
最近更新 更多