【发布时间】:2022-06-24 06:23:08
【问题描述】:
我正在使用 flexbox 为 HTML 聊天应用程序构建一个非常简单的 POC。这个想法是让聊天消息从消息窗口的底部开始。典型的东西。
我通过使用嵌套的 flexbox 来做到这一点,其中内部 div 设置为 flex-direction: column,外部 div 设置为 flex-direction: column-reverse 和 overflow-y: auto:
<div class="outer">
<div id="messages" class="inner">
<div class="message">hello</div>
</div>
</div>
.outer {
flex-grow: 1;
display: flex;
flex-direction: column-reverse;
overflow-y: auto;
}
.inner {
display: flex;
flex-direction: column;
}
它适用于桌面浏览器:
它在 iOS safari 上也可以正常工作,最多可以收到一定数量的消息。但是在某些时候,新消息会隐藏在屏幕键盘后面,查看它们的唯一方法是手动向下滚动或关闭屏幕键盘。注意:再次打开键盘将不再隐藏消息,关闭键盘似乎重置滚动。
打开 Safari 开发工具会发现一些有趣的东西。 When selecting an html element Safari thinks it is where it should be, in fact the preceding element is shown:
注意我是如何选择最后一个元素“二”的,但开发工具会突出显示消息“一”
我注意到的其他事情。将外部 div 的 overflow-y 更改为 hidden 可以解决问题,但显然我无法再滚动浏览消息了。
我猜这个问题与有两组滚动条有关,一组用于 div,另一组用于由键盘移动的页面本身。
有谁知道为什么会发生这种情况以及如何预防?
在我的手机上,添加大约 12/13 条消息足以让他们开始“隐藏”在键盘后面。
【问题讨论】:
标签: javascript html css mobile-safari