.cs-widget { bottom: calc(12px + env(safe-area-inset-bottom)); }
.cs-widget.is-typing { bottom: var(--kb-height, 0px); }
@supports (height: 100dvh) { .cs-panel { height: 100dvh; } }
iOS 上点开客服窗口,输入框被键盘顶到中间,浮窗那一条还钉在屏幕底部,正好压在输入框上,字打进去看不见。安卓上浮窗跟着键盘往上飘,压住的是消息列表。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:浮窗用 position: fixed 加 bottom: 0 定位,参照的是布局视口,键盘弹起只改可视化视口,fixed 元素不会跟着缩。页面又没给底部留安全区,输入区就被压在最下面那几十像素里。
这次卡住的地方就在「客服浮窗遮挡输入框」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。
处理上按这个顺序:输入框聚焦时给浮窗切一个 class,把 bottom 改成计算后的键盘高度,高度用 visualViewport.height 算;别用 100vh 定浮窗高度,换 100dvh 再配 min-height,旧机型单独留 vh 兜底;键盘收起后把 class 去掉,顺便滚到输入框位置,确认没有残留偏移。
确认没问题再收工,iOS 和安卓上输入框完整露在浮窗上方,收起键盘后浮窗回到原位。
